Macro excel copier coller conditionnel

Résolu/Fermé
Signaler
Messages postés
4
Date d'inscription
vendredi 2 janvier 2015
Statut
Membre
Dernière intervention
11 mai 2015
-
Messages postés
4
Date d'inscription
vendredi 2 janvier 2015
Statut
Membre
Dernière intervention
11 mai 2015
-
Bonjour,

Je suis à la recherche d'une macro excel qui me permettrait de copier les lignes d'une feuille excel sur une autre feuille excel dès qu'il apparaît dans une cellule le caractère "|" dans la 4ème colonne. Je ne peux le faire à la main, la feuille contenant plus de 4300 lignes.
Si la cellule contient plusieurs fois le caractère "|" alors il est nécessaire de la copier autant de fois que cela est nécessaire
Par exemple dans la 4ème colonne si j'ai 1234543234567 | 1232343355687 | 1235678903456, la macro devra me copier trois lignes avec les données suivantes :
à la première ligne : les données de la 1ère, 2ème, 3ème, 5ème colonne (invariables) et à la 4ème colonne la valeur 1234543234567
à la deuxième ligne : les données de la 1ère, 2ème, 3ème, 5ème colonne (invariables) et à la 4ème colonne la valeur 1232343355687
à la troisème ligne : les données de la 1ère, 2ème, 3ème, 5ème colonne (invariables) et à la 4ème colonne la valeur 1235678903456

Merci beaucoup pour votre aide précieuse. J'espère que ce n'est pas trop obscure comme façon de présenter la question. Je vous joins un exemple de ce que j'ai et de ce que j'aimerai pouvoir faire avec la macro.
Encore merci et bonne année 2015 à tous.

3 réponses

Messages postés
10197
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
14 janvier 2022
2 274
Bonjour

Peux tu mettre un bout de ton fichier au format excel 2003 sur cjoint.com et joindre le lien obtenu à ton prochain message

Cdlmnt
0
Messages postés
4
Date d'inscription
vendredi 2 janvier 2015
Statut
Membre
Dernière intervention
11 mai 2015

bonjour ccm81,
Tout d'abord merci de t'intéresser à mon problème.
voici le fichier excel : https://www.cjoint.com/c/EAcsMHO8CeL
merci pour ton aide et bonne année 2015 à toi
Cdlt
0
Messages postés
10197
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
14 janvier 2022
2 274
0
Messages postés
4
Date d'inscription
vendredi 2 janvier 2015
Statut
Membre
Dernière intervention
11 mai 2015

Merci CCm81, ça marche !!
vive le forum et sa rapidité d'exécution.
0
Messages postés
1418
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
3 janvier 2022
156
Bonsoir Comefs, bonsoir le forum,

Peut-être comme ça :

Sub Macro1()
Dim S As Object 'déclare l'onglet S (Source)
Dim D As Object 'déclare l'onglet D (Destination)
Dim TC As Variant 'déclare la variable TC (Tableau de Cellules)
Dim I As Integer 'déclare l'onglet I (Incrément)
Dim NB As Byte 'déclare la variable NB NomBre)
Dim DEST As Range 'déclare l'onglet DEST (cellule de DESTination)

Set S = Sheets("AMSR_20141124") 'définit l'onglet S
Set D = Sheets("Feuil1") 'définit l'onglet D
D.Cells.Clear 'efface le contenu de l'onglet D
S.Rows(1).Copy D.Range("A1") 'copie la première ligne de l'onglet S dans la cellue A1 de l'onglet D
TC = S.Range("A1").CurrentRegion 'définit le tableau de cellules TC
For I = 2 To UBound(TC, 1) 'boucle 1 : sur toutes les ligne du tabelau de cellules TC (en partant de la seconde)
    NB = UBound(Split(TC(I, 4), "|")) 'définit le nombre de fois que le symbole "|" apparaît dans la colonne 4 de TC)
    Select Case NB 'agit en fonction du nombre NB
        Case 0 'cas où NB vaut 0
            Set DEST = D.Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0) 'définit la cellule de destination
            For J = 1 To UBound(TC, 2) 'boucle 2 : sur toutes les colonnes du tableau TC
                'copie la cellule ligne I, colonne J de l'onglet source S dans DEST décalée de J-1 colonne à droite
                S.Cells(I, J).Copy DEST.Offset(0, J - 1)
            Next J 'prochaine colonne de la boucle 2
        Case Else 'autre cas
            For K = 0 To NB 'boucle 3 : de 0 à NB
                Set DEST = D.Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0) 'définit la cellule de destination
                For J = 1 To UBound(TC, 2) 'boucle 4 : sur toutes les colonnes du tableau TC
                    'copie la cellule ligne I, colonne J de l'onglet source S dans DEST décalée de J-1 colonne à droite
                    S.Cells(I, J).Copy DEST.Offset(0, J - 1)
                    'si J vaut 4, récupère la Kième valeur délimitée par ;e symbole "|"
                    If J = 4 Then DEST.Offset(0, J - 1).Value = Split(S.Cells(I, J), "|")(K)
                Next J 'prochaine colonne de la boucle 4
            Next K 'prochaine valeur de la boucle 3
    End Select 'fin de l'action en fonction du nombre NB
Next I 'prochaine ligne de la boucle 1
End Sub

0