Déplacement ligne colonne

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Répondre
q
quattro
Jeune membre
Jeune membre
Messages : 10
Inscrit le : 26 juin 2014
Version d'Excel : 2010

Message par quattro » 23 octobre 2019, 12:28

Bonjour,

J'ai 2 colonnes de données : A et B

Je part de la 1ère ligne, je prend la data col B, et je la met en dessous de la col A. sans effacé la 2éme ligne bien sur, donc il faut faire un saut de ligne avant.

Ensuite je part de la 2ème ligne, je prend la donnée col B, et je la met en dessous de la col A. et ainsi de suite.

En fait je veux que mes data A et B d'une même ligne se retrouve l'un en dessous de l'autre.
1ère ligne A
B
2ème ligne A
B
3ème ligne A
B

comment pourrais je faire cela ?
Merci
Avatar du membre
ThauThème
Passionné d'Excel
Passionné d'Excel
Messages : 4'047
Appréciations reçues : 212
Inscrit le : 19 octobre 2014
Version d'Excel : 2010 FR

Message par ThauThème » 23 octobre 2019, 14:56

Bonjour Quattro, bonjour le forum,

Essai comme ça :
Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim TR() As Variant 'déclare la variable TR (Tableau des Résultats)

Set O = Worksheets("Feuil1") 'définit l'onglet O (à adapter à ton cas)
DL = O.Range("A1").CurrentRegion.Rows.Count
O.Columns(4).ClearContents
'DL = O.Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne A de l'onglet O
ReDim TR(1 To DL * 2) 'redimensionne le tableau des résultats TR
J = 1 'initialise la variable J
For I = 1 To DL * 2 Step 2 'boucle de 1 a deux fois le nombre de lignes éditées DL par pas de 2
    TR(I) = O.Cells(J, "A").Value 'récupère dans TR(I) la valeur de la cellule ligne J colonne A
    TR(I + 1) = O.Cells(J, "B").Value 'récupère dans TR(I+1) la valeur de la cellule ligne J colonne B
    J = J + 1 'incrémente J
Next I 'prochaine valeur de I (incrément de +2)
O.Range("D1").Resize(DL * 2, 1).Value = Application.Transpose(TR) 'renvoie dans la colonne D le tableau TR transposé

'cette partie ne sert que si les deux colonnes A et B non pas le même nombre de lignes éditées
Application.ScreenUpdating = False 'masque les rafraîchissement d'écran
For I = O.Cells(Application.Rows.Count, "D").End(xlUp).Row To 1 Step -1 'boucle inversée de la dernière ligne éditée de la colonne D à la première
    If O.Cells(I, "D").Value = "" Then O.Cells(I, "D").Delete xlShiftUp 'si la cellule ligne I colonne D est vide, supprime la cellule (en remontant vers le haut)
Next I 'prochaine ligne (en remontant)
Application.ScreenUpdating = False 'affiche les rafraîchissement d'écran
End Sub
À plus,

ThauTheme


Je suis Charlie
VBA m'éclate, les formules m'ennuient ! Je n'y peux rien c'est comme ça...
q
quattro
Jeune membre
Jeune membre
Messages : 10
Inscrit le : 26 juin 2014
Version d'Excel : 2010

Message par quattro » 24 octobre 2019, 15:39

Merci
cela fonctionne bien.
Si maintenant je veux rajouter 2 lignes vierges en dessous de la cellule que je décale en dessous de l'autre.
C'est à dire A ensuite B et C(vierge) et D(vierge).

Merci
Avatar du membre
ThauThème
Passionné d'Excel
Passionné d'Excel
Messages : 4'047
Appréciations reçues : 212
Inscrit le : 19 octobre 2014
Version d'Excel : 2010 FR

Message par ThauThème » 24 octobre 2019, 16:12

Re,

Ce nouveau code ne fonctionnera que si les colonnes A et B contiennent le même nombre de valeurs :
Sub Macro2()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim TR() As Variant 'déclare la variable TR (Tableau des Résultats)

Set O = Worksheets("Feuil1") 'définit l'onglet O (à adapter à ton cas)
DL = O.Range("A1").CurrentRegion.Rows.Count
O.Columns(4).ClearContents
ReDim TR(1 To DL * 4) 'redimensionne le tableau des résultats TR
J = 1 'initialise la variable J
For I = 1 To DL * 4 Step 4 'boucle de 1 a deux fois le nombre de lignes éditées DL par pas de 2
    TR(I) = O.Cells(J, "A").Value 'récupère dans TR(I) la valeur de la cellule ligne J colonne A
    TR(I + 1) = O.Cells(J, "B").Value 'récupère dans TR(I+1) la valeur de la cellule ligne J colonne B
    TR(I + 2) = ""
    TR(I + 3) = ""
    J = J + 1 'incrémente J
Next I 'prochaine valeur de I (incrément de +2)
O.Range("D1").Resize(DL * 4, 1).Value = Application.Transpose(TR) 'renvoie dans la colonne D le tableau TR transposé
Application.ScreenUpdating = False 'affiche les rafraîchissement d'écran
End Sub
À plus,

ThauTheme


Je suis Charlie
VBA m'éclate, les formules m'ennuient ! Je n'y peux rien c'est comme ça...
q
quattro
Jeune membre
Jeune membre
Messages : 10
Inscrit le : 26 juin 2014
Version d'Excel : 2010

Message par quattro » 25 octobre 2019, 07:27

Merci bien

Je vais essayer de comprendre tout ça.
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message