Utilisation de 2 listbox complémentaires

Bonjour,

Dans ma feuille base j'ai 2 listbox

La première pour choisir l'équipe, la seconde pour choisir la liste du personnel correspondant à l'équipe de la 1ère listbox.

Dans la feuille personnel, j'ai ma liste du personnel avec leurs équipes respectives.

Dans le listbox 2 doit apparaitre le Nom et le prénom qui sont dissocier dans la base.

Si quelqu'un à une idée sur la manière de procéder...

38fred-listbox.xls (19.50 Ko)

Une possibilité ... en version 2010 on peut dissocier les onglets !

Bonjour

Bonjour Steelson

A vérifier

Bonjour à vous 2 et merci pour vos solutions.

Comme je suis en vba je vais garder pour ce fichier la solution de Banzai, mais la solution de steelson va m'être utile pour un autre fichier ^^

Pour 2010 je n'ai pas pu voir. Pas cette version en ma possession

Petite question subsidiaire,

quel intérêt à utiliser un userform (j'ai vu de nombreux fichiers sur ce forum utilisant un userform) et si je voulais mettre mes listbox dans un userform dois je mettre ce code

Dim J As Long

  Sheets("Base").ComboBox1.Clear
  With Sheets("Personnel")
    For J = 2 To .Range("A" & Rows.Count).End(xlUp).Row
      Sheets("Base").ComboBox1 = .Range("C" & J)
      If Sheets("Base").ComboBox1.ListIndex = -1 Then Sheets("Base").ComboBox1.AddItem .Range("C" & J)
    Next J
  End With
  Sheets("Base").ComboBox1.ListIndex = -1

entre

Private Sub UserForm_Initialize()

End Sub

Et moi j'ai aussi 2 questions :

  • comment faites-vous pour mettre une combobox dans la feuille et pas dans un userform ?
  • comment faites vous pour ensuite en récupérer la valeur dans les formules Excel ?

Merci d'avance de résorber une part de mon ignorance ! j'ai cherché et je n'ai pas dû bien chercher car je n'ai pas trouvé !

Bonjour

Fred35 a écrit :

quel intérêt à utiliser un userform

Juste mon avis personnel à moi tout seul

C'est plus 'professionnel'

Pour info ce ne sont pas des ListBox mais des ComboBox

Ce code doit être placé (mais tout dépend ce que tu veux faire - surtout si la liste doit évoluer) dans la procédure que tu indiques UserForm_Initialize()

Il faut remplacer Sheets("Base") par Me (qui désigne l'Userform dans lequel les ComboBox sont placés)

Steelson a écrit :

Et moi j'ai aussi 2 questions :

  • comment faites-vous pour mettre une combobox dans la feuille et pas dans un userform ?
  • comment faites vous pour ensuite en récupérer la valeur dans les formules Excel ?

Merci d'avance de résorber une part de mon ignorance ! j'ai cherché et je n'ai pas dû bien chercher car je n'ai pas trouvé !

Pour mettre une combobox j'utilise la boite à outils de contrôle ensuite via un bouton de commande ("validation", par exemple), je lui demande de récupérer les valeurs des combobox et de les placer dans une cellule.

Dans l'idée je ne veux pas que les utilisateurs aient accès au contenu, du coup j'ai masqué une feuille et les valeurs des combobox y sont enregistrées.

Merci Banzai, je reviendrai surement vers le forum sur ce sujet que je découvre petit à petit.

Bonjour, je viens de mettre dans un userform et ça fonctionne

maintenant je cherche à bloquer la saisie d'un textebox à des heures.

Si le format n'est pas du type HH:MM saisie refusée

PS : il faut peut être que je change mon titre ou que j'ouvre un nouveau sujet ???

L'idée finale est de pouvoir créer une bdd à partir d'un userform de saisie puis pouvoir modifier et supprimer.

Mais j'y vais étape par étape pour comprendre en même temps

Bonjour

Rajoutes ce code dans le module de l'userform

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  If Me.TextBox1 = "" Then Exit Sub
  If Not Me.TextBox1 Like "[0-2][0-9][:][0-5][0-9]" Or Not IsDate(Me.TextBox1) Then
    MsgBox "Heure non valide"
    Cancel = True
  End If
End Sub

Merci Banzai, j'étudie le code.

J'ai besoin d'un avis ?

Concernant ma base du personnel, vaut il mieux que avoir une base unique CDI/CDD, Intérim ou 2 bases distincts ?

Mon exercice avance mais je bute encore sur pas mal de chose...

Dans le fichier ci-joint j'ai ajouté un calendrier, ajouter l'enregistrement des données sur la feuille enregistrement, fait en sorte qu'a chaque fois qu'on enregistre 1 personne, le combobox2 passe à la personne suivante, ajouté des horaires du lundi au samedi pour chaque personne et utilisé la fonction weekday() pour que les heures trouvé arrive dans les textebox.

Mes problème sont :

-comment mettre un compteur pour qu'une fois avoir fait le tour de listindex sa s'arrête ?

j'ai tenté ce code qui fonctionne jusqu'a ce que j'arrive à la dernière personne +1 ce qui est normal en fait puisqu'elle n'existe pas...

Me.ComboBox2.ListIndex = Me.ComboBox2.ListIndex + 1

- comment faire en sorte que la liste du personnel (combobox 2) ne fasse pas apparaître les personnes en fin de contrat

j'ai essayé ceci mais sans succès

With Sheets("Personnel")
    For j = 2 To .Range("A" & Rows.Count).End(xlUp).Row
      If .Range("C" & j) = Me.ComboBox1 And .Range("F" & j) = "" Or .Range("F" & j) > Me.Calendar1.Value Then
        Me.ComboBox2.AddItem .Range("A" & j) & " " & .Range("B" & j)
      End If
    Next j
  End With

- comment vérifier qu'il n'y a pas de doublons saisie, je ne doit pas pouvoir enregistrer 2 fois la même personne sur la même journée.

à toi aussi

A vérifier

Bonjour et merci Banzai d'avoir pris le temps de me répondre malgré mon regrettable manque de politesse sur le post précédent.

J'ai regardé le fichier et je ne comprends pas le code suivant

If .Range("C" & j) = Me.ComboBox1 And .Range("F" & j) = "" Or .Range("F" & j) >= Date + 20 Then

Date + 20 ?

Dans l'équipe A, le contrat du nom KKK arrête au 10/11/2014 or quelque soit la date, il n'apparaît jamais.

Bonjour

Ouups désolé c'était juste pour les tests

Il faut bien sur supprimer le +20

Une nouvelle version avec un nouveau test

Bonjour,

en remplaçant Date par Me.Calendar1.Value ça fonctionne parfaitement.

Bonsoir,

Sur le code :

    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
      If Me.TextBox1 = "" Then Exit Sub
      If Not Me.TextBox1 Like "[0-2][0-9][:][0-5][0-9]" Or Not IsDate(Me.TextBox1) Then
        MsgBox "Heure non valide"
        Cancel = True
      End If
    End Sub

si je veux le mettre sur 6 textbox je le recopie, mais est que je peux l'appliquer au 6 en même temps si les noms des textbox se suivent ? par exemple textbox 1 à 6 ?

Bonsoir

C'est une procédure événementielle qui est déclenchée par ce contrôle

Donc malheureusement tu ne peux pas faire une boucle

Il y aurait la solution du module de classe mais pour 6 contrôles je ne sais pas si cela vaut le coup

Bonsoir Banzai,

Je m'étais imaginé quelque chose type textbox(i) mais je ne voyais pas comment faire une boucle.

disons que pour l'instant 6 textbox ce n'est pas grave, mais je m'étais imaginé faire la saisie des salariés dans un autre userform et créer les heures de début et de fin ce qui m'en rajouterai 12. Mais je ne suis pas rendu là.

Rechercher des sujets similaires à "utilisation listbox complementaires"