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 :

Caractères spéciaux dans une chaîne


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Août 2017
    Messages : 62
    Par défaut Caractères spéciaux dans une chaîne
    Je mémorise sous forme d'un nombre décimal l'horaire de travail des salariés d'une organisation.
    Converti en nombre binaire, chaque bit m'indique l'absence (0) ou la présence (1) de la personne pendant 1/4 d'heure.
    Pour couvrir 24 heures, ce nombre a donc 96 bits.
    Je souhaite visualiser les prestations des salariés sous forme de chaînes de caractères insérées dans une colonne d'une feuille Excel.
    Je pense utiliser pour cela 2 caractères spéciaux de la police Courier New, le caractère 2500 (Filet = 0 = absence) et le 2580 (Demi-pavé = 1 = présence).
    Quelqu'un peut-il m'indiquer comment procéder pour réaliser cela à partir de mon code VBA ?
    J'ai cherché dans toutes les publications que vous proposez sur votre site, mais je n'ai pas trouvé comment manipuler des caractères spéciaux ...

    Merci de votre aide

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Pas besoin de VBA. Tu peux faire ça en deux coup de Remplacer.
    Ruban Accueil > Rechercher et remplacer > Remplacer > Champ Rechercher = 0 > Champ Remplacer par = caractère 2500 > Remplacer tout.

    Tu fais la même chose pour remplacer le 1.

    Si tu tiens à le faire en VBA, c'est la méthode Replace de Range.
    https://msdn.microsoft.com/fr-fr/lib.../ff194086.aspx

  3. #3
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Août 2017
    Messages : 62
    Par défaut
    Bonjour Menhir et merci pour ta réponse rapide

    Pour être bref, je n'ai pas insisté, dans ma demande, sur le fait que c'est le code que je suis en train de développer qui doit construire et insérer dans ma feuille Excel la chaîne en question.
    Les personnes qui vont manipuler mon programme n'ont ni le temps, ni les compétances pour effectuer la manoeuvre que tu décris.
    Elle devront, lorsqu'elles ouvrent mon fichier chaque matin, découvrir l'horaire de travail de ce jour-là des quelques 250 personnes de l'organisation !

    Je connaît bien entendu la fonction "Replace" qui devrait me permettre de convertir dans VBA chaque bit de mon nombre binaire dans le caractère souhaité.
    Mais je n'ai pas trouvé l'expression qui me permette de la faire avec un caractère spécial comme ceux que j'ai choisi.

    Lorsque j'essaye d'écrire (dans une cellule formatée 'Courier New") "ChrW(2500)" et "ChrW(2580)" j'obtiens une caractère bizarre !
    Je ne sais pas non plus comment insérer cette expression dans la fonction "Replace".

    Merci si quelqu'un peut m'aider rapidement car je dois présenter mon étude fin de cette semaine ...

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Benevole V1 Voir le message
    Je connaît bien entendu la fonction "Replace"
    Je ne parlais pas de la fonction Replace mais de la METHODE Replace (voir le lien de mon message précédent).

    Lorsque j'essaye d'écrire (dans une cellule formatée 'Courier New") "ChrW(2500)" et "ChrW(2580)" j'obtiens une caractère bizarre !
    D'où as-tu tiré les valeurs de tes codes ?
    Regarde la police Terminal. J'ai l'impression que les caractères que tu veux utiliser y sont mais avec des codes inférieurs à 256 ce qui facilitera l'utilisation de Chr().

    Je ne sais pas non plus comment insérer cette expression dans la fonction "Replace".
    De la même façon de tu insèrerais une valeur.

  5. #5
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Août 2017
    Messages : 62
    Par défaut
    Merci Menhir,

    D'abord pour le lien que j'ai téléchargé pour le consulter + tard car je dois d'abord arriver à afficher ces fichus caractères !

    J'ai tiré les codes de mes 2 caractères de la fenêtre "Caractères spéciaux" sous l'onglet "Insertion/symboles".
    Je n'ai aucun problème pour insérer ces caractères dans une feuille Excel à partir de cette fenêtre, mais le résultat est différent lorsque je le fais à partir du code !

    J'ai inséré toute la police "Courrier New" (3839 caractères !) dans une feuille Excel en fabricant une boucle dans VBA et je retrouve bien mes 2 caratères bizarres avec les codes 2500 et 2580 qui devaient me donner mon Filet et mon demi pavé.

    Je ne trouve pas ta police "Terminal" dans ma version d'office !

    Je continue à chercher, si tu sais encore m'aider, ce serait super !

    Georges, de Belgique

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Benevole V1 Voir le message
    Je ne trouve pas ta police "Terminal" dans ma version d'office !
    Aucune police n'est dans Office. Elles sont dans Windows et utilisables par tous les logiciel qui y sont installés, y compris Office.
    Terminal est une police standard de Windows.
    Mais si tu parviens à obtenir le code que tu souhaites, alors il te suffit de le mettre dans Replace pour obtenir ce que tu souhaites en deux lignes de code.
    L'enregistreur automatique de macro pourrait même te fournir 90% de ce code.

  7. #7
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Août 2017
    Messages : 62
    Par défaut
    Re-bonjour Menhir,

    Bon, j'ai utilisé la méthode REPLACE que je ne connaissais pas et qui m'a épatée !

    Je l'ai testée en ecrivant dans la cellule (6, 2) d'une feuille Excel : "000110010001111" (c'est un exemple, juste pour être précis ...)
    Ensuite j'ai tapé dans mon code : Cells(6, 2).Replace "1", ChrW(2580), xlPart

    Ca marche très bien et c'est super pour la suite de mon développement ...

    Mais mes caractères "1" sont toujours remplacés par le même caractère chinois au lieu du demi-pavé que j'avais repéré dans le fenêtre "Symboles" d'Excel sous le code 2580 (dans la police "Courier New").

    J'essayerais bien ta police "Terminal" mais comment connaître les codes de caractères dans cette police (que je ne trouve pas dans la fenêtre) ?

  8. #8
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Benevole V1 Voir le message
    J'essayerais bien ta police "Terminal" mais comment connaître les codes de caractères dans cette police (que je ne trouve pas dans la fenêtre) ?
    Bin... système DTS (Débrouille-toi Tout Seul ).

    Tu fais une mini macro (ce qui est sans doute un oxymore) pour obtenir tous les codes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim i As Long
    For i = 1 To 3000
        Cells(i, 1).Value = i
        Cells(i, 2).Value = ChrW(i)
    Next i
    En mettant la colonne 2 avec la police souhaitée.

  9. #9
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Août 2017
    Messages : 62
    Par défaut
    Merci Menhir, mais on tourne en rond !

    Ta mini-macro, je l'ai déjà faite pour visualiser toute la police "Courier New" (voir mon message N°3).
    Dans les cellules m'affichant le caractère 2500 et 2580, j'ai bien trouvé ces symboles chinois dont je t'ai parlé et pas le filet et le demi-pavé que j'avais repéré dans la fenêtre "Caractères spéciaux" d'Excel.
    Et ces 2 caractères sont bien ceux que j'ai inséré sur ma feuille Excel en cliquant sur la touche "Insérer" de cette fenêtre.

    Alors ma petite tête de belge ne comprend pas pourquoi ???

    PS : Pour ton info, lorsqu'un flamand (60% des belges !) prononce "Menhir" (qu'il écrit "Mijnheer"), cela veut dire "Monsieur".
    Alors, merci encore pour le coup de main, Monsieur Menhir !
    Mais si tu pouvais m'aider à résoudre mon problème, tu serais vraiment un "Tof" type, comme on dit à Bruxelles !

    Georges le belge (mais Wallon celui-là)

  10. #10
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Benevole V1 Voir le message
    Dans les cellules m'affichant le caractère 2500 et 2580, j'ai bien trouvé ces symboles chinois dont je t'ai parlé et pas le filet et le demi-pavé que j'avais repéré dans la fenêtre "Caractères spéciaux" d'Excel.
    As-tu remarqué que dans la table de caractère de Windows (et dans celle d'Excel), les codes sont donnés en héxadécimal et que ChrW doit avoir un code Integer donc décimal ?

    Pour info, la valeur décimale de 2500 et 2580 hexadécimaux, c'est 9472 et 9600 (la calculatrice Windows fait très bien ces conversions).

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Peut-être t'inspirer de ceci? J'ai peut-être inversé les caractères par rapport à ton souhait.
    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
    Sub TestHoraire()
      Dim Value As Byte
      Dim ValueBin As String
      Dim Counter As Long
      Dim Result As String
      Value = 197
      ValueBin = DecToBin(Value)
      For Counter = 1 To Len(ValueBin)
        If Mid(ValueBin, Counter, 1) = 1 Then
          Result = Result & ChrW(9472)
        Else
          Result = Result & ChrW(9600)
        End If
      Next
      Range("a1").Value = Result
    End Sub
     
    Function DecToBin(ByVal Value As Long) As String
    Dim Result As String
     
    Do While Value > 1
        Result = Value - 2 * (Value \ 2) & Result
        Value = Value \ 2
    Loop
    DecToBin = Value & Result
    End Function
    Citation Envoyé par Menhir Voir le message
    [...]
    (la calculatrice Windows fait très bien ces conversions).
    VBA aussi
    [EDIT] Tu pourrais d'ailleurs l'utiliser directement dans le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Result = Result & ChrW(&h2500)
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  12. #12
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Août 2017
    Messages : 62
    Par défaut
    Menhir, tu es génial !

    Mais je ne suis pas sûr que tu n'as pas un peu "joué avec mes pieds" (expression belge ?) en ne me donnant pas cette dernière info tout de suite !

    N'empêche que tu m'as apporté 200% de ce que j'espérais : 100% pour le code décimal caché derière le code hexadécimal et 100% en bonus pour la fonction (pardon, la METHODE) "Replace" qui m'intéresse beaucoup !

    Mille fois merci (je vais bien dormir cette nuit) et vive la Bretagne et ses bretons que j'aime beaucoup (j'avais beaucoup de bon contacts par là quand j'étais encore dans la vie "active").

    Georges, le belge

  13. #13
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Août 2017
    Messages : 62
    Par défaut
    Merci aussi Pierre Fauconnier,

    Je n'avais pas remarqué que tu étais aussi entré dans la discusion après Menhir.

    J'ai bien enregistré le bout de code que tu m'as envoyé et je vais certainement m'en inspirer demain quand je vais reprendre mon étude.

    Merci encore et à bientôt sans doute ...

    Georges, bénévole au Village N°1 à Braine l'Alleud ...

  14. #14
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Août 2017
    Messages : 62
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    [...]
    Si tu aimes les citations, parmi celles que j'aime beaucoup, il y a celle-ci de Winston Churchill :

    "Un pessimiste c'est quelqu'un qui voit des problèmes dans chaque opportunité.
    Un optimiste c'est quelqu'un qui voit des opportunités dans chaque problème."

  15. #15
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Merci pour la citation...

    Cela étant dit, comment composes-tu ta suite binaire? Parce que 96 octets, ça fait un trèèès grand nombre.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  16. #16
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Benevole V1 Voir le message
    Mais je ne suis pas sûr que tu n'as pas un peu "joué avec mes pieds" (expression belge ?) en ne me donnant pas cette dernière info tout de suite !
    Absolument pas. Etant donné que ça m'a fait perdre du temps à moi aussi, il aurait été masochiste de procéder ainsi.
    Puisque tu aimes les citations, en voici une de Arthur Conan Doyle : Lorsque vous avez éliminé l'impossible, ce qui reste, si improbable soit-il, est nécessairement la vérité.
    Pour le débugage, on suit cette règle : on élimine les problèmes les un après les autres. Une fois les premiers problèmes éliminés, il arrive que germe l'idée qui permet de régler les autres.

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

Discussions similaires

  1. Caractères spéciaux dans une chaîne de caractères
    Par arnest dans le forum QlikView
    Réponses: 0
    Dernier message: 07/12/2017, 20h57
  2. Réponses: 2
    Dernier message: 11/01/2016, 15h59
  3. Caractères spéciaux dans une chaîne
    Par melleb dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 18/04/2013, 12h12
  4. Réponses: 2
    Dernier message: 13/06/2008, 10h21
  5. Caractères spéciaux dans une chaîne
    Par Eric93 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 20/12/2007, 13h48

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