Vba excel - boucle
Résolu
nico
-
nico -
nico -
Bonjour,
Je suis débutant en vb et j'ai "appris" sur le tas, j'ai un problème que je n'arrive pas à règler, si vous pourriez me venir en aide ça serait sympa!
J'ai cette boucle qui fait bien ce que je lui demande, c'est-à-dire copier une formule, mais ensuite elle ne s'arrête plus (elle reste figée sans rien faire et suis obligé de faire "esc"). Le débugueur me met une erreur sur "y = y + 1", voici le code :
Private Sub copieformule()
Dim x As Integer
Dim y As Integer
Dim z As Integer
Dim a As Integer
x = 9
Do While x < 43
y = 4
Do While y < Application.CountA(Sheets("planning").Range("A:A")) + 3
z = x + 1
a = x - 1
Sheets("planning").Cells(y, x).FormulaLocal = "=SI(ET(CNUM(" & Cells(2, z).Address & ")>CNUM($D" & y & ");CNUM($D" & y & ")>=CNUM(" & Cells(2, x).Address & "));""["";SI(ET(CNUM(" & Cells(2, z).Address & ")>CNUM($E" & y & ");CNUM($E" & y & ")>=CNUM(" & Cells(2, x).Address & "));""]"";SI(ET(CNUM(" & Cells(2, z).Address & ")>CNUM($F" & y & ");CNUM($F" & y & ")>=CNUM(" & Cells(2, x).Address & "));""]"";SI(ET(CNUM(" & Cells(2, z).Address & ")>CNUM($G" & y & ");CNUM($G" & y & ")>=CNUM(" & Cells(2, x).Address & "));""["";SI(OU(" & Cells(y, a).Address & "=""["";" & Cells(y, a).Address & "=""-"");""-"";"""")))))"
y = y + 1
Loop
x = x + 1
Loop
End Sub
Merci d'avance et bonne soirée! :)
Je suis débutant en vb et j'ai "appris" sur le tas, j'ai un problème que je n'arrive pas à règler, si vous pourriez me venir en aide ça serait sympa!
J'ai cette boucle qui fait bien ce que je lui demande, c'est-à-dire copier une formule, mais ensuite elle ne s'arrête plus (elle reste figée sans rien faire et suis obligé de faire "esc"). Le débugueur me met une erreur sur "y = y + 1", voici le code :
Private Sub copieformule()
Dim x As Integer
Dim y As Integer
Dim z As Integer
Dim a As Integer
x = 9
Do While x < 43
y = 4
Do While y < Application.CountA(Sheets("planning").Range("A:A")) + 3
z = x + 1
a = x - 1
Sheets("planning").Cells(y, x).FormulaLocal = "=SI(ET(CNUM(" & Cells(2, z).Address & ")>CNUM($D" & y & ");CNUM($D" & y & ")>=CNUM(" & Cells(2, x).Address & "));""["";SI(ET(CNUM(" & Cells(2, z).Address & ")>CNUM($E" & y & ");CNUM($E" & y & ")>=CNUM(" & Cells(2, x).Address & "));""]"";SI(ET(CNUM(" & Cells(2, z).Address & ")>CNUM($F" & y & ");CNUM($F" & y & ")>=CNUM(" & Cells(2, x).Address & "));""]"";SI(ET(CNUM(" & Cells(2, z).Address & ")>CNUM($G" & y & ");CNUM($G" & y & ")>=CNUM(" & Cells(2, x).Address & "));""["";SI(OU(" & Cells(y, a).Address & "=""["";" & Cells(y, a).Address & "=""-"");""-"";"""")))))"
y = y + 1
Loop
x = x + 1
Loop
End Sub
Merci d'avance et bonne soirée! :)
Configuration: Windows XP Excel 2003
6 réponses
-
Hello!
La valeur deApplication.CountA(Sheets("planning").Range("A:A")) + 3est 120, j'utilise ça pour compter le nombre de lignes non-vides.
Juste pour information, maintenant ça fonctionne sur excel 2007, mais sur 2000 ça plante... :(
L'erreur que j'avais faite est que dans un autre Sub j'avais écrit :
Call copieformule()
à l'intérieur d'une boucle For... Mais mon code ne doit sûrement pas être très "propre" car sur Excel 2000 ça plante encore. -
Après avoir checké sur internet, peut être que l'écriture correcte est :
Application.WorksheetFunction.CountA
Mais dans les 2 cas ça me donne des résultats corrects. -
Merci de ta réponse.
Désolé mais c'est que j'ai commencé sur Excel 2007 et ensuite vérifié sur Excel 2000.
Je vais donc faire les modifications...
Merci. -
OK... En tout cas ça me motive à prendre des cours de VB, ça fonctionne avec ta solution. Merci!
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Bonjour,
1°) vérifie bien ce que tu à comme valeur pourApplication.CountA(Sheets("planning").Range("A:A")) + 3Parce que moi je n'ai pas de propriété CountA pour Application ?
2°) si tu a plus de 32000 ligne il faut déclarer
Dim Y as Long (en place de integer)
A+ -
Oui, j'ai pas pensé à cette éventualité car j n'ai jamais eu besoin de fonction de feuille en VBA. D'autant plus qu'il faut employer les noms en anglais.
En VBA j'emploi du.... VBA
A+