Macro pour déplacer des lignes selon condition

Bonjour,

Si qqun trouve une macro à ce que je vais décrire, je le considérerais comme un magicien ...

J'ai un fichier qui liste les commandes des clients pour la journée.

Pour chaque client, il y a une première ligne avec ses coordonnés et le premier produit de sa commande. S'il a acheté plusieurs produits, chaque produit fait l'objet d'une ligne en-dessous de cette première ligne.

J'aimerais qu'Excel puisse coller les autres produits commandés sur la première ligne, derrière le premier produit.

En fait il faudrait qu'Excel détecte les lignes '"autres produits" (en repérant par exemple les cases vides dans la colonne AD) et qu'il colle les données du produit sur des cellules précises de la première ligne. A savoir :

Pour le 2ème produit : coller les cellules de AE à AI sur les cellules AL à AO de la première ligne de la commande

Pour le 3ème produit : coller les cellules de AE à AI sur la cellule AR à AU de la première ligne de la commande

Etc ... j'adapterai les code pour les lignes suivantes.

Ca veut dire qu'Excel doit prendre en compte le fait que le nombre de produit peut varier et qu'il faille les coller sur la première ligne précédent les différents produits.

Bon, ça ne doit pas etre simple à piger par du texte tout ça alors j'ai mis une capture en pj qui permettra je l'espère de rendre tout ça plus clair.

1

Re,

Est-ce que tu peux joindre un fichier excel plutôt qu'une image ? La flemme de refaire un fichier...

Oui, bien sûr, le fichier est en pj

Bonjour,

Pour les lignes à coller, c'est un Copier-Coller ou un Couper-Coller que tu souhaites ?

Amicalement

Une macro avec une copie des données :

Sub LignesMultiplesCopie()
    Dim i As Long, lignVide&
    derlign = Range("ad" & Rows.Count).End(xlUp).Row
    For i = 3 To derlign
        If Range("ad" & i) = "" Then
            lignVide = 0
            Do While Range("ad" & i + lignVide) = ""
                Range("al" & i - 1).Offset(, 6 * lignVide).Resize(, 5).Value = Range("ae" & i - 1).Offset(lignVide + 1).Resize(, 5).Value
                lignVide = lignVide + 1
            Loop
            i = i + lignVide
        End If
    Next i
End Sub

une autre avec un coupage des données :

Sub LignesMultiplesCoupe()
    Dim derlign As Long, i&, lignVide&
    For i = 3 To Range("ad" & Rows.Count).End(xlUp).Row
        If Range("ad" & i) = "" Then
            lignVide = 0
            Do While Range("ad" & i + lignVide) = ""
                Range("al" & i - 1).Offset(, 6 * lignVide).Resize(, 5).Value = Range("ae" & i - 1).Offset(lignVide + 1).Resize(, 5).Value
                lignVide = lignVide + 1
            Loop
            Rows(i & ":" & i + lignVide - 1).Delete
        End If
    Next i
End Sub

Ca marche !!!

C'est incroyable, je pensais vraiment que c'était impossible et j'avais fait le post comme une bouteille jetée à la mer.

Un immense merci pour ton aide, c'est vraiment super.

Et par rapport au début de mon post : tu es un magicien ...

P.S : c'est ton métier, tu bosses sur excel en permanence ?

frisco75 a écrit :

Et par rapport au début de mon post : tu es un magicien ...

Tu dis ça parce que tu débutes Tu n'imagines même pas ce qu'Excel peut faire !!
frisco75 a écrit :

P.S : c'est ton métier, tu bosses sur excel en permanence ?

Non non pas du tout, je suis en recherche de boulot. Je viens de terminer mes études alors j'ai + de temps pour aider les autres maintenant... jusqu'à ce que je trouve un taf.
vba-new a écrit :
frisco75 a écrit :

Et par rapport au début de mon post : tu es un magicien ...

Tu dis ça parce que tu débutes Tu n'imagines même pas ce qu'Excel peut faire !!

Certainement, mais quand meme, ça m'épate !

frisco75 a écrit :

P.S : c'est ton métier, tu bosses sur excel en permanence ?

Non non pas du tout, je suis en recherche de boulot. Je viens de terminer mes études alors j'ai + de temps pour aider les autres maintenant... jusqu'à ce que je trouve un taf.

Bonne chance à toi alors, pour le boulot, avec de telles compétences tu devrais etre à l'aise dans un milieu pro.

Et encore merci.

Re,

Un code à placer dans un module en VBE et à associer à un bouton

Sub test()
'Macro Dan pour frisco75
Dim i As Integer
Dim j As Byte, c As Byte
For i = 3 To Range("AE" & Rows.Count).End(xlUp).Row
    j = 38: c = 0
    While Range("AD" & i) = ""
        lg = (i - 1) - c
        Range("AE" & i & ":AI" & i).Copy Cells(lg, j)
        j = j + 6: c = c + 1: i = i + 1
    Wend
Next
End Sub

Amicalement

Edit Dan : oups désolé je n'avais pas vérifié que tout était ok. travail pour rien au final.

Dan a écrit :

Re,

Un code à placer dans un module en VBE et à associer à un bouton

Sub test()
'Macro Dan pour frisco75
Dim i As Integer
Dim j As Byte, c As Byte
For i = 3 To Range("AE" & Rows.Count).End(xlUp).Row
    j = 38: c = 0
    While Range("AD" & i) = ""
        lg = (i - 1) - c
        Range("AE" & i & ":AI" & i).Copy Cells(lg, j)
        j = j + 6: c = c + 1: i = i + 1
    Wend
Next
End Sub

Amicalement

Edit Dan : oups désolé je n'avais pas vérifié que tout était ok. travail pour rien au final.

Merci quand meme, Dan

Bonjour,

J'ai actuellement à peu près la même demande :

Dans mon cas, il s'agit d'une macro qui effectue un certain nombre de mises en forme (suppr colonne, appliquer format date, trier de A à Z une colonne et l'étendre à toute la sélection, etc...) et notamment une qui, après tri de la colonne J (qui contient 2 valeurs, C et D), déplacer (couper-coller) les valeurs correspondantes de la colonne K en L si J= "c". SI J= "D", alors les valeurs restent en K

Je m'arrache les cheveux depuis ce matin sur le code qui que je pourrai intégrer dans le module qui détaille ma macro....

Et si vous m'aidez pour le code, comment dois-je l'intégrer dans ma macro ?

Merci pour votre aide urgente

Bonjour et bienvenue

Merci d'ouvrir un nouveau fil de discussion avec ta demande en faisant référence à celle-ci.

Ce fil est en effet cloturé.

Comme tu es nouveau sur ce forum, je t'invite également à lire ces quelques lignes qui t'aideront dans tes demandes et réponses --> https://forum.excel-pratique.com/annonces/explications-et-regles-a-respecter-t13.html

A te relire sur le nouveau fil.

Amicalement

Rechercher des sujets similaires à "macro deplacer lignes condition"