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 MsgBox avec ComboBox


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 35
    Par défaut Problème MsgBox avec ComboBox
    Bonjour à tous,
    Voilà mon problème,
    J'ai une UserForm où j'y es mis plusieurs ComboBox avec des listes de critères. Sur cette même UserForm j'y es mis un bouton "OK". Jusqu'ici tout va bien.
    Mon problème est que j'aimerais, lors d'un appui sur mon bouton "OK", vérifier qu'une donnée soit bien rentrée dans mais ComboBox. Si cela n'est pas le cas j'aimerais qu'un MsgBox s'affiche en disant par exemple "Veuillez entre une donnée dans ComboBox1".

    Le code que j'ai essayé est celui ci-dessous mais bien évidement il ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub CommandButton_OK_Click() 
    If fenginComboBox Is Not "INDEX!B3:B34" Then
    MsgBox "Veuillez saisir une famille d'engins"
    End If
    End Sub
    PS: je précise que je suis nouveau dans le domaine du VBA donc il se peut que je fasse d'énormes fautes .

    Merci pour ceux qui prêteront attention à mon sujet!
    Cordialement.

    MARIAIS Gwénaël

  2. #2
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Ta combobox fenginComboBox est "remplie" via son RowSource?

    Si c'est le cas, il y a trois choix (et seulement 3) :
    > soit elle est vide,
    > soit elle a une valeur qui appartient au RowSource.
    > soit un petit malin a saisi une valeur dans le combobox.

    Pour éviter la saisie par un petit malin, il faut, dès l'initialisation de l'userform, paramétrer tes combobox comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fenginComboBox.Style = fmStyleDropDownList
    A partir de là, tu n'auras plus que deux possibilités, vide ou avec une valeur correspondante à ce que tu cherches.

    Donc, ton test devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub CommandButton_OK_Click() 
    If fenginComboBox = "" Then
        MsgBox "Veuillez saisir une famille d'engins"
    End If
    End Sub

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 35
    Par défaut
    Merci Pijaku de prêter attention à mon sujet .

    Tout d'abord l'astuce fenginComboBox.Style = fmStyleDropDownList fonctionne ainsi que ma MsgBox.

    Maintenant ce que j'aimerais savoir c'est que depuis ma commande fenginComboBox.Style = fmStyleDropDownList installée, dans ma ComboBox "fenginComboBox"" je ne vais plus voir de titre par exemple "Famille engin". En faite je ne vois plus le Text dans ma combobox.

    En espérant avoir été assez clair. Merci.

  4. #4
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Donne moi ton code de remplissage des combobox.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 35
    Par défaut
    Le voici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    'Assignation de valeur aux combobox
          Me.nomComboBox.RowSource = "INDEX!A3:A34" & Sheets("INDEX").Cells(1, 1).End(xlDown).Row
          Me.fenginComboBox.RowSource = "INDEX!B3:B34" & Sheets("INDEX").Cells(1, 1).End(xlDown).Row
          Me.enginComboBox.RowSource = "INDEX!C3:C34" & Sheets("INDEX").Cells(1, 1).End(xlDown).Row
          Me.typeoperationComboBox.RowSource = "INDEX!D3:D34" & Sheets("INDEX").Cells(1, 1).End(xlDown).Row
          Me.tempsComboBox.RowSource = "INDEX!E3:E34" & Sheets("INDEX").Cells(1, 1).End(xlDown).Row

  6. #6
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bon.
    Plusieurs petites choses avant de continuer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.nomComboBox.RowSource = "INDEX!A3:A34"
    Ok, mais normalement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("INDEX").Cells(1, 1).End(xlDown).Row
    te donne le numéro de la dernière ligne. Donc inutile d'ajouter 34.
    Ceci devrait suffire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.nomComboBox.RowSource = "INDEX!A3:A" & Sheets("INDEX").Cells(1, 1).End(xlDown).Row
    Comme tu utilises
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("INDEX").Cells(1, 1).End(xlDown).Row
    plusieurs fois, il vaut mieux le stocker dans une variable. Comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim maLigne As Integer
    maLigne = Sheets("INDEX").Cells(1, 1).End(xlDown).Row
          Me.nomComboBox.RowSource = "INDEX!A3:A" & maLigne
          Me.fenginComboBox.RowSource = "INDEX!B3:B" & maLigne
          Me.enginComboBox.RowSource = "INDEX!C3:C" & maLigne
          Me.typeoperationComboBox.RowSource = "INDEX!D3:D" & maLigne
          Me.tempsComboBox.RowSource = "INDEX!E3:E" & maLigne
    Attention, ceci ne fonctionnera que si, dans la feuille INDEX, les cellules A1, A2 et A3 au minimum sont remplies. Si l'une des trois est vide, ce code ne fonctionnera alors pas.

    Dernière question subsidiaire (pas facile sans avoir le fichier sous la main ;-)) :
    Ta ligne d'entête dans la feuille INDEX possède quel numéro? 2? 3?

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 35
    Par défaut
    Je vais tester cela de suite!

    Autrement ma ligne d'entête de la feuille "INDEX" est en ligne 1.

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 35
    Par défaut
    Afin que cela soit un peu plus clair pour vous:
    Nom : Tableau Index.png
