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 la fonction InStr [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Août 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2014
    Messages : 4
    Par défaut Problème avec la fonction InStr
    Bonjour,

    je suis nouveau à VBA et je suis à compléter un fichier qui utilise de multiples macros.
    J'ai appris plusieurs trucs et astuces en faisant des recherches ces dernières semaines à mesure que j'avance dans la programmation de mon fichier.

    Tout fonctionne A1 sauf une partie de mon code. Et ça ne devrait pas être compliqué pourtant...
    À différents endroits, j'utilise "InStr" pour trouver la position de certains chiffres dans les phrases affichées et je mets ces chiffres en gras et bleu pour mettre en évidence.

    J'ai ce code à plusieurs endroits pour différentes phrases et ça fonctionne bien partout sauf pour une phrase et je n'arrive pas à savoir pourquoi !

    Voici la partie de code fautive...Désolé si c'est long...

    Toute aide ou conseil serait grandement apprécié.

    Philippe

    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
     
    'Déclarer variable
    Dim NOMBRE_RAD As Integer
    Dim NOMBRE_OBS As Integer
    Dim TOTAL_JOURN_POSSIBLE As Integer
    Dim TOTAL_SATISFAISANT As Integer
     
    'Insérer valeur de nombre de RAD et d'observations dans la bonne cellule de la feuille Stats
        Worksheets("Stats").Range("B63").Formula = "=COUNTIF('Sommaire journalisation'!C8:L22,""*RAD*"")"
        Worksheets("Stats").Range("B64").Formula = "=COUNTIF('Sommaire journalisation'!C8:L22,""*Observation*"")"
     
    'Donner les valeurs aux variables
        NOMBRE_RAD = Sheets("Stats").Range("B63").Value
        NOMBRE_OBS = Sheets("Stats").Range("B64").Value
        TOTAL_JOURN_POSSIBLE = Sheets("Stats").Range("B67").Value
        TOTAL_SATISFAISANT = Sheets("Stats").Range("B69").Value
     
    'Déterminer longueur des chiffres à donner
     
        'Déterminer longueur du nombre de RAD
        Dim LONGUEUR_NOMBRE_RAD As Long
        LONGUEUR_NOMBRE_RAD = Len(NOMBRE_RAD)
     
        'Déterminer longueur du nombre d'observations
        Dim LONGUEUR_NOMBRE_OBS As Long
        LONGUEUR_NOMBRE_OBS = Len(NOMBRE_OBS)
     
        'Déterminer longueur du nombre de journaux total possible
        Dim LONGUEUR_TOTAL_JOURN_POSSIBLE As Long
        LONGUEUR_TOTAL_JOURN_POSSIBLE = Len(TOTAL_JOURN_POSSIBLE)
     
        'Déterminer longueur du nbre de conclusions positives
        Dim LONGUEUR_TOTAL_SATISFAISANT As Long
        LONGUEUR_TOTAL_SATISFAISANT = Len(TOTAL_SATISFAISANT)
     
    'Déterminer position des chiffres à donner
     
        'Déterminer position du nombre total de journaux possible
        Dim P_J_POSSIBLE As Long
        P_J_POSSIBLE = InStr("Sur une possibilité totale de " & TOTAL_JOURN_POSSIBLE & " journaux, " & TOTAL_SATISFAISANT & " journaux correspondent à nos attentes ainsi que " & NOMBRE_OBS & " points d'observation potentiels et " & NOMBRE_RAD & " points de RAD potentiels.", TOTAL_JOURN_POSSIBLE)
     
        'Déterminer position du nombre de conclusions positives
        Dim P_SAT As Long
        P_SAT = InStr("Sur une possibilité totale de " & TOTAL_JOURN_POSSIBLE & " journaux, " & TOTAL_SATISFAISANT & " journaux correspondent à nos attentes ainsi que " & NOMBRE_OBS & " points d'observation potentiels et " & NOMBRE_RAD & " points de RAD potentiels.", TOTAL_SATISFAISANT)
     
        'Déterminer position du nombre d'observations
        Dim P_OBS As Long
        P_OBS = InStr("Sur une possibilité totale de " & TOTAL_JOURN_POSSIBLE & " journaux, " & TOTAL_SATISFAISANT & " journaux correspondent à nos attentes ainsi que " & NOMBRE_OBS & " points d'observation potentiels et " & NOMBRE_RAD & " points de RAD potentiels.", NOMBRE_OBS)
     
        'Déterminer position du nombre de RAD
        Dim P_RAD As Long
        P_RAD = InStr("Sur une possibilité totale de " & TOTAL_JOURN_POSSIBLE & " journaux, " & TOTAL_SATISFAISANT & " journaux correspondent à nos attentes ainsi que " & NOMBRE_OBS & " points d'observation potentiels et " & NOMBRE_RAD & " points de RAD potentiels.", NOMBRE_RAD)
     
     
        'Pour fins de tests, afficher positions des chiffres
        Range("A19").Value = P_J_POSSIBLE
        Range("B19").Value = P_SAT
        Range("C19").Value = P_OBS
        Range("D19").Value = P_RAD
     
    'Écrire phrase explicative finale
        Range("A18").Value = "Sur une possibilité totale de " & TOTAL_JOURN_POSSIBLE & " journaux, " & TOTAL_SATISFAISANT & " journaux correspondent à nos attentes ainsi que " & NOMBRE_OBS & " points d'observation potentiels et " & NOMBRE_RAD & " points de RAD potentiels."
     
    'Mettre en évidence les chiffres (bleu et gras)
     
        Range("A18").Characters(P_J_POSSIBLE, LONGUEUR_TOTAL_JOURN_POSSIBLE).Font.Bold = True
        Range("A18").Characters(P_J_POSSIBLE, LONGUEUR_TOTAL_JOURN_POSSIBLE).Font.Color = RGB(0, 0, 255)
     
        Range("A18").Characters(P_SAT, LONGUEUR_TOTAL_SATISFAISANT).Font.Bold = True
        Range("A18").Characters(P_SAT, LONGUEUR_TOTAL_SATISFAISANT).Font.Color = RGB(0, 0, 255)
     
        Range("A18").Characters(P_OBS, LONGUEUR_NOMBRE_OBS).Font.Bold = True
        Range("A18").Characters(P_OBS, LONGUEUR_NOMBRE_OBS).Font.Color = RGB(0, 0, 255)
     
        Range("A18").Characters(P_RAD, LONGUEUR_NOMBRE_RAD).Font.Bold = True
        Range("A18").Characters(P_RAD, LONGUEUR_NOMBRE_RAD).Font.Color = RGB(0, 0, 255)

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonjour,

    Tu as oublié de dire ou étais ton problème .!!

  3. #3
    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





    Réponse identique à cette discussion





    _________________________________________________________________________________________________
    Question bien formulée, solution assurée ! (Robert Durupt)

  4. #4
    Membre à l'essai
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Août 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2014
    Messages : 4
    Par défaut
    Désolé, j'ai oublié le plus important

    Le problème est que les chiffres que je désire mettre en évidence (gras bleu) ne se mettent pas toujours en évidence, tout dépendant du chiffre qui est dans la variable. Ça semble assez aléatoire, je ne comprends pas pourquoi certains (souvent 2 des 4) fonctionnent et d'autres non...

    Je suis sous Excel 2010.

    Pour les règles du forum, désolé j'ai fait le post rapidement avant de quitter le travail.

    Je vais faire attention dans le futur.
    Est-ce que vous désirez que je fasse une modification de mon titre de post?

    Merci pour votre aide précieuse.

    Philippe

  5. #5
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2012
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 564
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par phil_qc Voir le message
    Le problème est que les chiffres que je désire mettre en évidence (gras bleu) ne se mettent pas toujours en évidence, tout dépendant du chiffre qui est dans la variable. Ça semble assez aléatoire, je ne comprends pas pourquoi certains (souvent 2 des 4) fonctionnent et d'autres non...
    Les nombres qui ne sont pas mis en évidence (gras bleu) sont-ils respectivement égaux à l'un des nombres précédemment mis en évidence ?
    Cordialement
    Claude

  6. #6
    Membre à l'essai
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Août 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2014
    Messages : 4
    Par défaut
    Bonjour,

    Oui en effet maintenant que vous le mentionnez, les variables fautives sont toujours égales à l'une des autres valeurs dans mes 4 chiffres...

    Merci à l'avance pour votre aide.

    Philippe

  7. #7
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2012
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 564
    Billets dans le blog
    1
    Par défaut
    Re,
    La syntaxe complête de la fonction Instr est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    InStr(start As Long, chaine_de_référence As String, chaine_cherchée As String, compare As VbCompareMethod)
    avec deux arguments falcutatifs : start et compare (les deux ayant été omis dans l'emploi fait dans la procédure)
    L'argument compare indique le procédé de comparaison et s'il est omis, la comparaison se fait selon le mode vbTextCompare qui ne tient pas compte de la casse.
    L'argument start indique la position où la recherche commence et en cas d'omission, la recherche commence toujours en 1 au début de la chaine de référence dans laquelle se fait la recherche.
    Supposons que , par exemple :
    - les nombres TOTAL_SATISFAISANT et NOMBRE_RAD sont tous les deux égaux , disons à 8,
    - les nombres TOTAL_JOURN_POSSIBLE et NOMBRE_OBS sont des nombres de deux chiffres.
    Appelons la_phrase la variable String définie par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    la_phrase = ("Sur une possibilité totale de " & TOTAL_JOURN_POSSIBLE & " journaux, " & TOTAL_SATISFAISANT & " journaux correspondent à nos attentes ainsi que " 
    & NOMBRE_OBS & " points d'observation potentiels et " & NOMBRE_RAD & " points de RAD potentiels."
    A la ligne 47 de la procédure on a alors en quelque sorte :
    P_SAT = InStr( la_phrase, 8) d'où P_SAT = 44 ce qui est bien le résultat attendu
    Mais à la ligne 59 de la procédure, on a encore :
    P_RAD = InStr( la_phrase, 8) d'où P_RAD = 44 mais là, on attendait plutôt la position du deuxième 8 dans la_phrase soit 94.
    Le deuxième 8 de la chaine la_phrase ne sera donc pas mis en gras bleu par les instructions des lignes 76 et 77.
    Au moins deux solutions possibles :
    - Utiliser la fonction Instr en précisant l'argument start lorsqu'il s'agit de déterminer P_SAT , P_OBS et P_RAD.
    - Déterminer P_J_POSSIBLE , P_SAT , P_OBS et P_RAD sans utiliser la fonction Instr mais en additionnant les "longueurs" des différents éléments de la chaine la_phrase.
    Cordialement
    Claude

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

Discussions similaires

  1. Problème avec une fonction date.
    Par kmayoyota dans le forum ASP
    Réponses: 8
    Dernier message: 09/09/2004, 12h33
  2. Problème avec la fonction findfirst ()
    Par Angelico dans le forum Windows
    Réponses: 3
    Dernier message: 05/08/2004, 20h40
  3. [Requete SQL en VBA] Problème avec la fonction FLOOR
    Par zubral dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/07/2004, 13h24
  4. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  5. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04

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