Excel : remplir 2 col à partir d'1

Fermé
Marc58130 - 31 mars 2011 à 15:41
mic13710 Messages postés 1087 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 13 mai 2021 - 1 avril 2011 à 15:42
Bonjour,

Voilà, je ne suis pas un expert en Excel... Cependant je suis face à un problème un peu trop complexe à mon sens :
J'ai une colonne où chaque cellule comporte plusieurs données (2 types)
--> TypeA;TypeB;TypeA;TypeB;TypeB...
Chaque type de donnée est séparé par un point virgule.
On différencie le TypeA du TypeB par la première lettre du typeB (R dans mon cas).

Et au final, j'aimerais avoir 2 colonnes : TypeA et TypeB !!!!

Je suis complètement bloqué et j'ai vraiment besoin que quelqu'un m'explique la démarche...

Merci d'avance à vous tous !!!!

A voir également:

6 réponses

mic13710 Messages postés 1087 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 13 mai 2021 355
31 mars 2011 à 15:50
Une question :
Vous dites dans chaque cellule vous avez TypeA;TypeB;TypeA;TypeB;TypeB...
Si je comprends bien, vous avez sur la même ligne plusieurs données TypeA et plusieurs données TypeB que vous souhaitez séparer pour les mettre en colonnes, une pour les TypeA et l'autre pour les TypeB
Et vous avez ce type de données sur plusieurs lignes.
Est-ce bien cela ?

Michel
0
Oui c'est exatement ça !!!
Exemple :

TypeA1;TypeA2;TypeB1;TypeA3;TypeB2;

ColonneTypeA -->TypeA1;TypeA2;TypeA3
ColonneTypeB -->TypeB1;TypeB2
0
mic13710 Messages postés 1087 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 13 mai 2021 355
31 mars 2011 à 15:59
Et qu'est ce qui différencie les typeA des typeB ?
0
mic13710 Messages postés 1087 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 13 mai 2021 355
31 mars 2011 à 16:07
Et surtout, est ce que chaque ligne est ordonnée de la même manière ?
Il faut bien une logique. Si ce n'est pas le cas, je ne vois pas bien pourquoi il faudrait mettre en relation un TypeA avec un TypeB dans 2 colonnes.
0
Non, ils ne sont pas ordonnées de la même manière.
En fait chaque ligne correspond à un produit et le fichier Excel présente 2 types de données dans la même cellule. Et donc comme ce fichier doit être mis en base de donnée, se serait plus lisible si les données de type A et B soient dans 2 colonnes différentes.

Exemple pour un produit :
Tshirt 1 : S;M;R32;R26;L;XL
Donc les tailles du tshirt ne doivent pas se confondre avec les données commençant par un "R"
0
mic13710 Messages postés 1087 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 13 mai 2021 355
31 mars 2011 à 16:28
OK compris. Mais supposons deux lignes comme celles-ci :
S;M;R32;R26;L;XL
S;M;R42;R46;L;XL

Si vous mettez vos données en colonnes ça va donner :
S R32
M R26
L R42
XL R46
S
M
L
XL

Est-ce ce que vous souhaitez ?
0
Presque :)

Produit1 : S;M;R32;R26;L;XL
Produit2 : S;M;R42;R46;L;XL

------- RESULTAT ---------

ProduitA - ColTypeA : S;M;L;XL
ProduitA - ColTypeB : R32;R26

ProduitB - ColTypeA : S;M;L;XL
ProduitB - ColTypeB : R42;R46
0
mic13710 Messages postés 1087 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 13 mai 2021 355
Modifié par mic13710 le 31/03/2011 à 17:40
Ca fait 3 critères tout ça !
Produit, TypeA et TypeB
C'est effectivement assez complexe dans la mesure ou il n'y a pas de cohérence dans les données.
Je ne vois guère de solution autre qu'une macro pour extraire les données car pour chaque article il faut insérer le nombre de lignes nécessaires en fonction des données présentes.
Par exemple les produits 1 et 2 ci-dessus, un produit 3 : S;R65;M;R26;R32;L;R44;XL;R45
et un produit4 : S;R36;M
donneraient les résultats suivant :
Produit1 et Produit2 : 4 lignes
Produit3 : 5 lignes à cause des données en R
Produit2 : 2 lignes seulement
0
Le typeB commence toujours par la lettre "R"
0
mic13710 Messages postés 1087 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 13 mai 2021 355
31 mars 2011 à 16:12
Et sur l'agencement des lignes ? (voir commentaire de ma question çi-dessus)
0

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

