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 :

[DEB] If Then Else [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2012
    Messages : 112
    Par défaut [DEB] If Then Else
    Bonjour à tous,
    Malgré la lecture de de la doc je pédale dans la semoule pour les imbrications.Pour info je teste la position de cellules les unes par rapport aux autres mais là n'est pas le pb.

    Mon problème est le Else msgBox "bonsoir" Il devrait être atteint en dernier ressort , lorsqu' aucune des conditions précédentes n'est remplie. Or il est squizzé systématiquement comme s'il faisait parti du dernier elseif.Comment devrais-je l'écrire correctement.
    En vous remerciant de m'avoir consacré de votre temps

    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
    For i = 1 To p - 1
     
      'Teste s'il sont sur la ^m ligne
       If Ro(i) = Ro(i + 1) Then
            MCo = ((Abs(Co(i)) Mod (Abs(Co(i + 1))))) - 16
            If Abs(Co(i + 1) - Co(i)) < 2 Or MCo < 2 Then MsgBox "Bonjour1"
     
          'Teste s'ils sont sur la ^m colonne
     
       ElseIf Co(i) = Co(i + 1) Then
                MRo = (Abs(Ro(i)) Mod (Abs(Ro(i + 1) - Ro(i)))) - 2 
     
                If Abs(Ro(i + 1) - Ro(i)) < 2 Or MRo < 2 Then MsgBox "Bonjour2"
     
          'il ne sont pas sur la ^m ligne et la ^m colonne
       ElseIf Co(i) <> Co(i + 1) And Ro(i) <> Ro(i + 1) Then
            MCo = ((Abs(Co(i)) Mod (Abs(Co(i + 1))))) - 16
            MRo = (Abs(Ro(i)) Mod (Abs(Ro(i + 1)))) - 2
           If Abs(Ro(i + 1) - Ro(i)) < 2 Or Abs(Co(i + 1) - Co(i)) < 2 Or MRo < 2 Or MCo < 2 Then
           MsgBox "Bonjour3"
          End If
     
    'Aucune condition n'est remplie
       Else
          MsgBox "Bonsoir"
     
      End If
     
    Next i
     
     
     
    End Sub

  2. #2
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour Torquemada, bonjour le forum,

    Peut-être 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    For i = 1 To p - 1
        'Teste s'il sont sur la ^m ligne
        If Ro(i) = Ro(i + 1) Then
            MCo = ((Abs(Co(i)) Mod (Abs(Co(i + 1))))) - 16
            If Abs(Co(i + 1) - Co(i)) < 2 Or MCo < 2 Then MsgBox "Bonjour1"
            Exit Sub
        End If
        'Teste s'ils sont sur la ^m colonne
        If Co(i) = Co(i + 1) Then
            MRo = (Abs(Ro(i)) Mod (Abs(Ro(i + 1) - Ro(i)))) - 2
            If Abs(Ro(i + 1) - Ro(i)) < 2 Or MRo < 2 Then MsgBox "Bonjour2"
            Exit Sub
        End If
        'il ne sont pas sur la ^m ligne et la ^m colonne
        If Co(i) <> Co(i + 1) And Ro(i) <> Ro(i + 1) Then
            MCo = ((Abs(Co(i)) Mod (Abs(Co(i + 1))))) - 16
            MRo = (Abs(Ro(i)) Mod (Abs(Ro(i + 1)))) - 2
            If Abs(Ro(i + 1) - Ro(i)) < 2 Or Abs(Co(i + 1) - Co(i)) < 2 Or MRo < 2 Or MCo < 2 Then MsgBox "Bonjour3"
            Exit Sub
        End If
        'Aucune condition n'est remplie
        MsgBox "Bonsoir"
    Next i
    ou, en reprenant ton code :
    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
    For i = 1 To p - 1
        'Teste s'il sont sur la ^m ligne
        If Ro(i) = Ro(i + 1) Then
            MCo = ((Abs(Co(i)) Mod (Abs(Co(i + 1))))) - 16
            If Abs(Co(i + 1) - Co(i)) < 2 Or MCo < 2 Then MsgBox "Bonjour1"
            Exit Sub
        'Teste s'ils sont sur la ^m colonne
        ElseIf Co(i) = Co(i + 1) Then
            MRo = (Abs(Ro(i)) Mod (Abs(Ro(i + 1) - Ro(i)))) - 2
            If Abs(Ro(i + 1) - Ro(i)) < 2 Or MRo < 2 Then MsgBox "Bonjour2"
            Exit Sub
        'il ne sont pas sur la ^m ligne et la ^m colonne
        ElseIf Co(i) <> Co(i + 1) And Ro(i) <> Ro(i + 1) Then
            MCo = ((Abs(Co(i)) Mod (Abs(Co(i + 1))))) - 16
            MRo = (Abs(Ro(i)) Mod (Abs(Ro(i + 1)))) - 2
            If Abs(Ro(i + 1) - Ro(i)) < 2 Or Abs(Co(i + 1) - Co(i)) < 2 Or MRo < 2 Or MCo < 2 Then MsgBox "Bonjour3"
            Exit Sub
        Else
            'Aucune condition n'est remplie
            MsgBox "Bonsoir"
        End If
    Next i
    End Sub

  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




    Bonjour, bonjour !

    Quand on se mélange dans les If, voir alors du côté de l'instruction Select Case


  4. #4
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour le fil, bonjour le forum,

    Dans le cas de Torquemada le Select Case ne me semble pas le plus approprié car le test ne se fait pas sur les mêmes conditions...

  5. #5
    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 Thautheme Voir le message
    Dans le cas de Torquemada le Select Case ne me semble pas le plus approprié car le test ne se fait pas sur les mêmes conditions...
    Il y a une solution pour contourner ce problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Select Case True
       [Case condition n
          [statements-n]] ...
       [Case Else
          [elsestatements]]
    End Select

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2012
    Messages : 112
    Par défaut
    Bonjour à tous et merci à ceux qui m'ont répondu.
    En fait ce que je croyais être une erreur de syntaxe est en fait une erreur de logique.La première version du code est du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    for i= 1 to p
    if Condition1 then
          if condition 2 then
            msgbox Bonjour1
          End if
    Else if Condition3 then
          if condition 4 then
           msgbox Bonjour2
           endif
    Else msgbox Bonsoir
    Endif
    Nexti
    Après réflexion il est clair que si la Condition 1 est vrai mais que la condition 2 est fausse le programme sautera directement à Next i et non pas à Else if Condition3 .

    Une solution serait la structure suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    for i=1to  p
    if Condition1 then
      if condition 2 then
            msgbox Bonjour1
            ElseIf Condition3 then
                   if condition 4 then
                   msgbox Bonjour2
                  Elseif Msgbox Bonsoir
          Endif
       Endif
    Endif
    Nexti
    Merci à tous

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

Discussions similaires

  1. [Débutant] if...then...else
    Par jive dans le forum ASP
    Réponses: 5
    Dernier message: 16/09/2005, 14h11
  2. [TagLib] Structure if then else
    Par mush_H dans le forum Taglibs
    Réponses: 5
    Dernier message: 19/07/2005, 15h31
  3. If Then Else
    Par Piout dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 24/02/2005, 16h09
  4. IF THEN ELSE imbriqués
    Par nuke_y dans le forum Oracle
    Réponses: 2
    Dernier message: 15/11/2004, 14h57
  5. [CR 7] [débutante] pb avec if then else
    Par xs_nady dans le forum Formules
    Réponses: 8
    Dernier message: 28/05/2004, 15h36

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