XL 2013 Combobox en cascade

exceladdict

XLDnaute Nouveau
Bonjour,
j'essaye de créer un programme en vba qui alimente un Userform à partir de 2 feuilles différentes(donc 2 tableaux différents) au moyen de 2 combobox. Le premier combobox sert à sélectionner l'adresse d'un médecin ou d'un établissement de santé le second à récupérer les barèmes de prise en charge sécurité sociale et mutuelle en fonction de l'acte ou de la spécialité. Le principe est de rechercher via la liste du combobox1 le nom du praticien et une fois trouvé sélectionner à partir du combobox 2 un acte ou une spécialité associée.
Le premier step se déroule très bien mais lorsque je veux accéder aux données de la seconde base ("Remb") il ne se passe rien. Je n'ai pas d'erreur mais je n'obtiens pas les données correspondantes.
J'ai essayé des corrections avec des conseils glanés sur divers forums mais rien n'y fait je reste bloqué…
D'où ma démarche ici...aide bienvenue Merci
Ci-Joint contenu de l'userform et fichier *.xlsm

Private Sub ComboBox1_Change()
ComboBox1.Value = UCase(ComboBox1.Value)

Dim nom As String, adr As String, plage As Range, recherche As Range
With Sheets("Base")
Set plage = .Range("A1:A" & .Range("A" & .Rows.Count).End(xlUp).Row)
End With
nom = ComboBox1.Value
If nom = "" Then Exit Sub



Set recherche = plage.Find(nom, , xlValues, xlWhole)
If Not recherche Is Nothing Then
adr = recherche.Address

With recherche

ComboBox1.Value = .Value 'nom du med pointé par adr
ComboBox2.Value = .Offset(0, 9).Value
TextBox11.Value = .Value
TextBox12.Value = .Offset(0, 1).Value
TextBox13.Value = .Offset(0, 2).Value
TextBox14.Value = .Offset(0, 3).Value
TextBox15.Value = .Offset(0, 4).Value
TextBox16.Value = .Offset(0, 5).Value
TextBox17.Value = .Offset(0, 6).Value
TextBox18.Value = .Offset(0, 7).Value
TextBox22.Value = .Offset(0, 8).Value

End With
Else
MsgBox ("Données Inexistantes création de fiche obligatoire ")
UserForm4.Show
End If

End Sub

Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If IsNull(ComboBox1.Value) Or ComboBox1.Value = "" Then MsgBox "Le Champ Nom ne peut pas être vide"
End Sub


Private Sub ComboBox2_change()
Dim nblig As Long
nblig = Range("B" & Rows.Count).End(xlUp).Row
ComboBox2.Value = UCase(ComboBox2.Value)
'------------------------------------------------------------------------------------
With Sheets("Remb")
nblig = .Range("B" & Rows.Count).End(xlUp).Row
End With

With Me.ComboBox2
.List = Sheets("Remb").Range("B2:B" & nblig).Value
'.ListIndex = .ListCount - 1 '
End With

'--------------------------------------------------------------------------------------


Dim codess As String, adrx As String, xplage As Range, rech As Range


With Sheets("Remb")
Set xplage = .Range("B2:B" & .Range("B" & .Rows.Count).End(xlUp).Row)
End With
codess = Left(ComboBox2.Value, 2)
MsgBox (codess)
If codess = "" Then Exit Sub

Set rech = xplage.Find(codess, , xlValues, xlWhole)
If Not rech Is Nothing Then
adrx = rech.Address
MsgBox (adrx)
Do
With rech

ComboBox2.Value = .Value ' codification secu pointé par adrx
TextBox7.Value = Format(.Offset(0, 1).Value, "0.00") 'base du remboursement sécu
TextBox5.Value = Format(.Offset(0, 2).Value, "0.00") ' Ticket Modérateur
TextBox6.Value = Format(.Offset(0, 3).Value, "0.00") 'BRSS sécu
TextBox4.Value = Format(.Offset(0, 4).Value, "0.00") 'FRanchise
TextBox8.Value = Format(.Offset(0, 2).Value, "0.00") 'TM Mut
TextBox9.Value = Format(.Offset(0, 6).Value, "0.00") '%BRSS Mut
TextBox10.Value = Format(.Offset(0, 7).Value, "0.00") 'Plafond ou forfait

