Macro excel copier coller conditionnel

Résolu/Fermé
comefs Messages postés 4 Date d'inscription vendredi 2 janvier 2015 Statut Membre Dernière intervention 11 mai 2015 - 2 janv. 2015 à 15:42
comefs Messages postés 4 Date d'inscription vendredi 2 janvier 2015 Statut Membre Dernière intervention 11 mai 2015 - 2 janv. 2015 à 21:25
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.
A voir également:

3 réponses

ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
2 janv. 2015 à 18:26
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
comefs Messages postés 4 Date d'inscription vendredi 2 janvier 2015 Statut Membre Dernière intervention 11 mai 2015
2 janv. 2015 à 18:32
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
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
2 janv. 2015 à 19:06
0
comefs Messages postés 4 Date d'inscription vendredi 2 janvier 2015 Statut Membre Dernière intervention 11 mai 2015
2 janv. 2015 à 21:25
Merci CCm81, ça marche !!
vive le forum et sa rapidité d'exécution.
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
2 janv. 2015 à 19:16
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