Posez votre question
mic13710 Messages postés 1087 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 13 mai 2021 355
1 avril 2011 à 01:03
Voila un exemple de macro qui devrait résoudre votre problème.

http://www.cijoint.fr/cjlink.php?file=cj201104/cij0E0Bc6i.xls

Je ne doute pas qu'il y ait plus simple, mais bon ça marche.
J'ai considéré que vous aviez vos données sur 2 colonnes, la première avec le nom du produit, la deuxième avec les données.

Une fois votre classement effectué, vous pouvez supprimer la colonne B qui n'est plus utile. J'aurais pu le faire en macro mais comme ça vous pouvez vérifier que toutes vos données ont été traitées avant d'effectuer manuellement la suppression.

A demain,

Michel
0
Bonjour !

Bon je viens de tester et c'est super !
Maintenant, à mon tour de comprendre comment ce script marche car mes données de type A et B doivent être dans la même cellule et non les unes en dessous des autres...

Merci beaucoup pour l'aide !!!!!!
0
mic13710 Messages postés 1087 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 13 mai 2021 355
Modifié par mic13710 le 1/04/2011 à 09:44
Ce n'est pas la même chose!
Si vous dites que vous voulez les données en colonnes, l'interprétation décrite dans mon message #10 en fonction des infos tirés au forceps et ce que j'ai traduit en code dans l'exemple que je vous ai envoyé collent à votre demande.
Il aurait fallu dire dès le départ que pour chaque ligne vous vouliez regrouper les données de Type A dans une cellule et les données de Type B dans une autre. Du point de vue code, c'était nettement plus simple.

Voila le code a copier et coller à la place de celui de l'exemple ci-dessus :

Dim Liste As String   
Dim Extra As String   
Dim Lig As Byte   
Dim Lig1 As String   
Dim Lig2 As String   
Dim Pos As Byte   

Sub Sep()   
Lig = 1   
Lig1 = ""   
Lig2 = ""   
Liste = "a"   
Do Until Len(Liste) = 0   
Liste = Cells(Lig, 2)   
Pos = 1   
Do Until Pos > Len(Liste)   
If InStr(Pos, Liste, ";") > 0 Then   
    Extra = Mid(Liste, Pos, InStr(Pos, Liste, ";") - Pos)   
Else   
    Extra = Mid(Liste, Pos)   
End If   
If Left(Extra, 1) = "R" Then   
    If Lig2 = "" Then   
        Lig2 = Extra   
    Else   
        Lig2 = Lig2 & ";" & Extra   
    End If   
Else   
    If Lig1 = "" Then   
        Lig1 = Extra   
    Else   
        Lig1 = Lig1 & ";" & Extra   
    End If   
End If   
Pos = Pos + Len(Extra) + 1   
Loop   
Cells(Lig, 3) = Lig1   
Cells(Lig, 4) = Lig2   
Lig = Lig + 1   
Lig1 = ""   
Lig2 = ""   
Loop   
End Sub   


Michel
0
Merci michel !!! mais comme ta solution de ce matin était très proche du résultat que je voulais, je me suis débrouillé avec :) et surtout qu'après on m'as précisé un 3ème type de données....
Mais en tout cas merci vraiment pour ton aide !!!!!!
0
mic13710 Messages postés 1087 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 13 mai 2021 355
1 avril 2011 à 15:42
OK alors,

Merci de passer le sujet à résolu.

Michel
0