Accueil > Forum > > > > Référence circulaire en VBA sur Excel
Référence circulaire en VBA sur Excel
mardi 29 mai 2007 à 12:30:38 |
Référence circulaire en VBA sur Excel

nico971gwada
|
Bonjour, J'ai fait une procédure qui appelle une fonction sous excel afin de calculer des pourcentages. En gros j'ai le résultat d'une enquete en ligne sous les yeux. Dans mon tableau il y a des lignes grises qui symbolisent les questions et en dessous de chaque ligne grise un ensemble de ligne (qui ne sont pas grises) remplies de 1 et de 0 et qui symbolisent le choix des différentes réponses possibles. Le but est de pouvoir faire une colonne a la fin de mon tableau et qui pour chaque ligne de réponse me disent le pourcentage de choix. Sachant que dans la ligne grise représentant une question donnée j'ai une case indiquant le nombre de répondants. voici un bout du code: (Je vous préviens, comme je viens de commencer le vba mon code risque de vous paraitre très sale) Private Sub CalculerPourcentage(LigneCourante, NbReponses, Autre)
Dim i, j As Integer Dim NbReponsesPositives, NbRepondants As Long Dim LigneReponse As Range NbRepondants = LigneCourante.Cells(1, 2) For i = 1 To NbReponses + Autre Set LigneReponse = LigneCourante.Offset(i, 0) LigneReponse.Cells(1, IntColMax + 1).Activate LigneReponse.Cells(1, IntColMax + 1).Formula = "=Personal.xls!Pourcentage()" Next End Sub
Public Function Pourcentage() As Long Dim NbReponsesPositives As Long, NbRepondants As Long, NbColMax As Integer, NbRowMax As Integer Dim LigneReponse As Range, CaseNbRepondant As Range, Cellule As Range Dim i As Integer, j As Integer Set Cellule = ActiveCell Set LigneReponse = ActiveSheet.UsedRange.Rows(Cellule.Row) NbColMax = ActiveSheet.UsedRange.Columns.Count NbRowMax = ActiveSheet.UsedRange.Rows.Count i = 0 While i < 20 Set CaseNbRepondant = Cellule.Offset(-i, -Cellule.Column + 2) If CaseNbRepondant.Interior.ColorIndex = 15 Then i = 20 NbRepondants = CaseNbRepondant.Value End If i = i + 1 Wend NbReponsesPositives = 0 For j = 3 To NbColMax - 1 If LigneReponse.Cells(1, j) <> 0 And LigneReponse.Cells(1, j) <> "" Then NbReponsesPositives = NbReponsesPositives + 1 End If Next Pourcentage = NbReponsesPositives * 100 / NbRepondants
End Function
La ligne en rouge est celle qui me pose problème. Quand je la laisse comme ça ma colonne de pourcentage se retrouve avec plein de #Name. Je suis obligé de cliquer sur chacune des cases et de rappuyer entrée pour que ça marche. En mode débug, je me suis rendu compte que ma fonction pourcentage() était appelée plusieurs fois pour une seule ligne et j'ai aussi quelques fois eu le message d'erreur "référence circulaire". Je ne comprend pas d'où ça vient. Help! Merci d'avance. Ps: Quand je remplace la ligne en rouge par LigneReponse.Cells(1, IntColMax + 1) = Pourcentage()" ça fonctionne mais après un changement dans mon tableau mes cellules ne sont pas mises à jour...
|
|
mardi 29 mai 2007 à 12:53:07 |
Re : Référence circulaire en VBA sur Excel

lermite222
|
Bonjour, La référence circulaire provient de formule qui se recalcul en boucle, il est possible que c'est du fait que ta routine n'est pas terminée ? Essaye en désactivant le calcul automatique et quand la routine est terminée faire un recalcul de la feuille. Si le pb persiste colle les formules qui interviennent dans la feuille, c'est de là que vient le problème. A+ louis
|
|
mardi 29 mai 2007 à 14:11:53 |
Re : Référence circulaire en VBA sur Excel

nico971gwada
|
Super!
ça marche. En désactivant le calcul automatique j'ai bien ma formule calculée dans ma case et ce n'est même pas la peine de faire un recalcul de la feuille ça marche tt seul. Par contre si une case de ma feuille change, mon pourcentage n'est pas mis à jour (même avec l'option volatile). Et si je fais un recalcul de la feuille, étant donné que dans ma fonction je part de la cellule active, toutes les cases de la colonne pourcentage prennent la même valeur. Que faire? Est-ce qu'il y a un moyen de partir de la cellule à partir de laquelle on appelle une fonction au lieu de la cellule active?
Merci d'avance.
|
|
mardi 29 mai 2007 à 15:26:14 |
Re : Référence circulaire en VBA sur Excel

lermite222
|
Evidemment, je ne vois pas l'entièreté de ton prog, mais comme ce sont des formules, il est évident que les autres cellules vont se recalculer. Si les résultats peuvent êtres figés, tu peu changer les formules par leurs résultats au moyen des fonctions spéciale de copie. A+ louis
|
|
mardi 29 mai 2007 à 15:31:51 |
Re : Référence circulaire en VBA sur Excel