End With

Loop While Not rech Is Nothing And recherche.Address <> adrx
Else

End If

End Sub

Private Sub CommandButton2_Click()

' paraméter ici les champs à sauvegarder dans la base livre

Unload Me


End Sub
Private Sub CommandButton3_Click()
'effacement des donnéees du formulaire sans le décharger
Dim c As Control
For Each c In Me.Controls
Select Case TypeName(c)
Case "TextBox"
c.Value = ""
Case "CheckBox"
c.Value = False
Case "ListBox", "ComboBox"
c.ListIndex = -1
End Select
Next c
End Sub
Private Sub DTPicker1_CallbackKeyDown(ByVal KeyCode As Integer, ByVal Shift As Integer, ByVal CallbackField As String, CallbackDate As Date)
'ouverture du cal avec date du jour
Me.DTPicker1.Value = Date
End Sub

Private Sub UserForm_Initialize()

Dim plage As Long
plage = Sheets("Base").Range("A" & Rows.Count).End(xlUp).Row + 1
'on limite l'affichage de la liste du combobox aux seuls enregistrements présents
' et on évite le recours à la propriété row

With Me.ComboBox1
.List = Sheets("Base").Range("A2:A" & plage).Value
'.ListIndex = .ListCount - 1
End With

End Sub
 

Pièces jointes

  • STC.test.xlsm
    658.3 KB · Affichages: 39

ChTi160

XLDnaute Barbatruc
Bonjour Exceladdict
Bienvenue
je pense qu'il te faut nous donner un peu plus d'infos sur la méthode .
met un exemple de ce que tu veux
ex : je sélectionne dans "Nom Praticien/Etablissement" puis je fais quoi ? pour avoir quoi ? puis etc
Merci par avance
Amicalement
jean marie
 

exceladdict

