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 :

VBA, Excel If, ElseIf ,then


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut VBA, Excel If, ElseIf ,then
    Bonjour!

    Je n'arrive pas à imbriquer plusieurs conditions au sein d'une sub, voici ce que j'ai fait:

    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
    Private Sub Commandbutton_Click()
    Worksheets("feuil1").Activate
     
    If optionbutton1 = True Then
     
        If ComboBox.listindex = x Then
        label.Caption = Range("A1").Value
     
        If ComboBox.listindex = y Then
        label.Caption = Range("A2").Value
     
        Else
        label.Caption = Range("A3")
     
    End If
    End If
     
    ElseIf optionbutton2 = True Then
     
        If ComboBox.listindex = x Then
        label.Caption = Range("B1").Value
     
        If ComboBox.listindex = y Then
        label.Caption = Range("B2").Value
     
        Else
        label.Caption = Range("B3").Value
    End If
    End If
     
    ElseIf optionbutton3 = True Then
     
        If ComboBox.listindex = x Then
        label.Caption = Range("C1").Value
     
        If ComboBox.listindex = y Then
        label.Caption = Range("C2").Value
     
        Else
        label.Caption = Range("C3").Value
    End If
    End If
     
    End If
    End Sub
    Et voilà, à chaque fois la même valeur apparaît pour chaque optionbutton respectivement: A3, B3 et C3...

    Je vous serais énormément reconnaissant de m'aider!!

    Merci et bonne soirée!!

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut Perrinec
    Donner un code qui ne fait pas ce que tu veux ne sert à rien!
    Donne le but à atteindre! Sans idée de ce qu'on doit faire, comment comprendre le problème ?
    Tu as trois bouton et ?
    A+

  3. #3
    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
    Points : 5 535
    Points
    5 535
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    If optionbutton1 = True Then
       If ComboBox.listindex = x Then
           label.Caption = Range("A1").Value
           If ComboBox.listindex = y Then
              label.Caption = Range("A2").Value
           Else
              label.Caption = Range("A3")
           End If
        End If
    Déjà : en indentant proprement, on voit bien qu'il y a erreur de syntaxe (sans préjudice du reste)...ou alors un code recopié incomplètement
    On se demande enfin à quoi peut bien servir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    label.Caption = Range("A1").Value
    puisque l'on remodifie le caption de ce label quel que soit le cas de figure

    Il n'est par ailleurs pas adroit de nommer "Label" un contrôle Label

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut ucfoutu
    Déjà : en indentant proprement, on voit bien qu'il y a erreur de syntaxe (sans préjudice du reste)...ou alors un code recopié incomplètement
    Je pense plutôt à un code mal compris et "adapter" ligne par ligne, sans tenir compte de la globalité du fonctionnement. Je pense à une erreur de raisonnement, pas de syntaxe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If ComboBox.ListIndex = x Then
            If ComboBox.ListIndex = y Then
    me laisse pantois
    La 2me instruction ne pouvant être exécutée que si la 1er est à VRAI, je subodore que la 2me sera toujours à FAUX (mais je peut me tromper

    Déjà, une déclaration obligatoire des variables amènerait sans doute des erreurs. Renommer ComboBox et Label des contrôles m'interpelle moi aussi.
    Le code me laisse supposer l'utilisation de contrôles issus de la barre d'outils "Boîte à outils contrôle"

    une petite explication du but à atteindre me semble plus nécessaire que de mettre un code qui ne marche pas (j'en ai plein en réserve si on en a besoin)
    Et vu la tournure, un petit fichier d'essai ne serait pas un luxe.

    A+

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 33
    Points : 30
    Points
    30
    Par défaut
    Salut,

    Une autre solution est d'utiliser "Select Case":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    If optionbutton1 = True Then
     
       Select Case  ComboBox.listindex 
                Case x  
                       label.Caption = Range("A1").Value
                Case y 
                       label.Caption = Range("A2").Value 
                Case Else 
                       label.Caption = Range("A3")    
       End Select
     
    End If

  6. #6
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Bonjour,
    Quand on fait cette macro, le case y ne marche pas.
    Quand le case x n'a pas lieu, il semble que la macro va directement au case else, car le résultat qui s'affiche est le même pour le case y et le case else.
    Comment faire pour modifier ça? ça ne doit pas être bien dificile...
    Merci d'avance!

  7. #7
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 33
    Points : 30
    Points
    30
    Par défaut
    Salut Sophiefag,

    Désolé je ne vois pas ce que tu veux dire... Mise a part que pour "Case Else" il y a un ".value" qui manque le reste me semble correct... (je ne l'ai pas essayé dans ce cas precis, il me faudrait le fichier de Perrinec)... Logiquement si "ComboBox.ListIndex" correspond a x il traitera "case x" si c y "Case y" et si ni l'un ni l'autre "Case Else"...

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut Beluga_71, Sophiefag et le forum
    Mise a part que pour "Case Else" il y a un ".value" qui manque
    .Value étant la proprièté par défaut son ommission ne change strictement rien.
    Comment faire pour modifier ça? ça ne doit pas être bien dificile...
    Non, ce n'est pas bien difficile... à condition de savoir ce que tu veux obtenir
    Ton code ne fait pas ce que tu veux, donc je ne peux pas m'appuyer dessus, et ma boule de cristal est en panne => donc fait un effort, ce ne doit pas être bien difficile d'expliquer ce que tu veux obtenir avec ta macro!!!
    A+

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 364
    Points : 350
    Points
    350
    Par défaut
    Bonsoir à tous.

    Dans le fichier joint, il y a 2 macros (pour le bouton de l'USF) : l'une active et concentrée et l'autre à "activer" et détaillée.
    Voilà la première :
    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
     
    Private Sub Commandbutton_Click()
      For i = 1 To 3
        If Controls("OptionButton" & i) = True Then
          Select Case ComboBox.ListIndex
          Case 0
            Label.Caption = Cells(1, i).Value
          Case 1
            Label.Caption = Cells(2, i).Value
          Case Else
            Label.Caption = Cells(3, i).Value
          End Select
        End If
      Next
    End Sub
    Il n'y a plus de IF !
    Fichiers attachés Fichiers attachés

  10. #10
    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
    Points : 5 535
    Points
    5 535
    Par défaut
    Bonjour, Ordonc,

    je n'ai pas ouvert le fichier, mais ce que tu as écrit là :

    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 Commandbutton_Click()
      For i = 1 To 3
        If Controls("OptionButton" & i) = True Then
          Select Case ComboBox.ListIndex
          Case 0
            Label.Caption = Cells(1, i).Value
          Case 1
            Label.Caption = Cells(2, i).Value
          Case Else
            Label.Caption = Cells(3, i).Value
          End Select
        End If
      Next
    End Sub
    Veut tout simplement dire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Commandbutton_Click()
       y = ComboBox.ListIndex
       if y > 1 then y = 2
       For i = 1 To 3
         If Controls("OptionButton" & i) = True Then
            Label.Caption = Cells(y+1, i).Value
         End If
       Next
    End Sub

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 364
    Points : 350
    Points
    350
    Par défaut
    Bonjour à tous,

    Tu as bien résumé la chose ucfoutu !

  12. #12
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Ce qui ne répond pas à la question de Perrinec...
    Et tant qu'il n'a pas expliqué ce qu'il veut obtenir, je pense comme Gorfael qu'une boule de cristal ny suffirait pas.

    Bienvenue sur le forum, Perrinec.
    Comme le soulignent Gorfael et ucfoutu, ton code présente plusieurs erreurs évidentes. Lis ce qu'ils ont mis, tu comprendras.
    Pour comprendre ce qui ne va pas, indente correctement 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Private Sub Commandbutton_Click()
        Worksheets("feuil1").Activate
        
        If optionbutton1 = True Then
            If ComboBox.ListIndex = x Then
                Label.Caption = Range("A1").Value
    'Ici : Si ComboBox.ListIndex = y, tu ne passeras jamais par les ligne suivantes
                If ComboBox.ListIndex = y Then
                    Label.Caption = Range("A2").Value
                    Else
                    Label.Caption = Range("A3") 
                End If
            End If
        
        ElseIf optionbutton2 = True Then
            If ComboBox.ListIndex = x Then
                Label.Caption = Range("B1").Value
    'Ici : Si ComboBox.ListIndex = y, tu ne passeras jamais par les ligne suivantes
                If ComboBox.ListIndex = y Then
                    Label.Caption = Range("B2").Value
                    Else
                    Label.Caption = Range("B3").Value
                End If
            End If
        
        ElseIf optionbutton3 = True Then
            If ComboBox.ListIndex = x Then
                Label.Caption = Range("C1").Value
    'Ici : Si ComboBox.ListIndex = y, tu ne passeras jamais par les ligne suivantes
                If ComboBox.ListIndex = y Then
                    Label.Caption = Range("C2").Value
                    Else
                    Label.Caption = Range("C3").Value
                End If
            End If
        
        End If
    End Sub
    Sans comprendre vraiment, il semblerait que tu veuilles faire ç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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Private Sub Commandbutton_Click()
        Worksheets("feuil1").Activate
     
        If optionbutton1 = True Then
            If ComboBox.ListIndex = x Then
                    Label.Caption = Range("A1").Value
                ElseIf ComboBox.ListIndex = y Then
                    Label.Caption = Range("A2").Value
                Else
                    Label.Caption = Range("A3")
            End If
     
        ElseIf optionbutton2 = True Then
            If ComboBox.ListIndex = x Then
                    Label.Caption = Range("B1").Value
                ElseIf ComboBox.ListIndex = y Then
                    Label.Caption = Range("B2").Value
                Else
                    Label.Caption = Range("B3").Value
            End If
     
        ElseIf optionbutton3 = True Then
            If ComboBox.ListIndex = x Then
                    Label.Caption = Range("C1").Value
                ElseIf ComboBox.ListIndex = y Then
                    Label.Caption = Range("C2").Value
                Else
                    Label.Caption = Range("C3").Value
            End If
     
        End If
    End Sub
    ucfoutu et/ou Gorfael se feront un plaisir de simplifier mais teste déjà ça pour voir si c'est bien ce que tu veux obtenir.
    A+

Discussions similaires

  1. {VBA Excel} Probleme de IF Then
    Par Thomas69 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 20/06/2007, 14h06
  2. [vba-excel] Le temps de fermeture trop court ?
    Par Damsou dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/01/2005, 10h03
  3. [VBA-Excel]
    Par Damsou dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 05/01/2005, 10h17
  4. [VBA EXCEL] Réduire/Agrandir UserForms
    Par Fench dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/11/2003, 16h02
  5. [VBA Excel] Effacer rapidement une feuille
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/10/2002, 13h12

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