XL 2016 Combobox en cascade & incrémentation d'indice

MyloX

XLDnaute Nouveau
Bonjour à tous !


Je sollicite aujourd'hui votre aide pour un soucis que je rencontre au niveau de ComboBox dans un UserForm... J'essaie de faire en sorte d'avoir des cascades permettant de restreindre les choix d'une ComboBox en fonction d'une autre préalablement renseignée.

Les ComboBox concernées sont les suivantes : celle portant sur le choix du continent et celle portant sur les pays. J'aimerais, par exemple, lorsque je sélectionne le continent "AMERIQUES", n'avoir que les pays qui sont rattachés à ce continent.


En plus de ça, dans le but d'avoir un identifiant unique pour les actions renseignées dans le tableau de l'onglet "act_men", j'aimerais pouvoir incrémenter automatiquement l'indice de l'action créée via l'userform une fois le porteur de l'action sélectionné. J'avais essayé une méthode de comparaison avec la fonction Left entre les codes du tableau et le porteur de l'action renseigné dans la combobox... Sans succès. Des suggestions de votre part ?


Cordialement,
MyloX
 

Pièces jointes

  • Essai.xlsm
    34.9 KB · Affichages: 15
Solution
remplacez les 2 macros suivantes "sbTime_SpinDown" et "sbTime_SpinUp" par celles-ci:

VB:
Private Sub sbTime_SpinDown()
    Pos2Points = InStr(1, tbTime, ":", 1)
    Heures = Left(tbTime, Pos2Points - 1) * 1
    Minutes = Mid(tbTime, Pos2Points + 1, 2) * 1
    If Minutes - 15 < 0 Then
        Minutes = 45
        Heures = Heures - 1
    Else
        Minutes = Minutes - 15
    End If
    If Heures < 0 Then
        Heures = 0
        Minutes = 0
    End If   
    Me.tbTime = Heures & ":" & Minutes
End Sub

Private Sub sbTime_SpinUp()
    Pos2Points = InStr(1, tbTime, ":", 1)
    Heures = Left(tbTime, Pos2Points - 1) * 1
    Minutes = Mid(tbTime, Pos2Points + 1, 2) * 1
    If Minutes + 15 = 60 Then
        Minutes = 0
        Heures =...

Rouge

XLDnaute Impliqué
Bonjour,

Pour la première question:
VB:
Private Sub cbCont_Change()
    Dim f1 As Worksheet
    Dim c As Range
    Me.cbPays.Clear
    Set f1 = Sheets("pay_aff")
    Set d = CreateObject("Scripting.Dictionary")
    For Each c In f1.Range("A2:A" & f1.Range("A" & Rows.Count).End(xlUp).Row)
        If c = cbCont And Not d.exists(c.Offset(0, 1).Text) And c.Text <> "" Then d(c.Offset(0, 1).Text) = ""
    Next c
    Me.cbPays.List = d.keys
    Set d = Nothing
End Sub

Pour la deuxième, pas vraiment compris comment vous procédez, il faut donner des exemples.

Cdlt
 

MyloX

XLDnaute Nouveau
Bonjour @Rouge et merci pour ta réponse.

Pour la 2e question, je souhaite que chaque action ait un identifiant unique.
Pour se faire, j'aimerais que chaque action ait le type de code tel que [XX]n, où [XX] correspond au porteur d'action et n au numéro d'action. Ce n doit s'incrémenter à chaque action portée par la personne sélectionnée.

Par exemple, AM a déjà créé 2 actions qui sont référencées dans le tableau de l'onglet "act_men". Il y a donc 2 références d'action commençant par "AM" et se finissant par un nombre n (ici, 1 pour la première action et 2 pour la deuxième). La dernière action créée par AM a donc le code "AM2" comme identifiant.

J'aimerais que la prochaine action créée ait automatiquement un code unique correspondant, dans cet exemple, à "AM3" (action n+1). J'espère que j'aurais su mieux me faire comprendre...

Cordialement,
MyloX
 

MyloX

XLDnaute Nouveau
Re @Rouge, le forum,

Tout d'abord merci Rouge de m'aider. Ton code marche super bien à l'exception près que je ne peux pas comptabiliser les heures lorsque c'est supérieur à 24 heures... J'ai essayé d'y remédier mais la seule chose que j'ai réussi à faire sans erreur au niveau du code, c'est de réinitialiser le compter. Du coup, je me permet de solliciter à nouveau ton aide pour gérer ce problème-là.

Par exemple, je veux pouvoir afficher 25:00:00 si la personne a travaillé 25 heures sur l'action en question.

Merci d'avance.
Cordialement,
MyloX
 

Rouge

XLDnaute Impliqué
remplacez les 2 macros suivantes "sbTime_SpinDown" et "sbTime_SpinUp" par celles-ci:

VB:
Private Sub sbTime_SpinDown()
    Pos2Points = InStr(1, tbTime, ":", 1)
    Heures = Left(tbTime, Pos2Points - 1) * 1
    Minutes = Mid(tbTime, Pos2Points + 1, 2) * 1
    If Minutes - 15 < 0 Then
        Minutes = 45
        Heures = Heures - 1
    Else
        Minutes = Minutes - 15
    End If
    If Heures < 0 Then
        Heures = 0
        Minutes = 0
    End If   
    Me.tbTime = Heures & ":" & Minutes
End Sub

Private Sub sbTime_SpinUp()
    Pos2Points = InStr(1, tbTime, ":", 1)
    Heures = Left(tbTime, Pos2Points - 1) * 1
    Minutes = Mid(tbTime, Pos2Points + 1, 2) * 1
    If Minutes + 15 = 60 Then
        Minutes = 0
        Heures = Heures + 1
    Else
        Minutes = Minutes + 15
    End If
    Me.tbTime = Heures & ":" & Minutes
End Sub
 

Pièces jointes

  • MyloX_Combobox en cascade & incrémentation d'indice_2.xlsm
    36.1 KB · Affichages: 11

Discussions similaires

Statistiques des forums

Discussions
314 729
Messages
2 112 271
Membres
111 482
dernier inscrit
constykam