lermite222
|
Une autre solution, ne pas mettre de formule dans la feuille et tout calculer par VBA, évidemment cela nécessiterrais une refonte complète de l'appli. Après changement dans une cellule, faire appel à la fonction feuille Cell_change (je ne sais plus les termes exact) et recalculer ce qui est nécessaire en fonction de la ligne et de la colonne. A+ louis
|
|
mardi 29 mai 2007 à 15:42:28 |
Re : Référence circulaire en VBA sur Excel

jmfmarques
|
Bonjour nico971gwada,
Imagine le mécanisme suivant : une cellule additionnant toutes les valeurs d'une colonne dans laquelle elle se trouve elle-même. Il est clair que si tu ajoutes ou modifie une des valeurs de la colonne, celà aura pour effet : 1) de modifier ton total 2) comme ce total est lui-même dans la colonne et inclus dans le calcul du total ===>> de remodifier le total etc... etc... C'est là un exemple simple de référence circulaire !!! A toi de chercher sur ta feuille où se trouve une (ou plusieurs) cellule qui fait un calcul de l'espèce (sur une base incluant sa propre valeur) et de corriger...
|
|
Cette discussion est classée dans : ligne, cells, pourcentage, lignereponse, nbreponsespositives
Répondre à ce message
Sujets en rapport avec ce message
exportation de vb a excel je ne peut pas calculer [ par asem67 ]
j'ai fait un prog de gestion de pieces machine et jexport mes recordset sous excel jusque'a la ca fonctionne mais quand je veut fait des calcul sous e
ya personne ici ki sache faire un copier coller ??? !!! [ par stidjeanmoulin ]
voici mon code:Sub Jonction()' Jonction MacroDim i As Integer, j As Integer 'indices de boucleDim ligne As Variant 'variable auxiliaire de copiei = 1<
Dépassement de capacité EXCEL [ par annedel ]
Bonjour !J'ai un gros problème... l'exécution de mon programme provoque l'erreur "Dépassement de capacité"... J'ai beau faire un test pas à pas, je ne
*** Export vers Excel qui n'est pas installer *** [ par Heny ]
Dim MsDim EX As New Excel.ApplicationDim ligne As LongDim MSG, Msg1, Style, Title, Response, MyString'Boite de dialogue demande de confirmation MSG =
récupérer valeur des variables et las copier dans une autre feuille [ par philou1 ]
bonjourje n'arrive pas à récupérer la valeur de mes variables pour les recopier dans une autre feuille.voici mon code:dim plage_relevé as range, r1 as
exel vba [ par champion ]
comment fait on avec l'objet range ou cells pour avoir la ligne courante et la colonne numéro X ?cells(ligne_courante,3) par exemple.
***EXPORTER VERS EXCEL *** [ par Heny ]
Salut a tous Dim MsDim EX As New Excel.ApplicationDim ligne As LongDim MSG, Msg1, Style, Title, Response, MyString'Boite de dialogue demande de confir
comment ajuster automatiquement un texte dans une cellule fusionné en vba? [ par erti1711 ]
Bonjour à tous,en faite je dispose de 12 feuilles ds le classeur dont la dernière va me servir a réalisé un devis.g 11 feuilles qui regroupe une liste
comptage de A dans une ligne [ par funkay91 ]
Bon ceci est une partie d'une macro For Each c In Range(Cells(6, 3), Cells(6, 56)) If c.Value() = "A" Then &n
[VBA Excel] recuperer la lettre d'une colonne [ par tof008 ]
Hello! Voila mon problème : Je dois ajouter automatiquement sur une ligne un nouveau mois, puis remplir la colonne de données...Je fais donc une boucl
Livres en rapport
|
Derniers Blogs
ASYNC/AWAIT: COMPRENDRE COMMENT CA MARCHEASYNC/AWAIT: COMPRENDRE COMMENT CA MARCHE par fathi
Tout le monde est unanime pour dire que la programmation multi-thread et asynchrone est en train de devenir un sujet incontournable. Beaucoup de choses sont arrivées avec le framework 4 pour le code parallèle (TPL, PLinq,.) et bientôt, on va avoir l...
Cliquez pour lire la suite de l'article par fathi PAS D'INTELLITRACE SUR MON SITE WEB DANS IIS !PAS D'INTELLITRACE SUR MON SITE WEB DANS IIS ! par Etienne Margraff
J'ai récemment eu un problème pour obtenir l'intelliTrace sur un site web dans IIS. Il n'y avait pas de message d'erreur, rien dans le journal d'évènement Windows, et après 3 appels à une voyante, 2 visites chez un marabou, j'ai failli me résign...
Cliquez pour lire la suite de l'article par Etienne Margraff OFFICE 365 - SHAREPOINT ONLINE, QUELQUES LIMITATIONSOFFICE 365 - SHAREPOINT ONLINE, QUELQUES LIMITATIONS par junarnoalg
De nombreuses entreprises font le choix de SharePoint Online, service fourni au travers de l'offre de Microsoft Office 365. S'il est vrai que ce choix apporte un grand nombre d'avantages; rapidité de mise en œuvre, disponibilité, large couvertu...
Cliquez pour lire la suite de l'article par junarnoalg PRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGEPRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGE par richardc
http://www.c2idotnet.com/articles/presentation-des-api-rest-de-windows-azure-lister-les-comptes-de-storage
Désolé pour "toto", mais c2i existait avant blogs.developpeur.org et c'est mon site "officiel" ;-) ...
Cliquez pour lire la suite de l'article par richardc
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|