|
Publicité | ||||||||||||||||||||||
|
|
#1 (permalink) |
|
Nouveau membre du Club
![]() Date d'inscription: mai 2008
Âge: 24
Messages: 68
|
Bonjour,
j'ai un petit problème de boucles et je n'arrive pas à savoir pourquoi... Code :
Sub Graphique() Dim Compteur As Integer Dim Cel As Range Dim i As Integer Set Cel = Worksheets("Vue_generale").Range("K1") Compteur = 1 While Cel.Offset(Compteur) <> "" Compteur = Compteur + 1 Wend DestructionUn = 0 DestructionDeux = 0 DestructionTrois = 0 DestructionQuatre = 0 ValorisationUn = 0 ValorisationDeux = 0 ValorisationTrois = 0 ValorisationQuatre = 0 For i = 1 To Compteur If Cel.Offset(i) = "1" Then If Left(Cel.Offset(i), 1) = "D" Then DestructionUn = DestructionUn + Cel.Offset(i, -2) Else ValorisationUn = ValorisationUn + Cel.Offset(i, -2) End If If Cel.Offset(i) = "2" Then If Left(Cel.Offset(i), 1) = "D" Then DestructionDeux = DestructionDeux + Cel.Offset(i, -2) Else ValorisationDeux = ValorisationDeux + Cel.Offset(i, -2) End If If Cel.Offset(i) = "3" Then If Left(Cel.Offset(i), 1) = "D" Then DestructionTrois = DestructionTrois + Cel.Offset(i, -2) Else ValorisationTrois = ValorisationTrois + Cel.Offset(i, -2) End If If Cel.Offset(i) = "4" Then If Left(Cel.Offset(i), 1) = "D" Then DestructionQuatre = DestructionQuatre + Cel.Offset(i, -2) Else ValorisationQuatre = ValorisationQuatre + Cel.Offset(i, -2) End If End If Next i Worksheets("Graphique").Select Range("B8") = DestructionUn '.... End Sub
|
|
|
|
|
|
#2 (permalink) |
|
Membre Expert
![]() Date d'inscription: décembre 2002
Localisation: 38
Âge: 20
Messages: 1 160
|
bonjour BOU59000 le forum pour moi il manque un end if
code Code :
For i = 1 To Compteur If Cel.Offset(i) = "1" Then If Left(Cel.Offset(i), 1) = "D" Then DestructionUn = DestructionUn + Cel.Offset(i, -2) Else ValorisationUn = ValorisationUn + Cel.Offset(i, -2) End If: End If If Cel.Offset(i) = "2" Then If Left(Cel.Offset(i), 1) = "D" Then DestructionDeux = DestructionDeux + Cel.Offset(i, -2) Else ValorisationDeux = ValorisationDeux + Cel.Offset(i, -2) End If: End If If Cel.Offset(i) = "3" Then If Left(Cel.Offset(i), 1) = "D" Then DestructionTrois = DestructionTrois + Cel.Offset(i, -2) Else ValorisationTrois = ValorisationTrois + Cel.Offset(i, -2) End If: End If If Cel.Offset(i) = "4" Then If Left(Cel.Offset(i), 1) = "D" Then DestructionQuatre = DestructionQuatre + Cel.Offset(i, -2) Else ValorisationQuatre = ValorisationQuatre + Cel.Offset(i, -2) End If: End If Next i
__________________
SALUTATIONS
|
|
|
|
|
|
#3 (permalink) |
|
Membre émérite
![]() |
Bonjour
Effectivement il manque quelques End If sur presque tous les If de premiers niveau. Ce que je trouve bizzare, c'est qu'il n'y a pas d' erreur sur le Offset(i), car quand je l'utilise, je fais référence à la ligne et à la colonne. Code :
Cel.Offset(lig,col) -------------- Frédéric http://www.access-developpement.co |
|
|
|
|
|
#4 (permalink) |
|
Membre Expert
![]() Date d'inscription: décembre 2002
Localisation: 38
Âge: 20
Messages: 1 160
|
re bonjour fgiambelluco
a mon avis i est interprete en tant que colonne par contre il doit pas mettre option explicit en debut de son module les Code :
DestructionUn = 0 DestructionDeux = 0 DestructionTrois = 0 DestructionQuatre = 0 ValorisationUn = 0 ValorisationDeux = 0 ValorisationTrois = 0 ValorisationQuatre = 0 de plus j ai pas bien compris son code je sais ce qu'il cherche a faire??lui il doit le savoir (lol)
__________________
SALUTATIONS
|
|
|
|
|
|
#5 (permalink) |
|
Expert Confirmé
![]() Date d'inscription: juillet 2007
Localisation: Loire Atlantique (44)
Âge: 54
Messages: 1 849
|
Salut BOU59000 et le forum
Il n'y a pas que la boucle qui a un problème Code :
While Cel.Offset(Compteur) <> "" Compteur = Compteur + 1 Wend Code :
Compteur = cel.end(xldown).row+1 ![]() Code :
If Cel.Offset(i) = "1" Then
If Left(Cel.Offset(i), 1) = "D" Then
DestructionUn = DestructionUn + Cel.Offset(i, -2)
Else
ValorisationUn = ValorisationUn + Cel.Offset(i, -2)
End If
End If
If Cel.Offset(i) = "2" Then
'etc... en mettant les "End If"
-si cel.offset(i) = le chiffre 1 offset(ligne,colonne), pas offset(ligne,[colonne]) -si la première lettre de Cel.offset(i) = "D" => elle sera toujours Faux, puisque tu viens de vérifier qu'elle ne contient que "1" donc tu peux simplifier Code :
For Each cel In Range([K1], [K1].End(xlDown)) Select Case cel Case 1 ValorisationUn = ValorisationUn + cel.Offset(0, -2) Case 2 ValorisationDeux = ValorisationDeux + cel.Offset(0, -2) End If Case 3 ValorisationTrois = ValorisationTrois + cel.Offset(0, -2) End If Case 4 ValorisationQuatre = ValorisationQuatre + cel.Offset(0, -2) End Select Next cel A+
__________________
La qualité et la précision de la réponse sont proportionnelles à celles de la question. |
|
|
|
|
|
#6 (permalink) | |
|
Nouveau membre du Club
![]() Date d'inscription: mai 2008
Âge: 24
Messages: 68
|
@ laetitia: Oui le problème venait bien des End if (j'ai honte
![]() Le code me sert à alimenter des graphes sinon. @fgiambelluco: Je ne vois pas de quoi tu veux parler? En fait j'ai mis Cel.offset(i, colonne) avec i ma boucle qui va me faire passer d'une ligne à une autre. Ce que tu as mis en code est bon, donc je pense que je ne réponds pas a ta question la! lol. Si tu pouvais préciser que je puisse te donner une reponse correcte, merci @Gorfael:Oui le compteur n'est pas indispensable mais je le mets toujours (a force de tapper sur un clou il rentre! lol), cette méthode me permet d'apprendre par coeur les différents type de programme. Sinon tu as mal lu mon programme: Citation:
DestructionUn = DestrucionDeux =.... ValorisationUn = ValorisationDeux... Que toutes les variables soient identique en finalité, non? Merci pour vos réponses en tout cas. @ Admin: je ne cloture pas tout de suite la discussion afin de pouvoir continuer ce débat (qui me permettra d'apprendre plus sur le vba). Je cloturerai la discussion peu après, merci de votre compréhension. PS: A moins que ce soit hors charte de faire cela? |
|
|
|
|
|
|
#7 (permalink) |
|
Inactif(ve)
Date d'inscription: février 2005
Localisation: 45,10 N 5,43 E
Messages: 12 494
|
Si tu avais indenté correctement ton code tu aurais tout de suite compris
Code :
For i = 1 To Compteur If Cel.Offset(i) = "1" Then If Left(Cel.Offset(i), 1) = "D" Then DestructionUn = DestructionUn + Cel.Offset(i, -2) Else ValorisationUn = ValorisationUn + Cel.Offset(i, -2) End If 'Manque un Endif *** If Cel.Offset(i) = "2" Then If Left(Cel.Offset(i), 1) = "D" Then DestructionDeux = DestructionDeux + Cel.Offset(i, -2) Else ValorisationDeux = ValorisationDeux + Cel.Offset(i, -2) End If 'Manque un Endif *** If Cel.Offset(i) = "3" Then If Left(Cel.Offset(i), 1) = "D" Then DestructionTrois = DestructionTrois + Cel.Offset(i, -2) Else ValorisationTrois = ValorisationTrois + Cel.Offset(i, -2) End If 'Manque un Endif *** If Cel.Offset(i) = "4" Then If Left(Cel.Offset(i), 1) = "D" Then DestructionQuatre = DestructionQuatre + Cel.Offset(i, -2) Else ValorisationQuatre = ValorisationQuatre + Cel.Offset(i, -2) End If End If 'manque pas de Endif Next i Ceci dit, j'utiliserais plutôt Code :
Select Case Left(Cel.Offset(i), 1) Case "1" Case "2" Case "3" Case "4" 'etc. |
|
|
|
|
|
#8 (permalink) |
|
Nouveau membre du Club
![]() Date d'inscription: mai 2008
Âge: 24
Messages: 68
|
Oui Gorfael m'en aviat déjà touché un mot pour le select case en plus
Par contre, en utilisant le select case, j'ai devrait quand même rajouté des If a l'intérieur de mes case, cela ne risque t-il pas de faire bugger le programme? Bref je vais testé de toute façon le select case, au plus je peux apprendre de façon de faire les choses, au mieux sa sera Merci à tous pour vos réponses, et si je dis quelquechose de faux ou autre n'hésitez pas a me reprendre, je préfère avoir des retours et progresser plutot que de partir et de continuer sur de mauvaises bases. Bref encore merci ![]() PS: je cloture le sujet mais je posterai le programme avec les cases dès que je l'aurai fait |
|
|
|
|
|
#9 (permalink) | |
|
Expert Confirmé
![]() Date d'inscription: juillet 2008
Localisation: Elsass
Âge: 24
Messages: 1 887
|
Citation:
La seule chose importante est de toutes les fermer et dans le bon ordre |
|
|
|
|
|
|
![]() |
||
Problème de boucles
|
||
| Outils de la discussion | |
|
|