Macro excel copier coller conditionnel

Résolu
comefs Messages postés 4 Statut Membre -  
comefs Messages postés 4 Statut Membre -
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

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
    1. comefs Messages postés 4 Statut Membre
       
      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
  2. ccm81 Messages postés 11033 Statut Membre 2 434
     
    0
    1. comefs Messages postés 4 Statut Membre
       
      Merci CCm81, ça marche !!
      vive le forum et sa rapidité d'exécution.
      0
  3. ThauTheme Messages postés 1564 Statut Membre 160
     
    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