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 :

Problme avec opérateur OR [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Superpat9999
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2003
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 438
    Par défaut Problme avec opérateur OR
    Bonjour,
    J'ai un problème avec la fonction OR :
    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
    Function SupprimeNumerotationLignes(Wb As Workbook, Mdl As String, NomMacro As String)
        Dim Debut As Integer, Fin As Integer, i As Integer
        Dim strVar As String
     
        With Wb.VBProject.VBComponents(Mdl).CodeModule
            Debut = .ProcStartLine(NomMacro, vbext_pk_Proc)
            Fin = .ProcCountLines(NomMacro, vbext_pk_Proc) + Debut
            'Debug.Print "debut " & Debut & " fin " & Fin
            For i = Debut To Fin - 1
                'Resultat = Resultat & .Lines(i, 1) & vbCr
                strVar = .Lines(i, 1)
                If Mid(strVar, 1) <> "ErrHandle_1:" Then
                    strVar = Mid(strVar, 7)
                    .ReplaceLine i, strVar
                Else
                    Debug.Print strVar
                End If
            Next
        End With
    End Function
    Tout se passe correctement, le résultat est "ErrHandle_1:". Lorsque je demande le test sur 2 mots en écrivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                If Mid(strVar, 1) <> "ErrHandle_1:" Or Mid(strVar, 1) <> "ErrHandle:" Then
    Le mot est tronqué et devient "dle:".
    Pourriez-vous me dire quel est l'erreur dans la formulation ?
    Merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Je pense qu'il faudrait faire un ET plutôt qu'un OU et tester une égalité.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Mid(strVar, 1) = "ErrHandle_1:" and Mid(strVar, 1) = "ErrHandle:" Then
    Cdlt

  3. #3
    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
    A mon époque, en 1ère, on apprenait la logique en mathématiques.
    Entre autre, on apprenait que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Non(A Ou B) = (Non A) Et (Non B)
    Si tu réfléchis, tu comprendras que ta variable ne peut pas être égale à deux chaines elles-mêmes différentes.
    Donc si la variable est égale à une des chaines (1er argument Faux), elle sera forcément différente de l'autre (second argument Vrai), à moins qu'elle ne soit différentes aux deux chaines (deux arguments Vrai).
    Avec un "Ou" entre les deux, ça produit dans tous ces cas une condition Vrai.

    Bref, la condition de ton If ne peut jamais être Faux.

    Petite remarque : pour ma curiosité personnelle, pourrais-tu expliquer pourquoi tu utilises la fonction Mid ?
    Je ne comprends vraiment pas à quoi elle peut servir avec 1 en premier argument et rien en second. En gros, ça signifie que dans ta chaine de caractère, tu récupère tout ce qui se trouve entre le premier et le dernier caractères inclus, bref, la totalité de la chaine.

    Citation Envoyé par ARTURO83 Voir le message
    Je pense qu'il faudrait faire un ET plutôt qu'un OU et tester une égalité.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Mid(strVar, 1) = "ErrHandle_1:" and Mid(strVar, 1) = "ErrHandle:" Then
    Il faudrait soit transformer le Or en And, soit transformer les <> en =.
    Mais faire les deux, c'est un peu comme prendre deux fois l'opposé d'un nombre : on retrouve le même résultat.
    Dans la condition que tu as écrite, jamais la variable ne pourra être simultanément égale aux deux chaînes. Avec un And entre les deux, la condition sera donc toujours Faux puisse qu'au moins un des éléments sera faux.

  4. #4
    Membre éclairé Avatar de Superpat9999
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2003
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 438
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Petite remarque : pour ma curiosité personnelle, pourrais-tu expliquer pourquoi tu utilises la fonction Mid ?
    Je ne comprends vraiment pas à quoi elle peut servir avec 1 en premier argument et rien en second. En gros, ça signifie que dans ta chaine de caractère, tu récupère tout ce qui se trouve entre le premier et le dernier caractères inclus, bref, la totalité de la chaine.
    Merci, exact, ne sert à rien.
    J'ai trouvé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                If Mid(strVar, 1, 9) <> "ErrHandle" Then
                    strVar = Mid(strVar, 7)
                    .ReplaceLine i, strVar
                End If
    Merci de vos aides qui m'ont aiguillées.

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

Discussions similaires

  1. Ecriture Classeur fermé problème avec opérateurs logiques VRAI/FAUX
    Par ericdev67 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 04/03/2014, 19h59
  2. Problème avec opérateur LIKE
    Par sibama dans le forum VB.NET
    Réponses: 3
    Dernier message: 19/06/2011, 03h17
  3. [MySQL] Problème avec opérateur de condition
    Par Dhumkazaar dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 02/03/2007, 18h41
  4. Problème avec les opérateurs
    Par jules_lenoir dans le forum Langage
    Réponses: 4
    Dernier message: 26/01/2006, 16h56
  5. [Opérateur] problème avec 'ou' (||)
    Par clairette dans le forum Langage
    Réponses: 7
    Dernier message: 04/07/2005, 12h33

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