Créer une boucle

CMinou2303 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous,

Je débute en VBA, malheureusement je suis actuellement bloquée. Je pense que je déclare mal mes variables mais je dois avouer que c'est une partie que je ne comprends pas beaucoup…

Je vous explique :
J'ai un fichier avec plusieurs colonnes (c'est une extraction faite à partir d'un PGI).
La macro que je souhaite créer a pour but de :

Récupérer les informations de la colonne B et de les coller dans la colonne A. (la macro ne doit couper/coller que les cellules non vides car je dois garder les informations de la colonne A). Si la cellule est vide on passe à la suite jusqu'à la fin du tableau.
Puis supprimer la colonne B.

J'aimerai créer une boucle qui me permette de la faire et c'est là que je bloque. mon code fonctionne pour le copier coller mais seulement pour la ligne 2.

Sub Tranférer()
Dim numéro As Integer
numéro = 2
Dim cellule As Range
For Each cellule In Selection
If Not IsEmpty(Range("B2")) Then
Range("B2").Select
Selection.Cut
Range("A2").Select
ActiveSheet.Paste
End If
Next
End Sub


Je n'ai pas réussi à joindre de fichier excel donc je vous ai mis la capture d'écran du fichier dans l'espoir que cela vous aide à mieux visualiser.


Je vous remercie pour votre aide.
Bien cordialement,

2 réponses

Zoul67 Messages postés 1959 Date d'inscription   Statut Membre Dernière intervention   149
 
Bonjour,

Think different... Si dans chaque ligne, soit la colonne A soit la colonne B est renseignée (mais jamais les deux), insère une colonne C où tu mets une formule =CONCATENER(A2;B2). Ensuite, tu fais un copier/coller valeurs en colonne A et supprimes les colonnes B et C.

Sinon, pour faire une boucle (For, While,...), il faut veiller à boucler le bon nombre de fois (ni trop peu, ni trop). Ici tu n'exécutes la boucle que n fois (n=nombre de cellules sélectionnées) suivant la syntaxe :
For Each cellule In Selection


A+
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour, peut-être ainsi:
Dim cellule As Range, col2 As Range
Set col2 = Intersect(Selection, ActiveSheet.Columns(2))
If Not col2 Is Nothing Then
    For Each cellule In col2
        If Not IsEmpty(cellule) Then
            cellule.Offset(0, -1).Value = cellule.Value
            cellule.Value = ""
        End If
    Next
End If
0