Boucle de suppression de cellule
Bonjour tout le monde,
J'ai un fichier qui complète automatiquement 3 tableaux dans un onglet. La quantité de ligne de mon tableau est donc variable d'une fois à l'autre.
J'ai donc mis en place une boucle afin de supprimer les cellules vides de chaque tableau après l'importation pour les réduire au minimum.
Le premier tableau se trouve colonne B:I le second J:J et le dernier K:R (je n'ai pas réussi a mettre un fichier en attaché :(
Je rencontre un problème avec mes boucles.
Elles s'arrêtent toutes prématurément alors que la cellule contrôlée est belle est bien vide. J'ai déjà fait le nettoyage de cellule mais cela ne change rien.
Des idées de pourquoi elles s'arrêtent ?
Voici le code utilisé
Sub sup()
Sheets("Récap").Select
Dim i%
For i = 300 To 5 Step -1
If Cells(i, 2).HasFormula Or Cells(i, 2).Value = "" Then
Application.Intersect(Range("B:I"), Rows(i)).Delete
i = i - 1
Else
If Cells(i, 2).Value <> "" Then
MsgBox "Ligne vide supprimé"
Exit For
End If
End If
Next i
Dim j%
For j = 50 To 5 Step -1
If Cells(j, 10).Value = "" Then
Application.Intersect(Range("J:J"), Rows(j)).Delete
j = j - 1
Else
If Cells(j, 10).Value <> "" Then
MsgBox "end"
Exit For
End If
End If
Next j
Dim k%
For k = 50 To 5 Step -1
If Cells(k, 11).Value = "" Then
Application.Intersect(Range("K:R"), Rows(k)).Delete
k = k - 1
Else
If Cells(k, 11).Value <> "" Then
MsgBox "end"
Exit For
End If
End If
Next k
End SubBonjour,
Quand tu dis prématurément c'est quelle ligne de ton code VBA ? Quelle valeur possède la variable ?
Des lignes sont-elles tout de même supprimées ? Tu arrives à afficher toutes tes msgbox ?
Bonne soirée !
La boucle supprime des lignes pour chaque tableau mais s'arrête avant d'atteindre la première cellule qui contient une valeur. La msg box apparait comme si il avait trouvé quelque chose dans une cellule. Je confirme la msgbox et il passe à la boucle suivante ect.
Je joint le fichier (cette fois j'arrive).
Bonjour Laulo, Salut Ergotamine,
Les boucles s'arrêtent à cause du EXIT FOR. Il suffit que la condition soit vérifiée une fois pour qu'il y ait sortie.
Par ailleurs, il y a une décrémentation qui n'est peut-être pas utile (i = i - 1, j = j - 1, ...) et qui cause probablement le problème.
Une proposition d'adaptation du code :
Sub sup()
application.screenupdating = false
with Sheets("Récap")
For i = 300 To 5 Step -1
If .Cells(i, 2).HasFormula Or .Cells(i, 2).Value = "" Then .Range("B" & i & ":I" & i).Delete
if i <= 50 then
If .Cells(i, 10).Value = "" Then .range("J" & i).Delete
if .Cells(i, 11).Value = "" Then .Range("K" & i & ":R" & i).Delete
end if
Next i
end with
application.screenupdating = true
End SubCdlt,
Bonjour 3GB et Ergotamine (Désolé de mon manque de politesse Ergotamine de ne pas t'avoir salué a ta première réponse
Excellent Merci pour tout ! le code fonctionne très bien sans la décrémentation de trop et j'ai supprimé les EXIT FOR.
voici le code qui va bien
Sub sup()
Sheets("Récap").Select
Dim i%
For i = 300 To 5 Step -1
If Cells(i, 2).HasFormula Or Cells(i, 2).Value = "" Then
Application.Intersect(Range("B:I"), Rows(i)).Delete
End If
Next i
Dim j%
For j = 50 To 5 Step -1
If Cells(j, 10).Value = "" Then
Application.Intersect(Range("J:J"), Rows(j)).Delete
End If
Next j
Dim k%
For k = 60 To 5 Step -1
If Cells(k, 11).Value = "" Then
Application.Intersect(Range("K:R"), Rows(k)).Delete
End If
Next k
MsgBox "end"
End Sub