Macro loop

R

Remi

Guest
Bonjour forum,

Je suis à faire une macro pour me faciliter la vie dans un fichier. Je ne sais juste pas comment faire un loop pour que la macro se répète. Voici la macro:

Sub Supprime()
Dim c As Integer
Dim i As Integer
Dim v As Variant

i = Range("C1")
c = Range("C2")

For i = 1 To 10000
v = Cells(c, i)
If v = "" Then
Columns(i).Select
Selection.delete Shift:=xlToLeft
Exit For
End If
Next i


End Sub


En bref, je détermine la cellule de départ et je veux que lorsque la macro rencontre une cellule vide, elle supprime la colonne. Cette macro marche mais seulement pour une colonne. J'aimerais qu'elle puisse supprimer un nombre de ligne données (disons qu'on pourrait ajouter j = Range("C3") où je pourrais déterminer mon nombre de lignes et j'aimerais que la macro fasse un loop et fasse le programme jusqu'au bout du fichier.

Merci pour votre aide,

Rémi
 
R

Robert

Guest
Bonsoir Remi, bonsoir le forum,

Plusieurs anomalies dans ta macro. la variable i est définie deux fois. Une première fois où elle prend la valeur de la cellule C1 puis une seconde fois dans la boucle où elle redémarre à 1 (for i=1 to 10000).
La seconde est le [x]Exit For
qui annule toute la boucle et oblige la macro à s'arrêter dès la première colonne effacée.

Je te propose cela à la place : Définit en C1 la ligne de travail puis lance la macro. Cette dernière va vérifier toutes les cellules de la ligne définie et va effacer la colonne entière chaque fois qu'une cellule vide sera rencontrée.

Sub Supprime()
Dim c As Long 'déclare la variable c
Dim i As Integer 'déclare la variable i
Dim v As Variant 'déclare la variable v
Dim x As Integer 'déclare la variable x
Dim z As Integer 'déclare la variable z
c = Range("C1") 'définit la variable c (ligne de travail)
If c > 65536 Or c < 0 Then Exit Sub 'évite le bug
z = 1 'définit la variable z (commence à la colonne 1)
For x = 1 To 256 'boucle sur 256 valeurs (il n'y a que 256 colonnes !)
v = Cells(c, z) 'définit la variable v (valeur de la cellule)
If v = "" Then 'condition : si la cellule est vide
Columns(z).Delete Shift:=xlToLeft 'supprime la colonne z
z = z - 1 'pour éviter le saut d'une colonne
End If 'fin de la condition
z = z + 1 'passe à la colonne suivante
Next x 'prochaine valeur de la boucle
End Sub

À plus,

Robert
 
R

Remi

Guest
Bonjour Robert et le forum,

J'ai essayé la macro et ca fonctionne. J'aimerais savoir s'il est possible de spécifier un range à supprimer. Je m'explique: j'aimerais pouvoir supprimer un nombre de lignes donné, par exemple 5. J'ai essayé à partir de la macro que Robert a faite mais ca ne marche pas, j'ai besoin de votre aide.

Voici ce que j'ai fait:

Sub Supprime()
Dim c As Long 'déclare la variable c
Dim i As Integer 'déclare la variable i
Dim v As Variant 'déclare la variable v
Dim v1 As Variant 'déclare la variable v1
Dim x As Integer 'déclare la variable x
Dim z As Integer 'déclare la variable z
Dim d As Integer 'déclare la variable d

d = Range("C2")
c = Range("C1") 'définit la variable c (ligne de travail)
If c > 65536 Or c < 0 Then Exit Sub 'évite le bug
z = 2 'définit la variable z (commence à la colonne 2)
For x = 1 To 256 'boucle sur 256 valeurs (il n'y a que 256 colonnes !)
v = Cells(c, z) 'définit la variable v (valeur de la cellule)
v1 = Cells(c + d, z)
If v = "" Then 'condition : si la cellule est vide
Range(v, v1).Select
Selection.delete Shift:=xlToLeft 'supprime la colonne z sur le nombre de lignes désiré
'Columns(z).delete Shift:=xlToLeft 'supprime la colonne z
z = z - 1 'pour éviter le saut d'une colonne
End If 'fin de la condition
z = z + 1 'passe à la colonne suivante
Next x 'prochaine valeur de la boucle
End Sub

Merci à l'avance pour votre aide.

Rémi
 

Discussions similaires

Réponses
21
Affichages
666
Réponses
29
Affichages
1 K

Statistiques des forums

Discussions
314 203
Messages
2 107 177
Membres
109 766
dernier inscrit
pleutre