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 :

Toutes les conditions de mon code ne fonctionnent [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2011
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2011
    Messages : 571
    Points : 93
    Points
    93
    Par défaut Toutes les conditions de mon code ne fonctionnent
    Salut le forum

    J'ai crée le code ci-dessous pour vérifier certaines conditions.
    Mais je constate qu'il n'ya que la 1ère et la troisième conditions qui fonctionnent bien.
    Quand bien même les conditions de la 2è conditions sont reunion, le résultat ne donne pas. Je ne sais pas pourquoi. C'est le résultat de la 1ère condition qui s'affiche et non celui de la 2ème.
    Merci de m'éclairer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Calcul3()
    If Val(Me.TextBox9) >= 1 And Val(Me.TextBox11) <= 350000 Then
    Me.TextBox15 = "DZ"
    Me.TextBox16 = "Analyste"
    ElseIf Val(Me.TextBox9) >= 1 And Val(Me.TextBox11) > 350000 And Val(Me.TextBox11) <= 750000 Then
    Me.TextBox15 = "DR"
    Me.TextBox16 = "RAR"
    Else
    Me.TextBox15 = "DGAE"
    Me.TextBox16 = "RPR"
    End If
    End Sub

  2. #2
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    Si un If est valide les Elseif suivants ne sont pas exécutés. Et ton premier test est inclu dans le second qui n'est jamais testé.
    Essaie qq chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Calcul3()
        If Val(Me.TextBox9) >= 1 And Val(Me.TextBox11) <= 350000 Then
            If Val(Me.TextBox11) > 750000 Then
                Me.TextBox15 = "DZ"
                Me.TextBox16 = "Analyste"
            Else
                Me.TextBox15 = "DR"
                Me.TextBox16 = "RAR"
            End If
        Else
            Me.TextBox15 = "DGAE"
            Me.TextBox16 = "RPR"
        End If
    End Sub
    En plus tu gagnes du temps, tu ne fais pas 2 fois les mêmes tests.
    eric

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 766
    Points : 28 625
    Points
    28 625
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    L'exécution du programme au mode pas à pas (Touche raccourci F8) permet de vérifier aisément si notre analyse de procédure est correcte.
    A lire Le débogage sous Visual Basic 6 (1ère partie)
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2011
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2011
    Messages : 571
    Points : 93
    Points
    93
    Par défaut
    Salut eriiic et Philippe

    Merci pour vos solutions.
    Philippe:merci pour le cours que je suis entrain de lire pour bien comprendre.
    eriiic: je teste votre solution mais j'ai omis d'ajouter une précision.
    En effet, la valeur de la textbox11 est généralement négative.
    Il est nécessaire de la ramener en valeur positive afin de pouvoir faire la comparaison.
    Voici ce que j'ai bricolé mais le résultat n'est pas satisfaisant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Calcul3()
        If Val(Me.TextBox9) >= 1 And (Val(Me.TextBox11) * -1) <= 350000 Then
            If (Val(Me.TextBox11) * -1) > 750000 Then
                Me.TextBox15 = "DZ"
                Me.TextBox16 = "Analyste"
            Else
                Me.TextBox15 = "DR"
                Me.TextBox16 = "RAR"
            End If
        Else
            Me.TextBox15 = "DGAE"
            Me.TextBox16 = "RPR"
        End If
    End Sub
    Merci d'apprécier

  5. #5
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Utilise Abs(Val(Me.TextBox11)) pour rendre toujours positif.


    Par contre je n'avais pas lu dans le détail ton code et vu que tu utilisais 2 fois TextBox11
    Il ne peut pas être à la fois <=350000 et >750000
    Revois la logique et l'ordre de tes tests.
    Si tu n'y arrives pas dis en français et en détail ce que tu veux. On ne peut pas deviner à partir de lignes manifestement fausses.

    eric

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 766
    Points : 28 625
    Points
    28 625
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    La valeur contenue dans un contrôle TextBox est de type String.
    Pour la comparer il est donc préférable de la convertir en type numérique ou utiliser la fonction Val.
    S'il faut comparer la valeur absolue (obtenir 20 pour -20), il suffit d'utiliser la fonction Abs
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2011
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2011
    Messages : 571
    Points : 93
    Points
    93
    Par défaut
    Merci pour vos conseils (val et abs) que j'ai bien noté.
    Voici mon besoin que je reformule:
    J'ai par exemple 3 agenst et chaque agent à des pouvoir:
    pour le premier:
    si la valeur de la textbox9 >= 1 et la valeur de la textbox11 <= 350000 voici ce qui doit se produire dans textbox15 et textbox16:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Me.TextBox15 = "DZ"
    Me.TextBox16 = "Analyste"
    2è cas:
    Il faut que la valeur de la textbox9 >= 1 et que la valeur de la textbox11 soit comprise entre 350000 et 750000 (350000>Textbox11<= 750000). si cette condition est vérifiée, voici ce qui doit se produire textbox15 et textbox16:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Me.TextBox15 = "DR"
    Me.TextBox16 = "RAR"
    3è agent: si les 2 premières conditions ne sont pas vérifiées, voici ce qui doit se passer textbox15 et textbox16:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Me.TextBox15 = "DGAE"
    Me.TextBox16 = "RPR"

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 766
    Points : 28 625
    Points
    28 625
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si tu arrives à l'exprimer, il me semble que tu peux le programmer
    Voici un exemple pour ton premier cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     If Val(TextBox9) >= 1 And Val(TextBox11) <= 350000 Then
        TextBox15 = "DZ": TextBox16 = "Analyste"
     End If
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  9. #9
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2011
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2011
    Messages : 571
    Points : 93
    Points
    93
    Par défaut
    C'est ce que j'ai essayé de traduire dans mon post #1 et qui ne fonctionne pas bien.
    J'ai pas encore bien assimilé les notions sur la compréhension et le déblocage des erreurs donc si vous pouvez revoir et apprécier mon code du post #1.
    Merci pour vos riches contributions

  10. #10
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Dans ce cas ce que tu avais mis au début aurait dû fonctionner
    Sans doute le abs() qui te manquait.
    Dans le elseif And Val(Me.TextBox11) > 350000 est superflu puisque tu sais que non (déjà testé au-dessus)

    Si toujours pb et pas de fichier pour le forum fait comme philippe à dit : pas à pas et contrôle la valeur des variables et expressions.
    eric

  11. #11
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2011
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2011
    Messages : 571
    Points : 93
    Points
    93
    Par défaut
    Salut eriiic

    J'ai gardé l'ancien code et ajouter abs et ca fonctionne.
    Merci à vous et Philippe.

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

Discussions similaires

  1. supprimer toutes les balises d'un code html (regex?)
    Par le y@m's dans le forum Langage
    Réponses: 5
    Dernier message: 21/01/2014, 10h08
  2. [MySQL] Mon code ne fonctionne pas correctement
    Par bebas dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 24/02/2007, 13h27
  3. Les liens de mon menu ne fonctionnent pas
    Par macapa dans le forum Dreamweaver
    Réponses: 3
    Dernier message: 03/01/2007, 18h43
  4. Lister tout les objets de mon prog c'est possible?
    Par korntex5 dans le forum Delphi
    Réponses: 9
    Dernier message: 24/10/2006, 11h06
  5. Réponses: 3
    Dernier message: 19/08/2006, 19h38

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