Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Dupliquer ligne avec condition

  • Initiateur de la discussion Initiateur de la discussion cheikh
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

C

cheikh

Guest
Bonjour,
Je veux adapter une macro qui doit me permettre de dupliquer une ligne entière si le dernier champs de la ligne est renseigné (voire exemple dans Feuil2).
Dans la Feuil1 il existe déjà une macro qui permet de faire un duplication de ligne en plusieurs en se basant sur les ";".
Les deux problématiques sont assez semblables mais je n'arrive pas à l'adapter pour mon cas.
J'ai mis les deux exemples en pj.
Merci d'avance.
 

Pièces jointes

Re : Dupliquer ligne avec condition

Bonjour.
Comme ça :
VB:
Sub Duplique()
Dim TE(), LE&, TS(), LS&, C&
TE = ActiveSheet.[A1].CurrentRegion.Value
ReDim TS(1 To 5000, 1 To 6)
For LE = 2 To UBound(TE, 1)
   LS = LS + 1
   For C = 1 To 6: TS(LS, C) = TE(LE, C): Next C
   If Not IsEmpty(TE(LE, 7)) Then
      LS = LS + 1
      For C = 1 To 5: TS(LS, C) = TE(LE, C): Next C
      TS(LS, 6) = TE(LE, 7): End If: Next LE
ActiveSheet.[A14].Resize(LS, 6).Value = TS
End Sub
 
Re : Dupliquer ligne avec condition

Bonjour cheikh,

Une solution (parmi bien d'autres) ...

Effacer les données sous le tableau de départ avant de poursuivre. Le résultat sera collé en colonne J à O.
VB:
Sub dupliqueCA()
Dim tablo()
With Sheets("Feuil2")
.[J:O].EntireColumn.ClearContents
.[A1:F1].Copy .[J1]
For lig = 2 To .Cells(Rows.Count, 2).End(xlUp).Row
    For col = 1 To 2
        If .Cells(lig, 5 + col) <> "" Then
            ReDim Preserve tablo(5, i)
            tablo(0, i) = .Cells(lig, 1)
            tablo(1, i) = .Cells(lig, 2)
            tablo(2, i) = .Cells(lig, 3)
            tablo(3, i) = .Cells(lig, 4)
            tablo(4, i) = .Cells(lig, 5)
            tablo(5, i) = .Cells(lig, 5 + col)
            i = i + 1
        End If
    Next col
Next lig
.[J2].Resize(i, 6) = Application.Transpose(tablo)
End With
End Sub

[Edit:] Oupssss, désolé pour le télescopage, Dranreb et accessoirement, bien le bonjour 🙂
 
Re : Dupliquer ligne avec condition

Bonjour Modeste et Dranreb,
Vos deux solution marchent très bien.
Question: est-il possible de ne pas créer une nouvelle plage de données en lançant la macro mais que tout se pas la plage ou tableau initiale.
Encore Merci.
 
Re : Dupliquer ligne avec condition

Oui, il suffit de changer la destination [A14] en [A2]

Dimensionnez peut être aussi TS(1 to 5000, 1 To 7) et dans le Resize à la fin aussi, pour que ça efface la colonne 7.
 
Dernière édition:
Re : Dupliquer ligne avec condition

Re,

Ça vaut ce que ça vaut ... ma proposition pouvait être modifiée comme suit
VB:
Sub dupliqueCA()
Dim tablo()
With Sheets("Feuil2")
titres = Array("civilite", "nom", "nom de jeune fille", "prenom", "date naissance", "CA")
For lig = 2 To .Cells(Rows.Count, 2).End(xlUp).Row
    For col = 1 To 2
        If .Cells(lig, 5 + col) <> "" Then
            ReDim Preserve tablo(5, i)
            tablo(0, i) = .Cells(lig, 1)
            tablo(1, i) = .Cells(lig, 2)
            tablo(2, i) = .Cells(lig, 3)
            tablo(3, i) = .Cells(lig, 4)
            tablo(4, i) = .Cells(lig, 5)
            tablo(5, i) = .Cells(lig, 5 + col)
            i = i + 1
        End If
    Next col
Next lig
.[A:G].EntireColumn.ClearContents
.[A1:F1] = titres
.[A2].Resize(i, 6) = Application.Transpose(tablo)
End With
End Sub:
 
Re : Dupliquer ligne avec condition


Merci Modeste pour les réponses rapides. Le résultat est super.
 
Re : Dupliquer ligne avec condition

rBonjour,
je reviens vers vous pour savoir si une possibilité peut être prise en compte dans la macro c'est à dire si on peut colorier les nouvelles lignes qui sont dupliquées où écrire quelque chose à côté pour savoir qu'elles ont été dupliquées. En gros une chose simple pour indiquer désigner ces lignes.
Merci d'avance
 
Re : Dupliquer ligne avec condition

re,
oui c'est une bonne idée et j'ai essayé avec la macro de Modeste et cette colonne Now me met toutes lignes avec la même date.
En ce qui concerne ta macro qui marche également très bien, c'est plus difficile pour moi de l'adapter car je ne comprends pas cette manière de programmer avec vba en utilisant les tabo .
 
Re : Dupliquer ligne avec condition

Pourtant Modeste en utilise aussi un mais seulement pour la sortie, et il ne fait pas de boucle pour les colonnes.
Moi j'en utilise 2: un pour l'entrée et l'autre pour la sortie.
C'est pour ça que je les appelle toujours TE et TS ainsi que leurs indices (de ligne) LE et LS

Il faut mettre Now seulement aux lignes ajoutées. Pour les autres il faut reproduire ce qu'il y a déjà, si j'ai bien compris.
 
Dernière édition:
Re : Dupliquer ligne avec condition

re,
cette méthode met toujours temps d'exécution plus court. J'ai essayé de chercher des tuto pour la comprendre mais hélas... En gros c'est fort
 
Re : Dupliquer ligne avec condition

Surtout la syntaxe mais je pense que ça demande aussi de la pratique normalement.
Par exemple lors des déclaration: LE& ...
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

N
Réponses
6
Affichages
2 K
Navillus
N
D
Réponses
1
Affichages
564
darbouka33
D
C
Réponses
2
Affichages
1 K
C
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…