XLDnaute Nouveau
Bonjour Jean-Marie,
Merci de te pencher sur mon problème. La méthode est la suivante : je veux créer une fiche de dépense santé. Je choisis le médecin (sélection du combo1) ce qui me donne dans un premier temps ses coordonnées administratives (sélection via combo1 du tableau "Base" par find nom). une fois ces données récupérées dans l'userform1, je passe au combo2 (combobox1_change() )( toujours dans l'usf1) qui est sensé par sélection me donner la codification sécurité sociale liée à la spécialité du praticien ou de l'acte médical 'tableau("Remb" find préfixe codification len(combobox2.value,2). Quand /(si) j'ai tous ces renseignements collectés dans USF1 je sauvegarde cette fiche dans le tableau " Livre" jusqu'au contrôle des remboursements. A partir du moment ou les remboursements sont contrôlés je veux créer un onglet automatique au nom du médecin (si non existe) et j'archive l'enregistrement clotûré. Tant que la validation des remboursements n'est pas faite l'enregistrement reste pendant dans la base "livre". Petite variante si le médecin n'est pas dans la "base" on créee sa fiche.
Mon problème se situe au niveau de la sélection du combo2 puisque la recherche ne semble pas aboutir et que les données de comptabilité ne sont pas récupérées dans l'usf1 (Base sécu,Ticket Mod, etc...).
J'ai bien tenté de modifier le range et quelques autres trucs mais rien à faire.
Voilà j'espère que c'est plus clair pour toi....et que ça répond à ta question.
Cordialement,
 

exceladdict

XLDnaute Nouveau
Jean Marie,
je viens de voir tes modifications, la recherche est donc fructueuse sur la partie comptable. Le problème c'est qu'un praticien ou un établissement peuvent pratiquer des actes différents. Par exemple le dentiste Mr Machin peut faire une consultation, arracher une dent, et je peux lui associer des travaux de pose d'implants. Le choix de ces différents actes est rendu possible grâce à la liste du combobox2. Ce qui dans l'état actuel de ta méthode ne fonctionne pas.
 

ChTi160

XLDnaute Barbatruc
Re
je pensais avoir compris que la base "Remb" devait contenir l'ensemble des prestations réalisables par un même praticien .
c'est a dire que le Praticien ex :
LEGAY dont la Codification SS est
CA-CONSULT. GEN./GEN. SECTEUR 1/GEN. OPTAM/SPEC. SECTEUR 1 /SPEC.OPTAM (PS) + SECTEUR 2 OPTAM
qu'a partir de là en récupérant les Deux premiers caractères de sa Codification soit Ici : "CA"
on aller récupérer l'ensemble des Actes pratiqués par ce Praticien (Repérés dans la Base "Remb" par le Code- CA)
Ce qui ensuite permettait le Choix dans le Combobox2 .
je n'ai donc rien compris ! Lol
je vais relire ce que tu as mis et voir ce que je peux faire .
Dans l'attente
Bonne fin de journée
jean marie
 

ChTi160

XLDnaute Barbatruc
Re
On pourrait imaginer la creation d un tableau (abondable)qui reprendrait l ensemble des actes possibles par praticien et qui serait lier au code .
Exemple : a partir de CA --->On Recupererait les actes commencants par CA1-CA2-CA3 dans la feuille “Remb” Etc
Ou ajouter une colonne a la feuille base qui reprendrait ces codifications ex: CA-1|CA-2 |CA-3 etc
A voir
Jean marie
 
Dernière édition:

exceladdict

XLDnaute Nouveau
Re, je viens de voir ta dernière modif et, à priori le résultat avec LEGAY est bien celui que je recherche. Toutefois tu crées des sous groupes CA1,2,3 etc... et là j'avoue que j'ai du mal à comprendre. Je m'explique, les codifications qui correspondent à la spécialité (c'est à dire à droite du préfixe CA- par exemple) sont des nomenclatures réelles figées par la Sécu. j'ai ajouté un préfixe pour simplifier la recherche car comme tu le vois le libellé des spécialités est alambiqué au possible. L'exercice est de conserver justement la codification sécu pour contrôler les remboursements. Ensuite, si on prend l'exemple de Legay... il est Médecin généraliste Secteur 2 mais, ( car comme disait ma grand-mère dans une phrase rien avant le mais n'est important) sa situation peut évoluer en secteur 1 conventionné, il peut changer non OPTAM ou évoluer vers un statut non conventionné.... Pour Julliard qui est dentiste je dois pouvoir lui affecter une consultation simple ou une extraction qui sera considéré par la sécu comme un acte à part entière et ensuite je dois pouvoir lui affecter des travaux de prothèses dans des fiches séparées etc... Pour une clinique ou l'hôpital je dois pouvoir affecter des actes divers comme biologie, chirgugie, consultation hospitalière... c'est pôurquoi je dois accéder à toute la liste de la base REMB sans la limiter par praticien ou établissement.....
Ensuite mon système parait plus simple puisque j'exporte vers "Livre" toutes les fiches et que je les distribue dans un onglet spécifique par praticien une fois qu'elles sont vérifiées et clôturées....qu'en pense-tu ?

Maintenant la question bête ... quest-ce qui dans la version actuelle empêche dans ton code d'étendre la recherche à l'ensemble de la liste de la base "Remb" dans le combobox 2 et de l'associer au contenu de la combo 1 ?
Merci de ton aide,
 

ChTi160

