IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Problème avec l'outil convertir [XL-2002]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Problème avec l'outil convertir
    Bonjour,

    Je souhaite convertir une chaine de caractères comportant comme séparateur de champs "," en plusieurs colonnes.
    Je fais Données-Convertir-Délimité-(virgule+interpréter séparateurs identiques+indicateur de texte " ).
    Tout se passe bien quand je constate un décalage au niveau de mes colonnes et je ne sais pas comment résoudre le problème sachant que je veux au final faire une macro automatique comportant d’autres étapes.
    Un exemple vaut mieux qu'une explication bof bof

    Mon texte:
    "Stylets GPS, SmartPhone, iPhone,""stylets pour HTC"",""xxxxxxxxxxxxx."

    Résultat:
    1er colonne: Stylets GPS
    2eme colonne: SmartPhone
    3eme colonne: iPhone
    4eme colonne: stylets pour HTC
    5eme colonne: xxxxxxxxxxxxx.

    Alors que moi je veux:
    1er colonne: Stylets GPS, SmartPhone, iPhone
    2eme colonne: stylets pour HTC
    3eme: xxxxxxxxxxxxx.

    Auriez vous une explication à ce problème, pourquoi il crée une colonne après la virgule non suivit d'un (") alors que dans d'autre cellule comportant du texte explicatif (phrase ponctuée avec des virgules), il gère bien le texte sans créer de nouvelle colonne ?
    Auriez vous une autre méthode pour contourner se problème ?

    Merci d'avance de vos réponses et de votre aide
    Sylvain

  2. #2
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Dans ton exemple, considérant le but que tu veux atteindre, il faut utiliser " comme séparateur et cocher [Interpréter des séparateurs identiques consécutifs comme uniques.]

  3. #3
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Avant de faire la conversion avec " comme séparateur, tu aurais avantage à remplacer "," (guillemets, virgule, guillemets) par rien du tout.

  4. #4
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Il serait plus prudent de remplacer d'abord "," par "
    Puis de remplacer "" par " à plusieurs reprises, jusqu'à ce que tous les séparateurs de la plage à convertir soient constitués d'un seul guillemet.
    Puis de faire la conversion avec " comme séparateur.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Merci pour la réponse.

    Cependant, j'ai oublié de préciser que mon exemple est une partie du texte à scinder. Son contenu est le détail d'un produit et en général, je dépasse la capacité toléré par une formule et ne peut donc faire un rechercher/remplacer (message erreur: Formule trop longue)

    Si quelqu'un avait un lien ou un code source décrivant comment extraire une chaine de caractère saisie entre un (") jusqu'au prochain (",) rencontré et écrire son contenu dans une nouvelle cellule d'un nouveau classeur. Et ainsi de suite sur la totalité de la chaine texte et en boucle pour faire le même schéma sur toutes les lignes.

    J'aimerai connaitre votre avis sur cette méthode et surtout si elle est viable?

    Merci d'avance
    Sylvain

  6. #6
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Citation Envoyé par amirale Voir le message
    Mon texte:
    "Stylets GPS, SmartPhone, iPhone,""stylets pour HTC"",""xxxxxxxxxxxxx."

    Auriez vous une explication à ce problème, pourquoi il crée une colonne après la virgule non suivit d'un (") alors que dans d'autre cellule comportant du texte explicatif (phrase ponctuée avec des virgules), il gère bien le texte sans créer de nouvelle colonne ?
    Lors de la conversion, si tu utilises uniquement le " comme séparateur, tout ce qui est précédé ou suivi du " (comme par exemple ",") sera placé dans une colonne.

    Citation Envoyé par amirale Voir le message
    Si quelqu'un avait un lien ou un code source décrivant comment extraire une chaine de caractère saisie entre un (") jusqu'au prochain (",) rencontré et écrire son contenu dans une nouvelle cellule d'un nouveau classeur. Et ainsi de suite sur la totalité de la chaine texte et en boucle pour faire le même schéma sur toutes les lignes.

    J'aimerai connaitre votre avis sur cette méthode et surtout si elle est viable?
    Bien sûr, il est possible d'écrire son son propre code pour faire une conversion d'un texte. Cela permet plus de flexibilité. Voici un exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Sub ConvertirEntreGuillemets()
    Set w1 = ThisWorkbook 'Classeur origine
    Set fe1 = w1.Worksheets(ActiveSheet.Name) 'Feuille origine
    Set w2 = Workbooks.Add 'Classeur destination
    Set fe2 = w2.Worksheets(1) 'Feuille destination
     
    Separateur = Chr(34) 'Guillemet
    ColonneOrigine = "A"
    Ligne = 2
     
    a = fe1.Range(ColonneOrigine & Ligne).Value 'Cellule origine : A2
     
    debut = 1
    b1 = InStr(debut, a, Separateur) 'Premier "
    b2 = InStr(b1 + 1, a, Separateur) 'Second "
     
    col = 1
    While b1 > 0 And b2 > 0
     
     mot = Mid(a, b1 + 1, b2 - b1 - 1)
     fe2.Cells(Ligne, col).Value = mot
     
     col = col + 1
     
     debut = b2 + 1
     b1 = InStr(debut, a, Separateur)
     b2 = InStr(b1 + 1, a, Separateur)
    Wend
     
    End Sub

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Salut,
    Encore un grand merci pour votre aide
    Sylvain

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/12/2007, 16h47
  2. [BUG]problème avec les outils
    Par Maxoo dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 7
    Dernier message: 22/04/2006, 09h52
  3. Problème avec l'outil profile
    Par befb dans le forum MFC
    Réponses: 2
    Dernier message: 07/05/2005, 14h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo