Excel - Eclater les valeurs d'une cellule

Bonjour,

Je suis sur une projet de base de données dans lequel je place une valeur par cellule et chaque valeur en ligne soit:

A
B
C
D

Mon problème c'est que certaine valeur (que je récupère à partir d'un autre classeur) sont présentes à plusieurs dans une même cellule c.a.d :

A B C D
E
F G
H
I J K L M N

Et là je ne sais pas comment faire simplement pour éclater les cellules qui contiennent plus d'une valeur en plusieurs cellules contenant chacune une valeur en ligne comme précédemment.

Aidez-moi s'il vous plait....

Voici un exemple de mon problème, ici avec des nooms de villes.

https://www.cjoint.com/?fCwUesLDKq

Gael
Configuration: Windows Vista
Firefox 3.0.5
excel 2003, 2007

9 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonjour,
    Si j'ai bien compris ton problème, je te signale une petite astuce, un peu manuelle, mais qui t'aidera si ton besoin est juste de mettre un mot par ligne :
    - Transférer ta colonne sous Word
    - Convertir le tableau en texte sous Word (Choisir marques de paragraphe comme séparateur) : tu obtiens la même série que sous Excel.
    - Comme il y a des espaces au début de certaines lignes, ils doivent être supprimés : Chercher-Remplacer "^p(espace)" (collés; le signe espace avec la barre espace du clavier) par "^p" (^p c'est le symbole de fin de ligne sous Word)
    - Chercher-Remplacer "(espace)" (le signe espace avec la barre espace du clavier) par "^p" : tous les mots se rangent chacun sur une ligne. Il reste à supprimer les espaces de trop qui se sont transformés en retour ligne.
    - Chercher-Remplacer "^p^p" par "^p". On obtient un mot par ligne et sans espaces intermédiaires.
    - Sélectionner le tout et reconvertir texte en tableau.
    - Reporter le tout dans Excel
    - Faire ce que vous vouliez faire.
    Bon courage et bonne journée.
    1. Bonjour Gael,
      Ton exemple est aussi clair que le pot d'echappement de mon char...
      Tu veux decouper par lettre le nom de ville ?
      1. Contributeur
        Non ! Tu exagères ...
        Gaël veut ne conserver que Teiului à la ligne 2 et renvoyer Potlogi en A8.
        De même Praid, Predeal et Prejmer doivent être ventilés sur 3 lignes différentes.
        Il faut donc lui proposer une macro qui reconnaisse la présence d'espaces (d'où une première difficulté à la ligne 5 qui commence par un espace), qui fractionne le contenu de chaque cellule après chaque espace, et qui déplace les éléments ainsi fractionnés dans des cellules vides de la colonne A : Pas très évident !
    2. Bonsoir,

      tu trouveras ci-joint un lien vers un exemple d'extraction de mots dans une chaîne de caractères vers d'autres cellules.

      C'est un peu une usine à gaz, mais cela semble fonctionner. Cela pourra peut-être te donner un début de solution.

      A+

      pépé
      1. Heu tu proposais un lien mais je ne le vois pas....

        Merci
    3. Désolé ce n'est vraiment pas facile à expliquez....

      Alors je vous explique, je doit créé une liste de ville que je place en colonne, une ville occupe une cellule et je place les villes les unes en dessous des autres (en ligne quoi..) tel que:

      Montréal
      Toronto
      Alifax
      ...
      ....

      Je les places de cette manière car après je lance une recheche dans la colonne pour retrouver certaine ville...bref le pourquoi n'est pas très important mais je dois impérativement les placer de cette manière.

      Le problème c'est que ces villes sont présentes dans une liste d'un autre classeur excel tirée d'un pdf dans lequel certainess cellules contienent non pas une ville mais 2, 3.... Donc ma question c'est comment faire pour copier, automatiquement les villes contenues dans une cellule dans d'autre cellule pour que chaque cellule ne contienne qu'une ville soit:

      Nantes Toulouse Paris Lyon

      se transforme en:

      Nantes
      Toulouse
      Paris
      Lyon

      Voilà j'éspère que j'ai été plus clair et que quelqu'un aura une solution pour moi

      Merci
      1. Bonjour,

        Voici le lien annoncé

        https://www.cjoint.com/?fDmtd7JlB7

        la manip s'appuie sur la recherche des espaces dans la chaîne de caractères (fonction CHERCHE
        On utilise ensuite la fonction STXT pour extraire chaque mot
        Problème : combien de mot as-tu par cellule au maximum.
        L'exemple gère trois mots maximum par cellule
        Je n'ai pas encore réussi à gérer de manière simple les messages d'erreur engendrés. Comment faire un test à partir de ces erreurs.

        Bon courage

        A+

        pépé
        1. Bonjour,

          j'ai refait un fichier un peu plus compréhensible (j'espère).

          http://www.cijoint.fr/cjlink.php?file=cj200905/cijfoEVD09.xls

          Ce fichier permet d'extraire quatre mots situés dans une même cellule.

          A+

          pépé
          1. Contributeur
            Bonjour à tous,

            Gael,
            Comme apparement tu ne fais pas cette manip tous les jours, je te propose une méthode en 2 temps (XL<2007)

            1/ tu sélectionnes toute la colonne avec les villes, puis données-convertir,délimité, espaces, terminer
            tu as maintenant une ville par cellule da A1 à Ax

            2/ tu peux ensuite utiliser cette macro: elle écrit les villes en 1 seule colonne; j'ai mis en colonne F (6=F)pour les essais
            mais si tu veux en colonne A, tu mets 1 à la place de 6 et tu enlèves l'apostrophe devant plage.clearcontents
            (voir lignes en gras)

            Sub mettre_en_colonne()
            
            Dim plage As Range
            Dim tablo
            Dim cptr As Long, lig As Long
            Dim nbre_col As Byte, col As Byte
            
            Range("A1").Select
            Set plage = Range("A1").CurrentRegion
            nbre_col = plage.Columns.Count
            tablo = plage
            
            Application.ScreenUpdating = False
            'plage.clearcontents
            lig = 1
            For cptr = 1 To UBound(tablo)
                For col = 1 To nbre_col
                    If tablo(cptr, col) <> "" Then
                    ' 6 correspond à la colonne F
                        Cells(lig, 6) = tablo(cptr, col)
                        lig = lig + 1
                    End If
                Next
            Next
            End Sub

            1. Merci, merci merci

              Vraiment très bonne solution merci michel !

              Juste une question que pense tu d'utiliser la fonction "transposé" dans collage special pour remettre les cellules en une colonne ?

              Merci encore en tout cas
          2. Salut,

            Après avoir utilisé la fonction Donnée/Convertir, tu peux utiliser le collage spécial et cocher transposer, à condition de procéder par ligne et edition/collage spécial/transposer.
            Si tu prends toutes tes lignes, la première ligne sera transposée en colonne , mais la deuxième ligne se mettra sur la colonne suivante.

            pourquoi ne pas utiliser le code macro de Michel en intégrant la convertion et la transpostion sur la colonne A

            A+
            Mike-31

            Un problème sans solution est un problème mal posé  (Einstein)
            1. Contributeur
              Bonsoir tout le monde,

              autre proposition :
              Sub AligneEnColonne()
                  Dim i As Long, j As Long, ch() As String
                  Application.ScreenUpdating = False
                  For i = [A65536].End(xlUp).Row To 1 Step -1
                      ch = Split(Trim(Cells(i, 1)), " ")
                      If UBound(ch) Then
                          For j = UBound(ch) To 1 Step -1
                              Cells(i, 1).Offset(1, 0).Insert Shift:=xlDown
                              Cells(i, 1).Offset(1, 0) = ch(j)
                          Next j
                          Cells(i, 1) = ch(0)
                      End If
                  Next i
                  Application.ScreenUpdating = True
              End Sub
              

              Elimine les espaces superflus gauche et droite.

              eric