Aide sur code ?

Bonjour à tous

Je viens de créer un code mais je bloque sur un petit détail dont je vous résume.

Cela concerne un If, voilà je souhaite créer un message d'alerte en obligeant le renseignement de certains objets avant l'enregistrement des données.

Dans mon UF il y a une ListBox à choix multiples dont le renseignement est obligatoire mais je n'arrive pas à l'inclure dans mon code ci après.

J'ai réussi à faire ce code qui fonctionne très bien,

If ComboBox1 = "" Or ComboBox2 = "" Or ComboBox3 = "" Or ComboBox4 = "" Or TbHeureDeb = "" Or TbHeureFin = "" Then
    MsgBox "Le repère * indique renseignement obligatoire.", vbOKOnly + vbInformation, "Information"
    Exit Sub
 End If

j'ai bien tenté Or ListBox1-1 / Or ListBox1.Select="" mais ne marche.

J'aimerai l'alerte si rein n'ai sélectionné dans ListBox, svp.

Merci de votre aide.

Cdlt

Bonsoir,

La propriété Selected est celle utilisable pour définir les éléments sélectionnés dans une ListBox.

Généralement on l'utilise dans une boucle pour récupérer les éléments sélectionnés...

L'aide de VBA précise que cette propriété renvoie un tableau. Je tenterai donc de tester cette propriété avec une fonction comme Match en recherchant True, s'il n'y en a pas Match renvoie une erreur...

Sous réserve de test...

Cordialement.

Bonsoir,

Personnellement lorsque je veux voir si une Listbox est vide, j'utilise toujours ListBox.ListIndex = -1 qui permet de signaler qu'il n'y a aucune valeur dans la ListBox ou que celle-ci ne fait pas parti des valeurs prédéfinies.

En espérant t'avoir aidé.

Bonne soirée

Bonsoir sharney,

Oui pour une ListBox unisélection, ListIndex est inopérant pour une multisélection/

Bonjour MFerrand et Sharney

Merci de vous êtes arrêté sur mon post et d'y avoir proposé des solutions.

En suivant vos conseils et un peu aide sur internet je suis arrivé à une solution qui fonctionne, en espèrant n'avoir pas trop fais d'erreur.

J'ai fais un For CptLb = 0 To (ListBox1.Lis.......... / Next CptLb que j'ai inclus dans mon bouton CommandButton1_Click, mais avant il fallait mettre dans Initialize ceci :

Private Sub UserForm_Initialize()
ListBox1.ListIndex = -1
End Sub

et ensuite mon code :

'Bouton Valider, enregistre les infos du formulaire dans feuille "Enrg Mouvts"
 Private Sub CommandButton1_Click()
 Dim num As Long 'N° de la ligne
 Dim i, J As Integer
 Dim Lg
 Dim CptLb As Single

  'Si les parties avec le repère * n'est pas renseigné alors message d'alerte
 If ComboBox1 = "" Or ComboBox2 = "" Or ComboBox3 = "" Or ComboBox4 = "" Or TbHeureDeb = "" Or TbHeureFin = "" Then
    MsgBox "Le repère * indique renseignement obligatoire.", vbOKOnly + vbInformation, "Information"
    Exit Sub
 End If

'Si aucune sélection dans ListBox alors message d'alerte
 For CptLb = 0 To (ListBox1.ListCount - 1)
   If ListBox1.ListIndex = -1 Then
     MsgBox "Sélectionnez au moins un nom.", vbOKOnly + vbInformation, "Information"
     Exit Sub
   End If
 Next CptLb

  'Si tout est renseigné, un message de confirmation s'affiche
 If MsgBox("Confirmez-vous cet enregistrement ?", vbYesNo, "Demande de confirmation") = vbNo Then
    Exit Sub
  Else
 With Sheets("Enrg Mouvts")
   num = Sheets("Enrg Mouvts").Range("A65536").End(xlUp).Row + 1
   For Lg = 0 To ListBox1.ListCount - 1
   If ListBox1.Selected(Lg) = True Then
     .Range("A" & num).Value = CDate(TextBox1)
     .Range("B" & num).Value = TextBox2
     .Range("C" & num).Value = ComboBox1
     .Range("D" & num).Value = ComboBox2
     .Range("E" & num).Value = ComboBox3
     .Range("F" & num).Value = Format(Me.TbHeureDeb.Value, "hh:mm")
     .Range("G" & num).Value = Format(Me.TbHeureFin.Value, "hh:mm")
     .Range("I" & num).Value = ComboBox4
     .Range("J" & num).Value = ListBox1.List(Lg)
     .Range("K" & num).Value = TextBox8
     num = num + 1
   End If
   Next

   If MsgBox("Voulez-vous faire un autre mouvement ?", vbYesNo) = vbYes Then
     Unload Me
     UF_Formation.Show
     TextBox2 = Time
    Else
     Unload Me
   End If
 End With
  End If
 End Sub

voilà mon chef d'œuvre que je partage avec plaisir, si ça peu aider.

Cdlt

Salut,

Je suis sceptique sur ton test s'agissant de ListBox à miultisélection (Multiselect = True). Seule la propriété Selected indique l'élément est sélectionné ou non.

Mais tu verras bien...

Re

Sceptique !! C'est à dire ?

Le ListBox1.ListIndex = -1 ne conviendrai pas ?

Que ferai tu toi de ton côté comme code ?

Bonsoir,

En reprenant ton dernier code de test :

For CptLb = 0 To ListBox1.ListCount - 1
   If ListBox1.Selected(CptLb) Then Exit For
Next CptLb
If CptLb >= ListBox1.ListCount Then
    MsgBox "Sélectionnez au moins un nom.", vbOKOnly + vbInformation, "Information"
    Exit Sub
End If

Dans mon post précédent sur ton sujet, j'avais évoqué (avec prudence !!!) l'idée d'essayer de tester cette propriété en tant que tableau, mais après quelques recherches et tests infructueux, il semble (sauf peut-être sous Access) qu'il n'y ait pas d'autre moyen que de défiler les éléments pour voir s'il y en a de sélectionné.

Dans une ListBox multisélection, ListIndex ne prend pas la valeur de l'élément sélectionné, mais de la ligne qui le focus,et Value prend la valeur Null. C'est la propriété Selected qui permet de savoir quels sont les éléments sélectionnés.

J'ai supprimé tes parenthèses sur la ligne For... (pas la peine d'en abuser quand rien n'est à isoler). On teste la propriété Selected de chaque élément, dès qu'elle renvoie True on sort de la boucle et on teste la valeur de CptLb : s'il n'y a pas d'élément sélectionné elle a été jusqu'au bout et la dernière valeur ListCount-1 a été incrémentée, elle a donc atteint ListCount...

Cordialement.

Bonjour

Effectivement, tu l'a bien précisé précédemment, je l'avais essayé mais mal positionné dans mon code, c'est bien à moi que reviens l'erreur.

Je viens de tester ton code et ça marche très bien, merci pour tout.

Pour moi tout est bon donc peu mettre résolu.

Bonne continuation

Cdlt.

Rechercher des sujets similaires à "aide code"