Créer une boucle

Fermé
CMinou2303 Messages postés 3 Date d'inscription lundi 24 juin 2019 Statut Membre Dernière intervention 30 août 2022 - 7 août 2019 à 15:26
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 - 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,

2 réponses

Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
7 août 2019 à 15:56
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 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
8 août 2019 à 15:47
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