XL 2019 Saisie Formulaire par ComboBox, mais pas que !

Choco2x

XLDnaute Occasionnel
Bonjour à toutes et à tous !


Je n’ai pas trouvé de solution à mes besoins en cherchant dans les sujets, je me permets donc de venir vers vous.

J’ai un formulaire qui doit remplir un tableau.

Sur une autre page (Feuille 3), j’ai une « base de données » composée de deux tableaux (1 et 2) à remplir à l’aide de ce formulaire.

De même, j’aimerais que mes combobox me permettent de voir ce qui a déjà été saisi, et que si je saisis un nouveau mot il entre de ce fait dans la base de données.

Pour le moment ça ne fonctionne que si je n’ai qu’un champ rempli, sur les 3 qui m’intéressent (deux champs ont un même tableau en commun).

Sachant qu’il y aura forcément des doublons, j’ai essayé d’intégrer une macro qui les efface. Et pour terminer j’aimerais que les tableaux de ma base de données soit en ordre alphabétique, afin de mieux profiter des menus déroulants en découlant.
Tout fonctionnait jusqu'à ce que j'essaye de remplir mes champs d'après les combobox, car avant j'utilisais des textbox, mais alors je ne pouvais pas voir si ce que j'allais taper était déjà dans la base de données ou pas...


Voici dont le résultat de mes galères depuis 15 jours…

Ne critiquez pas mes formules svp, je me débrouille comme je peux, j’ai utilisé un ensemble de formules trouvées sur internet et de macros recopiées… ;)

Allez, c'est parti (je mets tout, pour ne pas passer à côté du problème !) :



Private Sub btnAjout_Click()


‘Quand je valide mon formulaire, il rempli un premier tableau journalier.

Feuil1.Activate

Range("A2:K2").Select

Selection.ListObject.ListRows.Add (1)

Range("A3:K3").Select

Selection.Copy

Range("A4").Select

Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _

SkipBlanks:=False, Transpose:=False

Application.CutCopyMode = False

Range("A2").Select

Selection.Offset(1, 0).Select

ActiveCell = txtNom.Value

ActiveCell.Offset(0, 1).Value = txtPrénom

ActiveCell.Offset(0, 3).Value = txtDateNaiss

ActiveCell.Offset(0, 4).Value = txtDateTps

ActiveCell.Offset(0, 6).Value = cboHeureDép

ActiveCell.Offset(0, 7).Value = cboServiceDép

ActiveCell.Offset(0, 8).Value = cboHeureArr

ActiveCell.Offset(0, 9).Value = cboServiceArr

ActiveCell.Offset(0, 10).Value = cboMotif

ActiveCell.Offset(0, 11).Value = txtComment



If OptbtnMme.Value = True Then

Range("C3").Value = "Femme"

End If

If OptbtnM.Value = True Then

Range("C3").Value = "Homme"

End If



If OptbtnAmb.Value = True Then

Range("F3").Value = "Ambulance"

End If

If OptbtnVSL.Value = True Then

Range("F3").Value = "VSL"

End If





Feuil3.Activate

Range("A1").Select

Selection.End(xlDown).Select 'On se positionne sur la dernière ligne

Selection.Offset(1, 0).Select 'On se décale d'une ligne vers le bas

ActiveCell = Me.cboServiceArr.Value



‘********* CA NE FONCTIONNE QUE JUSQUE LA, si je valide ce qui suit ça ferme Excel !*************



Feuil3.Activate

Range("B1").Select

Selection.End(xlDown).Select 'On se positionne sur la dernière ligne

Selection.Offset(1, 0).Select 'On se décale d'une ligne vers le bas

ActiveCell = Me.cboMotif.Value



Feuil3.Activate

Range("B1").Select

Selection.End(xlDown).Select 'On se positionne sur la dernière ligne

Selection.Offset(1, 0).Select 'On se décale d'une ligne vers le bas

ActiveCell = Me.cboServiceDép.Value



'Trie les tableaux



Sheets("Base de données").Select

Range("Tableau1[Etablissements]").Select

ActiveWorkbook.Worksheets("Base de données").ListObjects("Tableau1").Sort. _

SortFields.Clear

ActiveWorkbook.Worksheets("Base de données").ListObjects("Tableau1").Sort. _

SortFields.Add Key:=Range("A2"), SortOn:=xlSortOnValues, Order:= _

xlAscending, DataOption:=xlSortNormal

With ActiveWorkbook.Worksheets("Base de données").ListObjects("Tableau1").Sort

.Header = xlYes

.MatchCase = False

.Orientation = xlTopToBottom

.SortMethod = xlPinYin

.Apply

End With

Range("Tableau2[Services]").Select

ActiveWorkbook.Worksheets("Base de données").ListObjects("Tableau2").Sort. _

SortFields.Clear

ActiveWorkbook.Worksheets("Base de données").ListObjects("Tableau2").Sort. _

SortFields.Add Key:=Range("B2"), SortOn:=xlSortOnValues, Order:= _

xlAscending, DataOption:=xlSortNormal

With ActiveWorkbook.Worksheets("Base de données").ListObjects("Tableau2").Sort

.Header = xlYes

.MatchCase = False

.Orientation = xlTopToBottom

.SortMethod = xlPinYin

.Apply

End With



'***********************************************

'Enlève les doublons



Feuil3.Activate

Range("Tableau1[Etablissements]").Select

ActiveSheet.Range("Tableau1[Etablissements]").RemoveDuplicates Columns:=1, Header:= _

xlYes

Range("Tableau2[Services]").Select

ActiveSheet.Range("Tableau2[Services]").RemoveDuplicates Columns:=1, Header:= _

