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 :

[E-03] Trouver des accents


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Par défaut [E-03] Trouver des accents
    Bonjour,

    Je voudrais valider si des accents sont présents dans un fichier text.

    J'utilise cette métode pour optenir mon fichier dans une variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Command1_Click()
     Dim FF As Integer: FF = FreeFile
       Open "d:\essai.txt" For Input As #FF        toto = Input(LOF(FF), #FF)
       Close #FF
       MsgBox toto ' si tu veux le voir (pas nécessaire)
       MsgBox toto = UCase(toto) ' et là (ce que tu attends) : True = pas de minuscules. False = contient des minuscules
    End Sub
    Avec cette métode je vérifie si des minuscules sont dans le fichier. Il reste à vérifier si des accents s'y trouvent (autant les caractères accentués (è) que les accents seuls (` => accent grave sans e, pas l'apostrophe)).

    Je pensais à lister les accents dans un tableau et faire une boucle (sur le tableau) avec une recherche dans ma variable contenant le fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    tableau (10)
    tableau (1) = é
    tableau (2) = è
    tableau (3) = `
    ...
     
    pour 1 à 10
    Recherche dans toto mon tableau (i)
    Si vous avez une métode plus simple, elle serait la bienvenue, sinon, si vous avez des commentaires, faites moi en part!

    Merci!

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    Toi, tu te méfies du cirque éventuel des données que tu as, hein ...

    Bon...on y va, dans ce tas-là ?
    Allons-y :

    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
    Private Sub Command1_Click()
     Dim FF As Integer: FF = FreeFile
     Open "d:\essai.txt" For Input As #FF
        toto = Input(LOF(FF), #FF)
     Close #FF
     MsgBox "j'ai trouvé " & cherchons_si_accents(toto) & " accent(s)"
    End Sub
     
    Private Function cherchons_si_accents(ByVal t1 As String) As Integer
      Dim lecirque As String, I As Integer
      lecirque = "ÀàÁáÂâÃãÄäÅåÇçÈèÉéÊêËëÌìÍíÎîÏïÐðÑñÒòÓóÔôÕõÖöØøÙùÚúÛûÜüÝýÞþ"
      Dim clown() As Byte
      clown = StrConv(t1, vbFromUnicode)
      For I = 0 To UBound(clown)
        If clown(I) > 122 Then
          If InStr(lecirque, Chr(clown(I))) Then
            cherchons_si_accents = cherchons_si_accents + 1
          End If
        End If
      Next
    End Function
    Maintenant, si tu veux "la totale" (accents et minuscules), je suis prêt à appeler le mime Marceau également...
    Tu dis ...

  3. #3
    Membre chevronné Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Par défaut
    À regarder comme ça, je crois bien que c'est ça que j'ai besoin.

    Mais comme pour le cas du majuscule, je vais te demander de petites prcésisions...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim clown() As Byte
      clown = StrConv(t1, vbFromUnicode)
      For I = 0 To UBound(clown)
    Je vois ceci comme : On met dans clown le string (fichier) qui le sépare en tableau automatiquement avec StrConv(t1, vbFromUnicode), est-ce bien ça?

    HaHA, je vois, tu fais l'inverse de moi, j'utilisais chaque "caractère accentué" et vérifiais s'il était dans mon fichier. Toi tu prends chaque caractère du fichier et vérifier s'il fait parti des caractères du cirque!!!

    Et pour le mime, je le connais déja, et il travaille déja dans mon fichier. À moins que tu ailles une idée de manager de cirque pour tout mettre en même temps, je peux toujours utiliser toto = Ucase(toto) et ensuite partir la comparaison des accents.

    Edit : Je dois le dire (écrire) je n'ai pas souvent autant rie en lisant en code! J'aime le "theme" du code!!!

    Edit2 : Est-ce que tu les a écrit ou il a un façon de les lister :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lecirque = "ÀàÁáÂâÃãÄäÅåÇçÈèÉéÊêËëÌìÍíÎîÏïÐðÑñÒòÓóÔôÕõÖöØøÙùÚúÛûÜüÝýÞþ"

  4. #4
    Membre chevronné Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Par défaut
    Je ris un peu moins la, parce que je dois gérer les accents sans lettre "^" "`" qui on le code 94 et 96 mais ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        If clown(I) > 122 Then      If InStr(lecirque, Chr(clown(I))) Then
            cherchons_si_accents = cherchons_si_accents + 1
          End If
        End If
    cérifie les caractères en haut du code 122. Rajouter un OR If clown(I) > 94 OR If clown(I) > 96, du moins, si je ne me trompe pas!

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bien,

    On va d'abord faire "la totale", ce qui évitera deux boucles, puisque là, on a bien été obligé de passer par une boucle ...

    Te te donnerai tes explications ensuite, mais par MP, pour éviter d'alourdir trop ici (longues explications nécessaires), et ce d'autant que, pour "la totale", je vais en plus faire appel à une structure...

    Prêt ?
    Vamonos :

    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
    31
    Option Explicit
    Private Type mime_marceau
      minuscules As Integer
      accents As Integer
    End Type
     
    Private Sub Command1_Click()
     Dim toto As String, FF As Integer: FF = FreeFile
     Open "d:\essai.txt" For Input As #FF '<<<=== ici : ton chemin à toi, bien sûr..
        toto = Input(LOF(FF), #FF)
     Close #FF
     MsgBox "j'ai trouvé " & vbCrLf & _
     cherchons_si_accents(toto).minuscules & " minuscule(s) non accentuée(s)" & vbCrLf & "et" & _
     vbCrLf & cherchons_si_accents(toto).accents & " accent(s) (minuscules ou majuscules)"
    End Sub
     
    Private Function cherchons_si_accents(ByVal t1 As String) As mime_marceau
      Dim lecirque As String, I As Integer, clown() As Byte, quoi As Integer
      lecirque = "ÀàÁáÂâÃãÄäÅåÇçÈèÉéÊêËëÌìÍíÎîÏïÐðÑñÒòÓóÔôÕõÖöØøÙùÚúÛûÜüÝýÞþ"
      clown = StrConv(t1, vbFromUnicode)
      For I = 0 To UBound(clown)
        quoi = clown(I)
        If quoi > 122 Then
          If InStr(lecirque, Chr(quoi)) Then
            cherchons_si_accents.accents = cherchons_si_accents.accents + 1
          End If
        ElseIf Chr(quoi) <> UCase(Chr(quoi)) Then
          cherchons_si_accents.minuscules = cherchons_si_accents.minuscules + 1
        End If
      Next
    End Function
    Que tal ?

  6. #6
    Membre chevronné Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Par défaut
    Wow, excellent, je n'ai plus rien à redire!

    en passant, allons en espagnol ce n'est pas plustot Vabamos?
    qui se prononce vaamos?

    Si jamais il a quelque chose apres le mp, je réouvrerai ce poste.

    Un énorme merci!

  7. #7
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    EDIT :
    J'ai trouvé le moyen d'expliquer (en commentant) sans faire un "roman" ..
    Voici donc (pour ceux que la chose intéresse) un extrait du MP adressé à notre ami :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    Option Explicit
    'ici nous définissons une variable du type défini par l'utilisateur
    ' c'est ce que l'on appelle une structure
    'une structure peut comporter un ou plusieurs éléments,
    'chacun d'entre eux correspondant à un type de variable (de son choix).
    Private Type mime_marceau
    'ici, donc, une structure composée de 2 éléments (minuscules et accents), chacun de type unteger
    'puisqu'ils sont destinés à recevoir un entier.
      minuscules As Integer
      accents As Integer
    End Type
    Private Sub Command1_Click()
     ' je ne reviendrai pas sur la lecture "en bloc" du texte de ton fichier,
     'puisque j'ai déjà eu l'occasion de te l'exposer
     Dim toto As String, FF As Integer: FF = FreeFile
     Open "d:\essai.txt" For Input As #FF
        toto = Input(LOF(FF), #FF)
     Close #FF
     '=============================================
     ' dans ce qui suit, je me réfère à chacun des 2 éléments de la structure
     ' puisque j'ai typé ma fonction cherchons_si_accents comme la structure mime_marceau
     ' en la déclarant Private Function cherchons_si_accents(ByVal t1 As String) As mime_marceau
     MsgBox "j'ai trouvé " & vbCrLf & _
     cherchons_si_accents(toto).minuscules & " minuscule(s) non accentuée(s)" & vbCrLf & "et" & _
     vbCrLf & cherchons_si_accents(toto).accents & " accent(s) (minuscules ou majuscules)"
    End Sub
     
    Private Function cherchons_si_accents(ByVal t1 As String) As mime_marceau
      ' en déclarant clown() as byte, je déclare un tableau d'octets
      Dim lecirque As String, I As Integer, clown() As Byte, quoi As Integer
      lecirque = "ÀàÁáÂâÃãÄäÅåÇçÈèÉéÊêËëÌìÍíÎîÏïÐðÑñÒòÓóÔôÕõÖöØøÙùÚúÛûÜüÝýÞþ"
      ' ce qui suit a pour fonction celle d'alimenter mon tableau d'octets clown
      ' chaque élément du tableau clown sera, dans l'ordre, la valeur ascii de la lettre ayant
      ' le "rang" X, en commençant par la 1ère et jusqu'à la dernière.
      ' à noter que (mais avec plus de lenteur) on aurait pu utiliser une boucle
      'for i = 1 to Len(t1)
      ' et déterminer, grâce à la fonction Mid, chaque caractère, 1 par 1
      '
      clown = StrConv(t1, vbFromUnicode)
      For I = 0 To UBound(clown)
        quoi = clown(I)
        ' j'aurais pu commencer à plus grand que 122 (valeur ascii de la lettre z) mais
        ' ai préféré rester dans le "safe-side"
        If quoi > 122 Then ' si donc > que ascii de la lettre z
          ' et qu'en plus, caractère présent dans ma chaîne lecirque, alors
          ' en te rappelant que la fonction Instr relève la position d'une occurance de chaîne
          ' dans une autre chaine.
          ' si cette position = 0 : pas d'occurrence et on n'en parle plus
          ' si # 0 : il y a une occurrence
          ' il se trouve que la valeur de True est toute valeur différente de 0
          ' on peut donc écrire  If InStr(lecirque, Chr(quoi)) sans nécessairement avoir
          ' à préciser  If InStr(lecirque, Chr(quoi)) = True
          ' Enfin, et parce qu'à ce niveau nous avons à comparer des chaînes et non leur valeur
          'ASCII, nous utilisons la fonction Chr (Chr(65), par exemple, correspond à la lettre A, Chr(66)
          ' à la lettre B, etc...)
          If InStr(lecirque, Chr(quoi)) Then
            ' et nous incrémentons alors d'une unité l'élément accents de la structure retournée par la fonction
            cherchons_si_accents.accents = cherchons_si_accents.accents + 1
          End If
        ElseIf Chr(quoi) <> UCase(Chr(quoi)) Then
          ' si pas dans le cas précédent, nous faisons, pour chaque caractère analysé (puisque nous sommes
          ' dans une boucle, la comparaison de ce qu'il est et de ce qu'il serait en majuscule
          ' tu connais déjà le principe : si défférent : le caractère était donc en minuscule
          ' et nous incrémentons alors d'une unité l'élément minuscules de la structure retournée par la fonction
          cherchons_si_accents.minuscules = cherchons_si_accents.minuscules + 1
        End If
      Next
    End Function

Discussions similaires

  1. Ou trouver des tut pour Dx9 en c#?
    Par sen dans le forum DirectX
    Réponses: 3
    Dernier message: 24/02/2004, 14h44
  2. Réponses: 11
    Dernier message: 16/12/2003, 19h58
  3. Réponses: 6
    Dernier message: 13/09/2003, 12h42
  4. [Kylix] Trouver des composants pour Kylix 3
    Par busy999 dans le forum EDI
    Réponses: 2
    Dernier message: 17/02/2003, 14h01
  5. [SWT] Un bon coin ou trouver des infos pratik
    Par yolepro dans le forum SWT/JFace
    Réponses: 8
    Dernier message: 04/12/2002, 14h08

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