Créer une boucle

Messages postés
1
Date d'inscription
lundi 24 juin 2019
Statut
Membre
Dernière intervention
7 août 2019
- - Dernière réponse : yg_be
Messages postés
8316
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
22 août 2019
- 8 août 2019 à 15:47
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,
Afficher la suite 

2 réponses

Messages postés
1914
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
7 août 2019
120
0
Merci
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+
Commenter la réponse de Zoul67
Messages postés
8316
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
22 août 2019
412
0
Merci
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
Commenter la réponse de yg_be