xlYes

Range("A6").Select



**************************la suite fonctionne*********************



OptbtnMme = ""

OptbtnM = ""

OptbtnAmb = ""

OptbtnVSL = ""

txtNom = ""

txtPrénom = ""

cboSexe = ""

txtDateNaiss = ""

txtDateTps = ""

CboModeTps = ""

cboHeureDép = ""

cboServiceDép = ""

cboHeureArr = ""

cboServiceArr = ""

cboMotif = ""

txtComment = ""



Sheets("Commandes").Select

Range("Tableau10[NOM]").Select



End Sub



‘*********************************et voilà !!*****************************





Mille remerciements par avance à qui pourra m’aider !
 

Dranreb

XLDnaute Barbatruc
Soit, je laisse tomber. Mais pour répondre à votre question le plus gros de la programmation aurait été dans la Sub UserForm_Initialize à raison d'une ligne CLs.Add Me.CBxMachinTruc , "Le titre de la colonne" pour chaque ComboBox participant à une recherche en tableau et une ligne CAs.Add Me.AutreCtl, "Le titre de la colonne" pour les autres contrôles. Les autre procédures nécessaires n'auraient eu en général que quelques lignes, parce qu'une fois instruits comme indiqué les objets CLs et CAs auraient su tous seuls dans quelle colonnes envoyer ou récupérer les infos, il suffisait de leur demander de le faire (méthodes ValeursDepuis TVL et ValeursVers TVL). Mais je vous les aurais écrites de toute façon.
 
Dernière édition:

Choco2x

XLDnaute Occasionnel
Merci pour cette attention, mais sincèrement je préfère apprendre, même si le résultat sera peut-être plus basique, qu'avoir un produit clef en main (même si au final c'est presque ce que j'ai eu 🙏 ).
Et j'aime vraiment me plonger dedans et comprendre pour pouvoir en faire ce que je veux, alors que là, quoi que tu essayes de m'expliquer, je ne comprends rien.

Merci tout de même, encore une fois ;)
 

Choco2x

XLDnaute Occasionnel
Bonjour !

JM27 est-tu dans les parages ?...
Si je peux abuser...

- Je ne comprends pas comment gérer la désignation des colonnes à trier, dans les bases de données...
Quand j'ai :
Me.ComboEtablissementArrivée.AddItem (Me.ComboEtablissementArrivée)
' j'effectue un tri dans la feuille de travail colonne services(D)
TriEtablissement
End If
qu'est-ce qui lui dit quelle colonne trier ? Car du coup ça ne tombe plus juste, depuis que j'ai enlevé une colonne.
je risque d'avoir le même souci avec la BD patients. J'aimerais comprendre, pour ne pas être bloqué par un simple changement de colonne !

- la civilité s'efface du formulaire dés qu'on saisit le nom.

- Est-il possible de remplacer les Combobox "civilité" et "moyen de transport" par des Boutons radio, comme j'avais fait dans le fichier originel, afin d'éviter des clics ? Je vais me pencher dessus, mais j'ai peur du transfert des données vers les bases, manifestement c'est là que je sèche.

- Il reste des #REF! dans les Formules en mémoire... A effacer ?

Merci pour toute réponse, complète ou partielle... 🙏
 

Pièces jointes

  • Transport Hopital indice A en conversion 2.xlsm
    69.9 KB · Affichages: 18
Dernière édition:

JM27

XLDnaute Barbatruc
bonjour
quand tu vois cela TriEtablissement
il s'agit d'une macro
Dans le VBA tu as un menu efficace
il te suffit de sélectionner TriEtablissement et tu fais
Edition/rechercher tu sélectionne projet en cours et tu fais suivant , et la tu accèdes à la macro de tri
qui est dans module1.
Tu as supprimer des colonnes , il faut modifier les macro et les tags des objets en conséquence.
Tu as modifié le nom des feuille : idem agir sur les macro ( un indice : menu édition/remplacer)
Les boutons si tu veux mais c'est plus difficile à gérer qu'une combo (dans ce programme)
Pour civilité : effacement
essayes dans Private Sub ComboNom_Change()
en début de macro
supprimer
Me.ComboBoxCivilité = ""

ou plutôt mettre un rem(') devant
' Me.ComboBoxCivilité = ""

Je te laisses le soin de modifier
si tu n'y arrive pas reviens nous voir
 

Choco2x

XLDnaute Occasionnel
Tout est bon !!
Plus qu'à tenter mes Boutons radio (je ne lâche rien ! 🤣), mettre la présentation un peu moins austère, et j'aurai un fichier fonctionnel nickel top !!

Je comprends de mieux en mieux le fichier, même s'il reste hélas bien des zones obscures...
J'espère juste ne pas avoir à modifier ces lignes ;)

Les infirmières te remercient, et surtout moi, qui aurait eu un codage bien plus aléatoire et long !!
Donc merci encore ! 🙏🙏
 

JM27

XLDnaute Barbatruc
bonjour

un indice

VB:
Private Sub ComboPrénom_Change()
    If Me.ComboNom.ListIndex <> -1 And Me.ComboPrénom.ListIndex <> -1 Then
        Me.TxtDateDeNaissance = Sheets("BD patients").Range("C" & Me.ComboPrénom.List(ComboPrénom.ListIndex, 1))
        Me.ComboBoxCivilité = Sheets("BD patients").Range("A" & Me.ComboPrénom.List(ComboPrénom.ListIndex, 1))
    End If
End Sub
 

Statistiques des forums

Discussions
311 721
Messages
2 081 929
Membres
101 843
dernier inscrit
Thaly