Excel : remplir 2 col à partir d'1

Marc58130 -  
mic13710 Messages postés 1165 Date d'inscription   Statut Membre Dernière intervention   -
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 !!!!

6 réponses

  1. mic13710 Messages postés 1165 Date d'inscription   Statut Membre Dernière intervention   360
     
    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
  2. Marc58130
     
    Oui c'est exatement ça !!!
    Exemple :

    TypeA1;TypeA2;TypeB1;TypeA3;TypeB2;

    ColonneTypeA -->TypeA1;TypeA2;TypeA3
    ColonneTypeB -->TypeB1;TypeB2
    0
  3. mic13710 Messages postés 1165 Date d'inscription   Statut Membre Dernière intervention   360
     
    Et qu'est ce qui différencie les typeA des typeB ?
    0
    1. mic13710 Messages postés 1165 Date d'inscription   Statut Membre Dernière intervention   360
       
      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
    2. Marc58130
       
      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
    3. mic13710 Messages postés 1165 Date d'inscription   Statut Membre Dernière intervention   360
       
      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
    4. Marc58130
       
      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
    5. mic13710 Messages postés 1165 Date d'inscription   Statut Membre Dernière intervention   360
       
      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
  4. Marc58130
     
    Le typeB commence toujours par la lettre "R"
    0
    1. mic13710 Messages postés 1165 Date d'inscription   Statut Membre Dernière intervention   360
       
      Et sur l'agencement des lignes ? (voir commentaire de ma question çi-dessus)
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. mic13710 Messages postés 1165 Date d'inscription   Statut Membre Dernière intervention   360
     
    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
  7. Marc58130
     
    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
    1. mic13710 Messages postés 1165 Date d'inscription   Statut Membre Dernière intervention   360
       
      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
    2. Marc58130
       
      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
    3. mic13710 Messages postés 1165 Date d'inscription   Statut Membre Dernière intervention   360
       
      OK alors,

      Merci de passer le sujet à résolu.

      Michel
      0