Excel - Eclater les valeurs d'une cellule

Fermé
GAELAMONTREAL - 28 mai 2009 à 22:47
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 - 29 mai 2009 à 23:40
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

9 réponses

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
Utilisateur anonyme
28 mai 2009 à 22:55
Bonjour Gael,
Ton exemple est aussi clair que le pot d'echappement de mon char...
Tu veux decouper par lettre le nom de ville ?
0
Raymond PENTIER Messages postés 58721 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 15 novembre 2024 17 236
29 mai 2009 à 01:37
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 !
0
pépé35530 Messages postés 2942 Date d'inscription vendredi 1 mai 2009 Statut Membre Dernière intervention 19 mars 2016 1 384
29 mai 2009 à 01:29
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é
0
gaelamontreal
29 mai 2009 à 01:33
Heu tu proposais un lien mais je ne le vois pas....

Merci
0
gaelamontreal
29 mai 2009 à 01:31
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pépé35530 Messages postés 2942 Date d'inscription vendredi 1 mai 2009 Statut Membre Dernière intervention 19 mars 2016 1 384
29 mai 2009 à 12:26
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é
0
pépé35530 Messages postés 2942 Date d'inscription vendredi 1 mai 2009 Statut Membre Dernière intervention 19 mars 2016 1 384
29 mai 2009 à 16:25
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é
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
29 mai 2009 à 18:24
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

0
gaelamontreal
29 mai 2009 à 19:07
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
0
Mike-31 Messages postés 18346 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 13 novembre 2024 5 104
29 mai 2009 à 22:05
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)
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
29 mai 2009 à 23:40
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
0