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 If et ELseIf


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Mécanicien avion
    Inscrit en
    Février 2018
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Mécanicien avion

    Informations forums :
    Inscription : Février 2018
    Messages : 196
    Par défaut Problème avec If et ELseIf
    Bonjour,

    Je suis perdu sur un truc simple mais je ne comprend pas pourquoi je bloque.
    J'aimerai que ma TextBoxParent affiche "Parents" si ma ComboBoxEleves trouve dans ma liste feuille 3 le même nom et que 4 cellule a droite est vrai.
    Sinon je veux qu'elle affiche "RIEN".

    J'arrive à afficher "parent" mais si je change ma ComboBoxEleves cela reste sur "parents" et ne reviens pas a "RIEN".

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For plageElève = 4 To 27
                        If Me.ComboBoxEleves.Value = Worksheets("Feuil 3").Range("F" & plageElève).Offset(1, 4) Like True Then
                            TextBoxParent.Value = "PARENTS"
                        Else
                            TextBoxParent.Value = "RIEN"
                        End If
                    Next plageElève
    Merci encore pour votre aide

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 182
    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 : 13 182
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'arrive à afficher "parent" mais si je change ma ComboBoxEleves cela reste sur "parents" et ne reviens pas a "RIEN".
    Est-ce que le code est appelé depuis une procédure événementielle ?
    [EDIT]
    Question supplémentaire : Le ComboBox est un ActiveX sur la feuille ou un objet du UserForm ?
    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

  3. #3
    Membre confirmé
    Homme Profil pro
    Mécanicien avion
    Inscrit en
    Février 2018
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Mécanicien avion

    Informations forums :
    Inscription : Février 2018
    Messages : 196
    Par défaut
    Le code est mis directement dans combobox avec l’événement change.

    Tout est en objet dans une userform.

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 182
    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 : 13 182
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pouvons nous visualiser le code qui alimente le ComboBox ?
    Une image de la table source ne serait pas un luxe
    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

  5. #5
    Membre confirmé
    Homme Profil pro
    Mécanicien avion
    Inscrit en
    Février 2018
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Mécanicien avion

    Informations forums :
    Inscription : Février 2018
    Messages : 196
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    Pouvons nous visualiser le code qui alimente le ComboBox ?
    Une image de la table source ne serait pas un luxe

    Voici comment j'alimente ma combobox :

    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
    Private Sub UserForm_Activate()
        Dim plage As Integer, PlageTri As Integer
        Dim Eleves As String
     
    Set ws = Sheets("Synthèse")
     
    With Me.ComboBoxEleves
            For plage = 5 To 28
            TextS1 = ws.Cells(plage, 8)
                If TextS1 <> "" Then
                    .AddItem ws.Range("H" & plage) & " " & ws.Range("I" & plage)
                End If
     
            TextS2 = ws.Cells(plage, 12)
                If TextS2 <> "" Then
                    .AddItem ws.Range("L" & plage) & " " & ws.Range("M" & plage)
                End If
     
            TextS3 = ws.Cells(plage, 16)
                If TextS3 <> "" Then
                    .AddItem ws.Range("P" & plage) & " " & ws.Range("Q" & plage)
                End If
            Next plage
        End With
     
        For plage = 0 To ComboBoxEleves.ListCount - 1
        For PlageTri = 0 To ComboBoxEleves.ListCount - 1
            If ComboBoxEleves.List(plage) < ComboBoxEleves.List(PlageTri) Then
                Eleves = ComboBoxEleves.List(plage)
                ComboBoxEleves.List(plage) = ComboBoxEleves.List(PlageTri)
                ComboBoxEleves.List(PlageTri) = Eleves
            End If
        Next PlageTri
        Next plage
    End sub

  6. #6
    Membre Expert Avatar de Nain porte koi
    Homme Profil pro
    peu importe
    Inscrit en
    Novembre 2023
    Messages
    1 237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : peu importe

    Informations forums :
    Inscription : Novembre 2023
    Messages : 1 237
    Par défaut
    Citation Envoyé par Maxou 10 Voir le message
    si ma ComboBoxEleves trouve dans ma liste feuille 3 le même nom et que 4 cellule a droite est vrai.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Me.ComboBoxEleves.Value = Worksheets("Feuil 3").Range("F" & plageElève).Offset(1, 4) Like True Then
    Moi je tique que la formule, et en particulier sur le Like (je ne vois pas ce qu'il vient faire avec une valeur logique)
    ça ne serait pas plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Me.ComboBoxEleves.Value = Worksheets("Feuil 3").Range("F" & plageElève) And Worksheets("Feuil 3").Range("F" & plageElève).Offset(0, 4) = True Then
    A condition que Worksheets("Feuil 3").Range("F" & plageElève) contienne le nom
    Attention aussi à l'offset (1,4) veut dire 1 ligne en dessous et 4 colonnes à droite
    JièL
    Membre des AMIS
    Anti Macro Inutilement Superfétatoire

  7. #7
    Membre émérite Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 519
    Par défaut
    Bonjour à tous,
    Bon en fait vous devez faire deux contrôles, la valeur de la zone de liste déroulante et la valeur de la cellule quatre colonnes à droite.
    Comme l'a dis Nain porte koi vous devez modifier la valeur de l'Offset.
    Attention lors de l'utilisation de l'opérateur LIKE il est sensible à la casse. donc pour éviter les problèmes qui pourraient en découler :
    • Soit vous integrez la mention Option Compare Text en début de module
    • Soit vous utilisez la fonction StrComp (Voir sur le code)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        For indexRow = 4 To 27                                ' // Utilisez plutôt des tableaux structurés et leurs propriété ListRows.count ou DataBodyRange
            With Worksheets("Feuil 3")
                '            If Me.ComboBoxEleves.value Like .Range("F" & plageElève).value And .Range("F" & plageElève).Offset(0, 4) = True Then
                If StrComp(Me.ComboBoxEleves.value, .Range("F" & indexRow).value, vbTextCompare) + 0 And .Range("F" & indexRow).Offset(1, 4) = True Then
                    TextBoxParent.value = "PARENTS"             ' // Vous devriez plutôt utiliser une constante pour parents et rien.
                Else
                    TextBoxParent.value = "RIEN"                ' // Vous devriez plutôt utiliser une constante pour parents et rien.
                End If
            End With
        Next indexRow
    Et en plus général, VBA parle Anglais donc préférez les noms de variables sans accents, et avec des noms explicite (PlageEleve, serait plutôt un objet Range. Ici c'est un index de ligne)
    Jean-Paul sous Office 365 et Windows 10/11 (Intel I7 16Go)

    Si vous avez trouvé réponse à votre question penser à la passer en :resolu: Vous avez aimé la discussion alors un :plusser: fait toujours plaisir.
    Le savoir n'a de valeur que s'il est partagé.
    La vérité de demain se nourrit de l'erreur d'hier. Antoine de Saint-Exupéry

Discussions similaires

  1. [XL-2016] Problme avec opérateur OR
    Par Superpat9999 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/07/2020, 14h57
  2. ajouter le nom d'un module avec elseif
    Par vatmx dans le forum Langage
    Réponses: 2
    Dernier message: 20/09/2013, 17h15
  3. [XL-2010] Probleme pour tester avec if et elseif sous vba
    Par rabah14 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/02/2013, 17h53
  4. Réponses: 9
    Dernier message: 29/03/2011, 21h45

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