Vba excel - boucle

Résolu/Fermé
nico - 14 oct. 2008 à 21:14
 nico - 15 oct. 2008 à 18:54
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! :)
A voir également:

6 réponses

Hello!

La valeur de
Application.CountA(Sheets("planning").Range("A:A")) + 3
est 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.
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
15 oct. 2008 à 18:19
Beh oui,... parce que sur Ex2000 (ni sur 2003) y a tout simplement pas CountA
faut remplacer par
Jusque...
  Range("A65536").End(xlUp).Row

Pour la colonne A
Et la prochaine fois tâche d'être plus explicit, tu parle de Excel 2003, ensuite de Excel 2000 et encore de Excel 2007.
A+
0
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.
0
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.
0
OK... En tout cas ça me motive à prendre des cours de VB, ça fonctionne avec ta solution. Merci!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
15 oct. 2008 à 06:27
Bonjour,
1°) vérifie bien ce que tu à comme valeur pour
Application.CountA(Sheets("planning").Range("A:A")) + 3 
Parce 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+
-1
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
15 oct. 2008 à 18:41
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+
-1