boucle sans fin - VB/VBA/VBS - Programmation
Marsh Posté le 16-05-2008 à 13:59:36
Quel est le but de ton programme :
Car si la solution est :
1/ alors ton compteur est mal placé
2/ il faut que tu rajoutes un deuxième compteur qui ne fait l'opération que 65536 fois au max (nb de ligne dispo dans Excel (horrs 2007))
Marsh Posté le 16-05-2008 à 14:13:33
J'ai mis 9000 au hasard, je voudrais que le programme traite toutes mes données. Ca doit être ce que tu appelles les 9000 actuelles non ?
si par exemple elles vont jusqu'à la ligne 9000 et que je ne connais pas le nombre de cases vides, je mets mon compteur jusqu'à 9000
Mais je préfèrerais mettre un nombre de type double (j'ai beaucoup de données) pour que ça marche quelle que soit ma colonne et que le programme s'arrête lorsqu'il rencontre une case vide après laquelle il n'y a plus rien ...
Mais je ne sais pas trop si c'est possible, s'il peut "deviner" que c'est la dernière ligne non vide de la colonne
J'avais essayé un programme du style
pour i allant de 1 à 9000
pour j allant de i à 9000
do ...
Ca m'évitait de mettre je j=j-1, donc le programme devrait terminer ... mais dans mon cas il ferait 9000 passages, niveau complexité c'est pas génial ...
Marsh Posté le 16-05-2008 à 17:00:12
Alors ce que je te propose c'est de mettre une boucle infini (un peu dangeureux mais c'est pas mal) et de l'arrêter quand il y a plus de 5 lignes vides....
Code :
|
Marsh Posté le 16-05-2008 à 17:19:18
Merci j'essaierai lundi, là je dois partir du travail
L'autre problème c'est qu'il peut y en avoir plus de 5 vides, je ne connais pas non plus le nombre de cases vides possibles, mais il peut être élevé, c'est aléatoire
Marsh Posté le 16-05-2008 à 17:28:23
okianos a écrit : Merci j'essaierai lundi, là je dois partir du travail |
à 17h30 ?
okianos a écrit :
|
En remplacant la ligne : "If IsEmpty(Cells(i + 1, 2)) And IsEmpty(Cells(i + 2, 2)) And IsEmpty(Cells(i + 3, 2)) And IsEmpty(Cells(i + 4, 2)) Then"
par celle-ci : "If WorksheetFunction.CountA(Activesheet.Range(Cells(i, 2), Cells(65536, 2))) = 0 Then"
Marsh Posté le 17-05-2008 à 07:50:54
Bonjour,
je n'ai pas tout compris, mais est-ce que cela peut répondre au problème:
Dim i As Double
Application.ScreenUpdating = False
For i = 9000 to 3 step -1
If IsEmpty(Cells(i, 2)) Then
Cells(i, 2).Select
Selection.Delete Shift:=xlUp
End If
Next i
Application.ScreenUpdating = true
Cordialement
Marsh Posté le 19-05-2008 à 13:21:00
Citation : En remplacant la ligne : "If IsEmpty(Cells(i + 1, 2)) And IsEmpty(Cells(i + 2, 2)) And IsEmpty(Cells(i + 3, 2)) And IsEmpty(Cells(i + 4, 2)) Then" |
Ca a marché, merci beaucoup !
Citation : à 17h30 ? |
Oui je suis stagiaire, j'ai la chance de pouvoir sortir tôt
Citation : Bonjour, |
Ca marche aussi, merci ! Le temps d'exécution est juste un peu plus long puisque je remplace 9000 par 65536 (je veux que ca marche pour n'importe quelle base de données)
Merci pour votre aide !
Marsh Posté le 19-05-2008 à 13:31:04
okianos a écrit : |
Si tu es stagiaire, ca va. Je te dénoncerai pas...
Marsh Posté le 19-05-2008 à 16:08:04
Bonjour,
pour ne pas boucler sytématiquement sur 65536.
teste en remplaçant ton 65536 par :
dernièreligne = Cells(65536, 2).End(xlUp).Row
For i = dernièreligne to 3 step -1
.......
Ce qui te permet d'avoir la dernière cellule non vide.
Valable si la 65536 est vide, si c'est le cas, il faut tester et mettre dernièreligne = 65536 lorsqu'elle n'est pas vide.
Cordialement
Marsh Posté le 19-05-2008 à 16:12:35
au lieu de prendre 65536
autant utiliser la coordonnée de
Code :
|
qui donne la derniere cellule utilisée dans la feuille active
(au dela, la feuille est obligatoirement vide )
Marsh Posté le 16-05-2008 à 13:46:48
Bonjour,
J'ai écrit ce petit programme permettant d'effacer les cellules vides dans une colonne
Dim i As Double
For i = 3 To 9000
If IsEmpty(Cells(i, 2)) Then
Cells(i, 2).Select
Selection.Delete Shift:=xlUp
i = i - 1
End If
Next i
Mais avec la remontée de l'indice (i = i -1) le programme ne s'arrête plus (il efface toutes les lignes vides qui suivent mes données lorsqu'il arrive à la fin)
Merci d'avance pour votre aide