Affichages : 773
Taille : 27,6 Ko
    Mon tableau dans la feuille INDEX ci-dessus.

    Pour le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maLigne = Sheets("INDEX").Cells(1, 7).End(xlDown).Row
    j'ai mis Cells(1,7) pour être sur qu'il m'affiche toutes mes données.

    Alors ce que je souhaiterais, pour revenir à nos moutons, c'est que dans mes comboxbox soit afficher avant de choisir un critère son titre par exemple nom,famille engin etc...

    Le code que je dispo dans ma useform est:
    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
    Private Sub UserForm_Initialize()
     
    'Empêcher de rentrer une valeur à la main dans les combobox
    nomComboBox.Style = fmStyleDropDownList
    fenginComboBox.Style = fmStyleDropDownList
    enginComboBox.Style = fmStyleDropDownList
    typeoperationComboBox.Style = fmStyleDropDownList
    tempsComboBox.Style = fmStyleDropDownList
     
    'Assignation de valeur aux combobox
         Dim maLigne As Integer
    maLigne = Sheets("INDEX").Cells(1, 7).End(xlDown).Row
          Me.nomComboBox.RowSource = "INDEX!A2:A" & maLigne
          Me.fenginComboBox.RowSource = "INDEX!B2:B" & maLigne
          Me.enginComboBox.RowSource = "INDEX!C2:C" & maLigne
          Me.typeoperationComboBox.RowSource = "INDEX!D2:D" & maLigne
          Me.tempsComboBox.RowSource = "INDEX!E2:E" & maLigne
     
    'Inscription dans la textbox*
    ListBox1.ColumnCount = 8
    ListBox1.ColumnHeads = True
     
    'Ne prendre que les 10 dernières saisies
    Dim DerniereLigneSaisie As Integer, PremiereLigne As Integer
    DerniereLigneSaisie = Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row
    If DerniereLigneSaisie - 8 < 2 Then
        PremiereLigne = 2
    Else
        PremiereLigne = DerniereLigneSaisie - 8
    End If
     
    ListBox1.RowSource = "EVENEMENTS!A" & PremiereLigne & ":G" & DerniereLigneSaisie
    End Sub
    Merci.

  9. #9
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bon...
    Dans ton cas je ferais comme ceci :
    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
    Private Sub UserForm_Initialize()
       'Assignation de valeur aux combobox
       Me.nomComboBox.RowSource = "INDEX!A1:A" & Sheets("INDEX").Cells(1, 1).End(xlDown).Row
       Me.fenginComboBox.RowSource = "INDEX!B1:B" & Sheets("INDEX").Cells(1, 2).End(xlDown).Row
       Me.enginComboBox.RowSource = "INDEX!C1:C" & Sheets("INDEX").Cells(1, 3).End(xlDown).Row
       Me.typeoperationComboBox.RowSource = "INDEX!D1:D" & Sheets("INDEX").Cells(1, 4).End(xlDown).Row
       Me.tempsComboBox.RowSource = "INDEX!E1:E" & Sheets("INDEX").Cells(1, 5).End(xlDown).Row
       'Empêcher de rentrer une valeur à la main dans les combobox
       nomComboBox.Style = fmStyleDropDownList
       nomComboBox.ListIndex = 0
       fenginComboBox.Style = fmStyleDropDownList
       fenginComboBox.ListIndex = 0
       enginComboBox.Style = fmStyleDropDownList
       enginComboBox.ListIndex = 0
       typeoperationComboBox.Style = fmStyleDropDownList
       typeoperationComboBox.ListIndex = 0
       tempsComboBox.Style = fmStyleDropDownList
       tempsComboBox.ListIndex = 0
       'Inscription dans la textbox*
       ListBox1.ColumnCount = 8
       ListBox1.ColumnHeads = True
       'Ne prendre que les 10 dernières saisies
       Dim DerniereLigneSaisie As Integer, PremiereLigne As Integer
       DerniereLigneSaisie = Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row
       If DerniereLigneSaisie - 8 < 2 Then
           PremiereLigne = 2
       Else
           PremiereLigne = DerniereLigneSaisie - 8
       End If
       ListBox1.RowSource = "EVENEMENTS!A" & PremiereLigne & ":G" & DerniereLigneSaisie
    End Sub
    Puis, dans la Private Sub CommandButton_OK_Click() :

    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_OK_Click()
    'test le contenu des combobox
    If nomComboBox.ListIndex = 0 Then
       MsgBox "Veuillez saisir un nom"
       Exit Sub
    End If
    If fenginComboBox.ListIndex = 0 Then
       MsgBox "Veuillez saisir une famille d'engin"
       Exit Sub
    End If
    'etc....
     
    'l'action que doit réaliser ton bouton OK
    End Sub

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 35
    Par défaut
    Ok super ça marche!

    Par contre (dsl je suis pénible...) dans ma listbox vous avez pu le voir j'ai mis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.ColumnHeads = True
    Alors en faite j'aimerais avoir mes titres en haut pour chaque colonne de ma listbox. Le fait est que cela marche bien jusqu'à mes 9 premières saisies (rappel je ne garde que les 10 premières saisies visibles pour l'utilisateur dans la listbox). Ce qu"il se passe c'est qu'a ma 10ème saisie la colonne titre de ma listbox saute pour prendre la saisie numéro 1 et ainsi de suite.
    Je vous fait voir cela en image:
    Jusqu'à ma 9ème saisie
    Nom : Listbox_Image1.png
Affichages : 768
Taille : 49,6 Ko
    A ma 10ème saisie
    Nom : ListBox_Image2.png
Affichages : 699
Taille : 48,8 Ko

    Mon code est celui-ci:
    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
    Private Sub UserForm_Initialize()
     
    'Empêcher de rentrer une valeur à la main dans les combobox
    nomComboBox.Style = fmStyleDropDownList
    fenginComboBox.Style = fmStyleDropDownList
    enginComboBox.Style = fmStyleDropDownList
    typeoperationComboBox.Style = fmStyleDropDownList
    tempsComboBox.Style = fmStyleDropDownList
     
    'Assignation de valeur aux combobox
        Me.nomComboBox.RowSource = "INDEX!A2:A" & Sheets("INDEX").Cells(1, 1).End(xlDown).Row
        Me.fenginComboBox.RowSource = "INDEX!B2:B" & Sheets("INDEX").Cells(1, 2).End(xlDown).Row
        Me.enginComboBox.RowSource = "INDEX!C2:C" & Sheets("INDEX").Cells(1, 3).End(xlDown).Row
        Me.typeoperationComboBox.RowSource = "INDEX!D2:D" & Sheets("INDEX").Cells(1, 4).End(xlDown).Row
        Me.tempsComboBox.RowSource = "INDEX!E2:E" & Sheets("INDEX").Cells(1, 5).End(xlDown).Row
     
    'Inscription dans la textbox*
    ListBox1.ColumnCount = 8
    ListBox1.ColumnHeads = True
     
    'Ne prendre que les 10 dernières saisies
    Dim DerniereLigneSaisie As Integer, PremiereLigne As Integer
    DerniereLigneSaisie = Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row
    If DerniereLigneSaisie - 8 < 2 Then
        PremiereLigne = 2
    Else
        PremiereLigne = DerniereLigneSaisie - 8
    End If
     
    ListBox1.RowSource = "EVENEMENTS!A" & PremiereLigne & ":G" & DerniereLigneSaisie
    End Sub
    Merci!

  11. #11
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Pour cela, tu ne peux pas faire comme ça.
    Enlève la propriété ColumnHeads = True, mets la sur False
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.ColumnHeads = False
    Remplace cette possibilité en plaçant au dessus de chacune des colonnes de ta listbox des label avec les noms souhaités dans leurs caption.

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 35
    Par défaut
    Ok très bien je vous remercie!

    Continuer à faire ce que vous faites!

    Cordialement.

    M.Gwénaël

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

Discussions similaires

  1. problème indice avec combobox
    Par walid kh dans le forum VB.NET
    Réponses: 2
    Dernier message: 16/03/2010, 10h51
  2. problème avec combobox
    Par reverse_engineer dans le forum Struts 1
    Réponses: 5
    Dernier message: 13/07/2008, 19h20
  3. Problème Jdk avec combobox
    Par donnadieujulien dans le forum Composants
    Réponses: 11
    Dernier message: 08/07/2008, 11h53
  4. Problème avec Combobox et XML
    Par gstephane dans le forum Flex
    Réponses: 0
    Dernier message: 20/01/2008, 12h59
  5. [AS2] Problème avec ComboBox lors création d'un composant perso
    Par aldo-tlse dans le forum ActionScript 1 & ActionScript 2
    Réponses: 12
    Dernier message: 24/05/2006, 18h51

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