XLDnaute Barbatruc
Re
j'imagine que tout cela est doit respecter la nomenclatures réelles figées par la Sécu .
moi je suis nul en tout ça Lol
il faut donc que tu m'aide et moi je code Lol
il me faut un exemple concret pour que je puisse comprendre la démarche ;
il faut donc que tu me Met un exemple ou deux , de ce que tu as et de ce que tu veux .
je vais déjà répondre à "la question bête" Lol
Rien ! c'est déjà le Cas on passe en revue l'ensemble de la Base de données "Remb" en y cherchant tous ce qui a un rapport avec le Code ex : "CA"
que veux tu dire par :"et de l'associer au contenu de la combo 1" ?
Est ce que dans ce fichier exemple toutes les données qui permettraient de réaliser ce que tu veux sont présentes ?
si oui ! met moi quelques exemples:
Un dentiste , un généraliste , un Etablissement , ce que tu peux , pour me faire comprendre ce qu'il faut récupérer et a partir de quoi ?
la Logique de ce regroupement d'actes par praticien ou Etablissement etc .....
Tu vois beaucoup de questions pour comprendre , c'est un minimum Lol
pour ce qui est de l'export vers feuille "Livre" je n'en suis pas encore là et je n'y ai pas regardé !Lol
Dans l'attente
Bonne fin de soirée
jean marie
 

ChTi160

XLDnaute Barbatruc
Re
je me demande si dans la Feuille "Base" je récupére par exemple pour "LEGAY"
Codification SS :
CA-CONSULT. GEN./GEN. SECTEUR 1/GEN. OPTAM/SPEC. SECTEUR 1 /SPEC.OPTAM (PS) + SECTEUR 2 OPTAM
Faut il décomposer cette nomenclature et rechercher chaque rubrique contenant ces éléments dans la feuille "Remb" ?
exemple : CONSULT. GEN.
Puis GEN. SECTEUR 1
Puis GEN. OPTA etc etc
jean marie
 

exceladdict

XLDnaute Nouveau
Merci de ta patience ....
La nomenclature ne doit pas être touchée elle est comme ça et la recherche se fait par le préfixe afin de simplifier (CA-CB-CC-DA). La base REMB n'est pas terminée car comme tu peux l'imaginer c'est un travail de recherche important vu le nombre de codes que la sécu a inventé. Avant de finaliser tout ç il faut que mon moteur de recherche fonctionne.
concernant la précision par l' exemple que tu demandes

Hôpital Pasteur------>Combo1----Trouve (Base) ---> Adresse et contacts ----> USF1
------> Combo2 ------>Acte de biologie ----trouve ---(Remb)--> Barèmes Sécu et Mutuelle ---->USF1
= USF1 Complété ------> Ecrit dans "Livre"

Etablissement hopital ... Coordonnées admin. dans "Base" Acte de biologie ou Acte chirurgie ou forfait hospitalier codification sécu dans "Remb"

En gros je voudrais comprendre quoi faire à partir de ton dernier code pour qu'il me soit possible de dérouler dans la liste du combo2 toute la colonne B de la base REMB. et de l'associer à la fiche en cours par le simple fait de la sélectionner par combo2_change. Tu as presque résolu mon problème, peut-être un paramètre de List à modifier....
 

ChTi160

XLDnaute Barbatruc
Re
mettre toutes les données de la colonne B dans Combobox 2 c'est simple a faire !
ca veut dire que quelques soit le choix dans Combobox1 tu dois avoir toutes les données de la Colonne B de la Feuille "Remb" dans Combobox2 ?
arff encore une question
que veux tu dire par :
et de l'associer à la fiche en cours par le simple fait de la sélectionner par combo2_change
dans l'attente
jean marie
 

exceladdict

XLDnaute Nouveau
Oui c'est exactement ça quelque soit le choix de combo1 avoir tout l'éventail de la colonne B de Remb.
Ce que je veux dire par "et de l'associer à la fiche en cours par le simple fait de la sélectionner par combo2_change" c'est faire la recherche des codifications sécu juste à partir de la sélection change de combobox2 et récupérer les données correspondantes de left(combobx2.value,2) ebn fait ce que tu décris plus haut "avoir toutes les données de la colonne B de "Remb" dans combo2
 

Discussions similaires

Réponses
1
Affichages
122
Réponses
0
Affichages
83
Réponses
6
Affichages
202