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 :

Manipulation de chaines de caractères


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 26
    Par défaut Manipulation de chaines de caractères
    Bonjour,

    Je possède des scripts générés depuis des fichiers de clients que je reçois. Malheureusement, une partie utilisent une multitude d'espace pour faire un retour chariot et commencent par un "▪".

    Je ne trouve pas le moyen de remplacer le "▪" par un "-" ( les scripts sont générés dans un fichier texte du coup il me sort de "?" à la place)

    Pour le problème des espaces je cherche à remplacer ces multitudes d'espaces par char(13).

    Il faudrait que je puisse compte le nombre d'espace qui se suivent, et s'ils sont >= a 2 alors on remplace la chaine d'espace entière par char(13)

    Quelqu'un a une idée comment faire?

  2. #2
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Bonjour tohrak,

    "Remplacer chaînes de caractères VBA" dans Google...
    Premier lien : ici.

    A toi de jouer !

    Cordialement,
    Kimy

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 26
    Par défaut
    Bonjour Kimy,

    J'ai recherché un minimum sur google avant de venir poster et j'ai déjà consulter le lien que tu m'as proposé.

    La fonction replace me permet de modifier ma chaine de caractère si je connais le nombre d'espace que j'ai à remplacer. En sachant que les espaces simple ne doivent pas être modifié.

    Elle me permet pas non plus de modifier le point car celui n'est pas copiable dans le code vba.

  4. #4
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Bonjour tohrak,

    Triste nouvelle : je n'ai trouvé aucun Chr(i) (pour i = 1 à 256) correspondant à ton caractère "▪".
    J'avoue sécher sur ce point.
    J'espère qu'un membre de la communauté pourra t'apporter son aide sur ce point...

    Pour tes multiples espaces, utilise la fonction Trim : ici si tu veux n'avoir qu'un seul espace.

    Cordialement,
    Kimy

  5. #5
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Ah bon ?!

    [A1].Value = Chr$(149)

    Voir aussi la fonction Asc pour trouver le code exact du caractère.

  6. #6
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Mon caractère 149 est le suivant : "•"...

    J'ai procédé complètement différemment sans connaître la fonction "Asc".

    Je savais bien que nos experts pourraient te répondre !

    Merci Marc-L.

    Cordialement,
    Kimy

    EDIT : Avec Asc, je vois la caractère à 63. Pourquoi ?!

  7. #7
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Peut-être car tu testes dans la fenêtre Exécution du VBE au lieu d'une feuille Excel directement ?

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 26
    Par défaut
    Merci pour vos réponses,

    Je vais me pencher sur le fonction Trim

    Edit:

    Car(149) = •
    Asc(•) = 149

    Asc(▪) = 63
    Car(63) = "?"

    Je vais voir si je peux l'utiliser comme ça

    Edit 2:

    J'ai essayer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Tableau(2, cd2) = Replace(Tableau(2, cd2), Chr(63), "-")
    mais ça ne fonctionne pas.

  9. #9
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Peux-tu joindre un texte avec un exemple de texte ?

    En lisant le texte un caractère à la fois avec Mid(), tu devrais parvenir à savoir quel est le code ASCII des caractères.
    Un saut de ligne (Chr(13) ou vbCrLf) dans une cellule affiche un carré blanc.
    Il faut utiliser Chr(10) ou vbLf pour faire un beau saut de ligne sans caractère indésirable. Équivalent à Alt-Enter

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 26
    Par défaut
    Citation Envoyé par parmi Voir le message
    Peux-tu joindre un texte avec un exemple de texte ?

    J'ai du texte sous cette forme la:

    '▪ En matière de livrables: documents, extractions, PV
    ▪ En matière de communication écrite / orale ', 'Q4 : Insatisfaisant
    Q3 : Satisfaisant
    Q2 : Bon
    Q1 : Excellent',' ',0,'N','N',null,null,null,0,' ',0,0,' ',' ','P',null,0,' ',sysdate,' ',null,' ','C' from ps_ep_appr where EMPLID='UBP08569';
    Les retours à ligne sont retranscrits dans le fichiers .txt donc pas trop de soucis de ce côté la. Mais le carré noir est retranscrits avec un ? et ce n'est pas très esthétique. Pour le moment la seul solutions que je vois c'est d'écrire dans un fichier, récupérer la valeur, modifié les "?" et récrire dans le fichier.

  11. #11
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Citation Envoyé par tohrak Voir le message
    Bonjour,

    Je possède des scripts générés depuis des fichiers de clients que je reçois. Malheureusement, une partie utilisent une multitude d'espace pour faire un retour chariot et commencent par un "▪".

    Je ne trouve pas le moyen de remplacer le "▪" par un "-" ( les scripts sont générés dans un fichier texte du coup il me sort de "?" à la place)

    Pour le problème des espaces je cherche à remplacer ces multitudes d'espaces par char(13).

    Il faudrait que je puisse compte le nombre d'espace qui se suivent, et s'ils sont >= a 2 alors on remplace la chaine d'espace entière par char(13)

    Quelqu'un a une idée comment faire?
    Oui j'ai bien une idée car c'est plutôt basique !

    Mais sans nous faire partager le code en question ni joindre un fichier source
    (idéalement joindre aussi un fichier résultat désiré), inutile d'y penser …

    Sinon pour le point il suffit de simplement consulter l'aide d'Asc
    pour découvrir pour lire les caractères étendus il y a la fonction AscW et donc son pendant ChrW,
    tout cela sous le coude à portée de clic ‼

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 26
    Par défaut
    Bonjour Marc-L

    Malheureusement, je n'ai pas le droit de joindre les fichiers sources car ce sont des fichiers envoyé par des clients, c'est pourquoi j'ai donnée un aperçu des cellules après générations des scripts.

    Concernant tes fonctions AscW et ChrW elle fonctionne à merveille et j'ai pu régler mon problème sans trop de soucis.

    J'ai juste une dernière question. Admettons que j'ai du texte sous la forme:

    -Titre:
    texte
    -Titre2
    texte - Titre3
    texte
    J'aimerais pouvoir vérifier qu'avant un "-" il y a un retour chariot avant sinon en mettre un.

    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
    Dim i As Integer
        Dim j As Integer
        Dim nbcar As Integer
        Dim dernLigne As Integer
    
        Sheets(9).Select
        dernLigne = Cells.Find("*", , , , xlByRows, xlPrevious).Row
        
        
        For i = 2 To dernLigne
            nbcar = Len(Cells(i, 4))
            
            For j = 1 To nbcar
                If Mid(Cells(i, 4), j, 1) = "-" Then
                    If Not Mid(Cells(i, 4), j - 1, 1) = Chr(10) Then
                        Mid(Cells(i, 4), j - 1, 1) = Mid(Cells(i, 4), j - 1, 1) & Chr(10)
                    End If
                End If
            Next
        Next
    J'ai une erreur sur le cells en gras, il me dit que je dois "Variable requise. Impossible de l'affecter à cette expression". Et je pense que ce code n'est pas du tout opti mais je trouve pas d'autre solutions

  13. #13
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Les fichiers originaux ne sont pas obligatoires, des versions édulcorées mais représentatives font aussi l'affaire.

    Voir déjà les fonctions texte Instr et Mid pour contrôler le caractère précédent un tiret …

  14. #14
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 569
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 569
    Par défaut
    Bonjour

    J'ai déjà eu à expurger des documents texte complexes (dont html).

    Le cherche te remplace de Word autorisant, d'une part, le remplacement d'un multitude d'espaces par un seul caractère, mais permettant, d'autre part, de créer des expression régulières, j'invoque Word depuis le VBA Excel afin de résoudre plus facilement ce type de conversion.

  15. #15
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Cela m'apparait assez simple pour n'utiliser qu'Excel mais sans voir de code source quant au texte d'origine à modifier …

    Voir aussi du côté des fonctions Split et Right.

    Comme souvent en VBA, plusieurs possibilités pour résoudre une problématique …

  16. #16
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut HEU
    Bonjour

    '▪ En matière de livrables: documents, extractions, PV
    ▪ En matière de communication écrite / ', 'Q4 : Insatisfaisant
    Q3 : Satisfaisant
    Q2 : Bon
    Q1 : Excellent',' ',0,'N','N',null,null,null,0,' ',0,0,' ',' ','P',null,0,' ',sysdate,' ',null,' ','C' from ps_ep_appr where EMPLID='UBP08569';
    ils sont ou des multi espaces????????
    tu parles des "null"?????
    dans ce cas la c'est pas compliqué

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    texte='ton texte'ici la variable ou le chemin de ton texte 
    texte =replace(replace(texte,"ton caractere special","-"),",null,",chr(13))
    en fin moi ce que j'en dis

    edit 2 minute plus tard :
    il semblerais que ce symbole ne soit pas reconnu
    je vais voir ca
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  17. #17
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Au pire des cas

    puisque dans vbe ce caractère se transforme en"?" fait un replace sur le"?" tout simplement
    et en l'occurrence le code asc de ce symbole c'est asc(739) ou asc(836) en Unicode
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

Discussions similaires

  1. Comment manipuler une chaine de caractère
    Par belmehdi17 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 11/03/2008, 16h03
  2. Manipulation de chaine de caractères, supression d'une apostrophe
    Par pmithrandir dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 28/11/2007, 07h55
  3. Manipulation des chaines de caractères en c
    Par developppez dans le forum C
    Réponses: 8
    Dernier message: 29/04/2007, 13h04
  4. Réponses: 4
    Dernier message: 14/10/2006, 23h38
  5. Réponses: 4
    Dernier message: 20/08/2004, 10h59

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