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 :

Vérification valeur Combobox selon critere [Toutes versions]


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
    Chef de projet en SSII
    Inscrit en
    Septembre 2024
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2024
    Messages : 60
    Par défaut Vérification valeur Combobox selon critere
    Bonjour à tous,

    J'ai actuellement une macro qui fonctionne plutot pas mal.
    Toutefois, il me manque un bout de code que j'arrive pas à produire.

    Vous pourrez voir sur le tableau que j'ai pour une référence, plusieurs taches à accomplir.

    Lorsque celle-ci est sélectionné, une étoile est rajouté pour indiquer que la tache est prise en charge.

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    Private Sub CommandButton1_Click()
     
    'BOUTON ENREGISTRER
     
    'On vérifie qu'un executant est saisie obligatoirement
    With VERIF_SI_NOUVEL_EXECUTANT
        If ComboBox2.ListIndex = -1 Then
            MsgBox ("ATTENTION : ENREGISTREMENT IMPOSSIBLE !!!" & Chr(10) & Chr(10) & "Veuillez saisir un NOUVEL EXECUTANT ou cliquer sur QUITTER"), 64, "MESSAGE UTILISATEUR"
            Exit Sub
        End If
    End With
     
    'On vérifie si une date "Début opération" est indiqué, alors on oblige à demander un N° d'employé
    With VERIF_SI_DATE_PRISE_EN_CHARGE
        If Not TextBox10 = -1 And TextBox10 = "" Then
            MsgBox ("ATTENTION : ENREGISTREMENT IMPOSSIBLE !!!" & Chr(10) & Chr(10) & "Veuillez indiquer une date de prise en charge !"), 64, "MESSAGE UTILISATEUR"
            Exit Sub
        End If
    End With
     
    'On vérifie et impose la saisie d'un N° d'employé
    With VERIF_NUMERO_EMPLOYE
        If Not TextBox11 = -1 And TextBox11 = "" Then
            MsgBox ("ATTENTION : ENREGISTREMENT IMPOSSIBLE !!!" & Chr(10) & Chr(10) & "Veuillez indiquer un numéro d'employé !"), 64, "MESSAGE UTILISATEUR"
            Exit Sub
        End If
    End With
     
    '--------- VERIFICATION FORMAT DATE TEXTBOX 10 ------------
        If Not IsDate(TextBox10) Then
            MsgBox "ATTENTION votre format DATE DE DEPART EST INCORRECT !!!" & Chr(10) & Chr(10) & "Vérifier la date que vous avez saisie ! ", 48, "MESSAGE DEVELOPPEUR"
            TextBox10 = ""
            Exit Sub
            'Else
            'MsgBox "Format correct"
            '...la suite de la procédure
        End If
    '--------- FIN VERIFICATION FORMAT DATE TEXTBOX: DATE DE DEPART ------------
     
    ThisWorkbook.Worksheets("DATA").Range("C11").Value = Format(ComboBox2.Value, "@") 'On écrit l'executant en cours au format Texte
    ThisWorkbook.Worksheets("DATA").Range("E11").Value = Format(TextBox10.Value, "MM-DD-YYYY") 'on écrit la date au format Date
    ThisWorkbook.Worksheets("DATA").Range("G11").Value = Format(TextBox11.Value, "####0") 'On écrit le numéro d'employé au format nombre sans virgule
     
     
     
     
    '--------- VERIFICATION COMBOBOX2 TACHE ------------
    'On impose que la tache sélectionné soit celle qui est juste prés celle qui est avec une étoile
     
     
     
    'MsgBox ("ATTENTION : ENREGISTREMENT IMPOSSIBLE !!!" & Chr(10) & Chr(10) & "Veuillez sélectionné la premiere tache disponible !"), 64, "MESSAGE UTILISATEUR"
     
    '--------- FIN VERIFICATION COMBOBOX2 TACHE ------------
     
    '--------- AJOUT ETOILE ------------
    'Je rajoute une étoile à la tache sélectionné dans le ComboBox2
    With AJOUT_ETOILE
        If Not ComboBox2.ListIndex = -1 Then
        Dim NumberExectutant As Range
        Set NumberExectutant = ThisWorkbook.Worksheets("DATA").Range("C4:J4").Find(what:=ComboBox2.Value, lookat:=xlPart)
            If Not TextBox10 = "" Then NumberExectutant = NumberExectutant & "*"
            End If
    End With
     
    '--------- FIN AJOUT ETOILE ------------
     
     
    ' On quitte l'enregistrement !
    Unload Me
     
    End Sub
     
    Private Sub TextBox10_Change()
    Dim Valeur As Byte
    TextBox10.MaxLength = 10 'nb caractères maxi autorisé dans le textbox
    Valeur = Len(TextBox10)
    If Valeur = 2 Or Valeur = 5 Then TextBox10 = TextBox10 & "/"
    End Sub
     
    Private Sub UserForm_Initialize()
     
     
    'remplit la ComboBox2 de l'ensemble des taches
    For Each Cel In ThisWorkbook.Worksheets("DATA").Range("C4:J4") 'boucle sur toutes les cellule de C à J
     
    'condition : si la cellule n'est pas vide ajoute son contenu à la ComboBox2
    If Cel.Value <> "" Then ComboBox2.AddItem Cel.Value
    Next Cel 'prochaine cellule
     
     
    End Sub
    je cherche à trouver une solution pour : Comment faire pour imposer la première tache sans étoile à sélectionner dans un ComboBox.


    J'ai commenté le code de ma macro et apporter quelques lignes de vérification et autres qui, je me suis dis, pourrait servir à des lecteurs.

    Pour le fichier d'exemple, c'est ici :
    ComboBox et etoile_V1.0.xlsm


    Merci encore pour votre aide.

    EDIT (et oui j'avance) : je vérifie si la tache possède une étoile et si oui, alors je ne peux pas la sélectionner
    rajouter en ligne 28 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    'On vérifie si il y a une étoile
        If Right(ComboBox2.Value, 1) = "*" Then
        MsgBox ("ATTENTION : ENREGISTREMENT IMPOSSIBLE !!!" & Chr(10) & Chr(10) & "Veuillez saisir une tache sans étoile !"), 64, "MESSAGE UTILISATEUR"
        ComboBox2.Value = "" 'Je vide le ComboBox
    Exit Sub
        End If
    Lieb

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Bonjour, je pense que le plus simple c'est de ne pas charger les cellules contenant "*" dans le combobox non ?
    Dans UserformInitialize modifie comme ceci: If Cel.Value <> "" And InStr(Cel.Value, "*") = 0 Then

  3. #3
    Membre confirmé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2024
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2024
    Messages : 60
    Par défaut
    Effectivement, je me garde sous le coude ta proposition.

    Toutefois, je me dois de laisser chaque tache avec une étoile, cela me permet de faire une vérification visuelle et un état d'avancement.

    Par contre, comment faire pour imposer la première tache sans étoile à sélectionner dans un ComboBox.

  4. #4
    Membre émérite Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    516
    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 : 516
    Par défaut
    Bonjour,
    D'abord renommer la Zone de liste déroulante vers : "Tasks"
    Après il faut boucler sur les entrées pour trouver la première occurrence disponible.
    Ensuite faire un test sur le texte de la zone de liste déroulante.

    Voici un code minimaliste :
    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
    Private Function GetFirstApplicableTask(Control As MSForms.Control) As String
        Dim Item As Long
        For Item = 0 To Control.ListCount - 1
            If Right$(Control.List(Item), 1) <> "*" Then
                GetFirstApplicableTask = Control.List(Item)
                Exit For
            End If
        Next
     
    End Function
     
    Private Sub Tasks_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
        Dim tempString As String
     
        tempString = GetFirstApplicableTask(Tasks)
        If tempString = vbNullString Then
            MsgBox "Pas de taches disponnibles!"
        Else
            If Tasks.Text <> tempString Then
     
                MsgBox "Cette tache n'est pas bonne !" & vbNewLine & _
                       "La premiére tache disponnible est : " & tempString
                Cancel = True
            End If
        End If
    End Sub

  5. #5
    Membre confirmé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2024
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2024
    Messages : 60
    Par défaut
    Bonjour / soir à tous,

    Mince, j'étais à fond dans ma recherche que j'ai pas vu les messages.

    Du coup, je vais tester la proposition.

    Toutefois, voici ce que j'ai fait et ça marche :

    D'un coté, je vais utiliser pour le combobox : ListIndex
    De l'autre coté, j'utilise la variable d'une boucle pour trouver la premiere tache sans étoile : CellOffset_Tache

    Avant tout, comment fonctionne ListIndex :
    ListIndex, donne le numéro de la proposition séléctionné dans votre ComboBox.
    Avec ListIndex, la 1ere proposition est le chiffre 0, puis la deuxième est 1, la troisième est 2,...
    Donc pour une recherche de correspondance, je vais ajouter une fois ma valeur trouvé de ListIndex + 1 ,le tout dans la variable : Custom_Index_ComboBox
    Ainsi, je peux comparer Custom_Index_ComboBox avec CellOffset_Tache !!!

    COMMENT CA FONCTIONNE :
    La variable de ma boucle, dés qu'elle aura trouvé ma tache sans étoile, aura ainsi apporter une valeur à CellOffset_Tache
    Du coup, je vais pouvoir comparer la valeur CellOffset_Tache de ma boucle avec la variable Custom_Index_ComboBox
    Et si le chiffre est égal, alors Bingo ! C'est que c'est la bonne tache.

    Promis, je prends un doliprane aprés ça !

    Pour le code, j'ai commenté des MsgBox qui m'ont servi lors de la construction du script. N'hésitez pas à les dé-commenter pour comprendre comment ça fonctionne.

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    Private Sub CommandButton1_Click()
     
    'BOUTON ENREGISTRER
     
    'On vérifie qu'un executant est saisie obligatoirement
    With VERIF_SI_NOUVEL_EXECUTANT
        If ComboBox2.ListIndex = -1 Then
            MsgBox ("ATTENTION : ENREGISTREMENT IMPOSSIBLE !!!" & Chr(10) & Chr(10) & "Veuillez saisir un NOUVEL EXECUTANT ou cliquer sur QUITTER"), 64, "MESSAGE UTILISATEUR"
            Exit Sub
        End If
    End With
     
    'On vérifie si une date "Début opération" est indiqué, alors on oblige à demander un N° d'employé
    With VERIF_SI_DATE_PRISE_EN_CHARGE
        If Not TextBox10 = -1 And TextBox10 = "" Then
            MsgBox ("ATTENTION : ENREGISTREMENT IMPOSSIBLE !!!" & Chr(10) & Chr(10) & "Veuillez indiquer une date de prise en charge !"), 64, "MESSAGE UTILISATEUR"
            Exit Sub
        End If
    End With
     
    'On vérifie et impose la saisie d'un N° d'employé
    With VERIF_NUMERO_EMPLOYE
        If Not TextBox11 = -1 And TextBox11 = "" Then
            MsgBox ("ATTENTION : ENREGISTREMENT IMPOSSIBLE !!!" & Chr(10) & Chr(10) & "Veuillez indiquer un numéro d'employé !"), 64, "MESSAGE UTILISATEUR"
            Exit Sub
        End If
    End With
     
    '--------- VERIFICATION FORMAT DATE TEXTBOX 10 ------------
        If Not IsDate(TextBox10) Then
            MsgBox "ATTENTION votre format DATE DE DEPART EST INCORRECT !!!" & Chr(10) & Chr(10) & "Vérifier la date que vous avez saisie ! ", 48, "MESSAGE DEVELOPPEUR"
            TextBox10 = ""
            Exit Sub
            'Else
            'MsgBox "Format correct"
            '...la suite de la procédure
        End If
    '--------- FIN VERIFICATION FORMAT DATE TEXTBOX: DATE DE DEPART ------------
     
    ThisWorkbook.Worksheets("DATA").Range("C11").Value = Format(ComboBox2.Value, "@") 'On écrit l'executant en cours au format Texte
    ThisWorkbook.Worksheets("DATA").Range("E11").Value = Format(TextBox10.Value, "MM-DD-YYYY") 'on écrit la date au format Date
    ThisWorkbook.Worksheets("DATA").Range("G11").Value = Format(TextBox11.Value, "####0") 'On écrit le numéro d'employé au format nombre sans virgule
     
     
     
     
    '--------- VERIFICATION COMBOBOX2 TACHE ------------
    'On impose que la tache sélectionné soit celle qui est juste prés celle qui est avec une étoile
     
     
     
    'MsgBox ("ATTENTION : ENREGISTREMENT IMPOSSIBLE !!!" & Chr(10) & Chr(10) & "Veuillez sélectionné la premiere tache disponible !"), 64, "MESSAGE UTILISATEUR"
     
    '--------- FIN VERIFICATION COMBOBOX2 TACHE ------------
     
    '--------- AJOUT ETOILE ------------
    'Je rajoute une étoile à la tache sélectionné dans le ComboBox2
    With AJOUT_ETOILE
        If Not ComboBox2.ListIndex = -1 Then
        Dim NumberExectutant As Range
        Set NumberExectutant = ThisWorkbook.Worksheets("DATA").Range("C4:J4").Find(what:=ComboBox2.Value, lookat:=xlPart)
            'On rajoute une * pour dire que la tache a déja été effectué
            If Not TextBox10 = "" Then NumberExectutant = NumberExectutant & "*"
            End If
    End With
     
    '--------- FIN AJOUT ETOILE ------------
     
     
    ' On quitte l'enregistrement !
    Unload Me
     
    End Sub
     
    Private Sub TextBox10_Change()
    Dim Valeur As Byte
    TextBox10.MaxLength = 10 'nb caractères maxi autorisé dans le textbox
    Valeur = Len(TextBox10)
    If Valeur = 2 Or Valeur = 5 Then TextBox10 = TextBox10 & "/"
    End Sub
     
    Private Sub UserForm_Initialize()
     
     
    'remplit la ComboBox2 de l'ensemble des taches
    For Each Cel In ThisWorkbook.Worksheets("DATA").Range("C4:J4") 'boucle sur toutes les cellule de C à J
     
    'condition : si la cellule n'est pas vide ajoute son contenu à la ComboBox2
    If Cel.Value <> "" Then ComboBox2.AddItem Cel.Value
    Next Cel 'prochaine cellule
     
     
    End Sub
    Lieb

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

Discussions similaires

  1. Compter valeurs uniques selon critère
    Par bbmz22 dans le forum R
    Réponses: 0
    Dernier message: 21/02/2023, 15h00
  2. [XL-2007] Nombre de valeurs différentes selon un critère
    Par neiluj26 dans le forum Excel
    Réponses: 5
    Dernier message: 27/01/2010, 11h09
  3. Rendre inactive une combobox selon la valeur choisie dans une 1er combobox
    Par The Molo dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 14/12/2007, 13h34
  4. Recupérer valeur champ selon combobox
    Par enlair dans le forum VBA Access
    Réponses: 9
    Dernier message: 22/08/2007, 17h03
  5. Réponses: 7
    Dernier message: 30/08/2006, 15h38

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