Microsoft 365 aide userform

Chapichapo

XLDnaute Junior
Bonjour le Forum;
j'ai adapté des userfom's mais ils ne fonctionnent pas :
1) ufm_patients
a) le bouton enregistrer ne fonctionne pas et j'ai un code : erreur de compilation : seuls les commentaires peuvent apparaître après End Sub, End Function, ou End Property.
b) je souhaiterais pouvoir afficher le nom d'un patient dans la combox nom complet (colonne concat_N_P_P2 de la feuille "patients" ) et pourvoir corriger afin d'adapter la bdd "patients" au besoin à partir de ce userform
c) là je ne vois vraiment pas comment faire si quelqu'un a une idée je suis preneuse : je souhaiterais à l'affichage des données du Usf-patients que je puisse récupérer les valeurs dans un classeur par exemple ou si un numéro ID est créé pouvoir récupérer les valeurs de la ligne de ce n° id dans un autre classeur
2) écran de recherche
a) je souhaiterais quand je sélectionne le type de recherche par entête de colonne que le champ de recherche s'adapte en fonction du contenu de la colonne sélectionnée et l'affiche dans l'écran en dessous.
b) comme je ne sais pas tester je ne sais pas non plus si les boutons du dessus fonctionnent
A force de travailler dessus je ne vois plus où sont mes erreurs étant néophyte en ce domaine
Quelqu'un de plus expérimenté que moi pourrait-il y jeter un oeil ?
j'espère avoir été claire dans les explications
Merci de votre aide
 

Pièces jointes

  • userform_diET_RDV_2.xlsm
    113.4 KB · Affichages: 9

vgendron

XLDnaute Barbatruc
Bonjour

beaucoup d'erreurs dans le code

1) c'est quoi tous ces labels qui polluent le formulaire?
2) le code associé au bouton enregistrer bug
2-1) parce qu'il y a un end sub qui traine en plein milieu de la macro==> le supprimer
2-2) le remplissage fait appel à des controls qui n'existent pas sur le formulaire
pour éviter ca: toujours commencer par "me."
me = le formulaire sur lequel tu travaille
le point active la saisie semi automatique qui te liste les controles disponibles sur le formulaire
 

vgendron

XLDnaute Barbatruc
j'ai fait un peu de tri
1) supprimé les labels inutiles
2) renommé les controls avec des abréviations
Cbx pour combobox
Tbx pour textbox
3) pour le remplissage d'un nouveau contact dans la feuille "Patients"
j'utilise le fait que les données sont dans une table structurée "tbcontacts"
table structurée excel = listobjects vba

ensuite quelques questions
ce formulaire "form_patient" est utilisé pour uniquement CREER un nouveau patient ? ou aussi pour modifier un patient existant?
question sous jacente: à quel moment le combobox "contact_N_P_P2) est il rempli?

le textbox Age n'est jamais calculé.. il faut peut etre le faire..?
le combobx Civilité ne propose aucun choix.. il n'est pas rempli==> à faire dans l'initialize

PS: je pense que les réponses à mes questions sont dans ton premier post...
 

Pièces jointes

  • userform_diET_RDV_2.xlsm
    111.4 KB · Affichages: 2

vgendron

XLDnaute Barbatruc
une nouvelle version ici pour le formulaire de recherche des patients

1) la listbox est chargée avec la table complète
2) dans le combo, tu choisis la colone de recherche
3) quand tu tapes dans le textbox, la listbox filtre automatiquement les lignes

4) que sont censés faire les 3 boutons en haut du formulaire?
 

Pièces jointes

  • userform_diET_RDV_4.xlsm
    106.2 KB · Affichages: 4

Chapichapo

XLDnaute Junior
Bonsoir Vgendron,

Fantastique ! Super !

Merci bcp pour le temps passé sur le formulaire.

C'est mon premier formulaire en temps que tel, j'ai essayé de piocher des idées sur internet mais étant néophyte il a des erreurs que je ne maîtrise pas.
Pour répondre à vos questions :

ce formulaire "form_patient" est utilisé pour uniquement CREER un nouveau patient ? ou aussi pour modifier un patient existant?
les deux

question sous jacente: à quel moment le combobox "contact_N_P_P2) est il rempli?

je concevais la combobox concat_N_P_P2 comme vous l'avez définie en concaténant le nom, le prénom et le prénom 2 et pouvoir différencier les patient
par exemple si j'ai deux personnes qui s'appellent DUPONT Jean je les différencie avec le 2ème prénom

le textbox Age n'est jamais calculé.. il faut peut être le faire..?
le combobx Civilité ne propose aucun choix.. il n'est pas rempli==> à faire dans l'initialize

C'est parfait vous avez effectué le code. Je pensais que l'on pouvait récupérer la donnée du tableau patient
on est d'accord que ton fichier n'a rien à voir avec des recettes de cuisine... et qu'on peut donc supprimer le lien vers un doc sur le one drive qui demande une connexion dès l'ouverture du fichier..?
D'accord mais je ne savais pas comment le supprimer ....

Merci infiniment pour le travail effectué.

Quand je crée une nouvelle fiche j'ai : "

dans le usfpatients
Erreur d'exécution "91" avec le message suivant "variable objet ou variable de bloc With non définie".
Pourriez-vous m'éclairer sur cette erreur?

Merci encore
 

vgendron

XLDnaute Barbatruc
ah oui pardon,
c'est parceque j'ai enlevé la macro
Load_public_variable qui ne sert pas à grand chose..
et du coup. le seul endroit où elle aurait été utile, bah. ca bug..

quand tu as l'erreur, tu cliques sur debuggage
et la ligne qui pose problème est surlignée en jaune

remplace la par celle ci
ActiveWorkbook.Save
 

Chapichapo

XLDnaute Junior
une nouvelle version ici pour le formulaire de recherche des patients

1) la listbox est chargée avec la table complète
2) dans le combo, tu choisis la colone de recherche
3) quand tu tapes dans le textbox, la listbox filtre automatiquement les lignes

4) que sont censés faire les 3 boutons en haut du formulaire?


Re vgendron,

Vous lisez dans les pensées .

Fantastique ! Super ! (2)

c'est exactement ce que je recherchais. Quand je saurai faire tout cela .....

Les boutons du haut n'ont plus d'utilité, je vais les supprimer

Encore un tout grand merci d'avoir corrigé ce que j'avais essayé de reproduire.
ah oui pardon,
c'est parceque j'ai enlevé la macro
Load_public_variable qui ne sert pas à grand chose..
et du coup. le seul endroit où elle aurait été utile, bah. ca bug..

quand tu as l'erreur, tu cliques sur debuggage
et la ligne qui pose problème est surlignée en jaune

remplace la par celle ci
ActiveWorkbook.Save
Aucun souci, vraiment

j'ai remplacé ce code et maintenant j'ai
Impossible d'exécuter le code en mode arrêt

je ne vois quoi faire la ligne en jaune est justement : "ActiveWorkbook.Save"

Je viens de voir un post sur ce forum


Nous travaillons apparemment à la base sur le même fichier, mais à mon niveau bcp plus modestement.
post de paillou et fanfan38

Pour une question de visibilité- les jours fériés étant indiqués - , est-il possible de remplacer le calendrier de la date d'inscription par celui qui se trouve dans le fichier
usf prendre ou modifier un rdv

j'ai peur de faire une fausse manoeuvre et de faire bugger mon usf.

Merci encore vgendron !
 

Pièces jointes

  • userform_diET_RDV_4 (2).xlsm
    129.9 KB · Affichages: 4
Dernière édition:

vgendron

XLDnaute Barbatruc
Aller.. une nouvelle version pour le plaisir

j'ai corrigé le bug que tu avais
dans le formulaire de recherche de patient, quand tu selectionnes un patient dans la liste et que tu cliques sur le bouton 'rechercher" en haut à gauche, ca te bascule sur le formulaire qui te donne les infos du patient

j'ai également recodé ton formulaire de prise de rendez vous
va voir le code, j'y ai mis tout un tas de commentaires
 

Pièces jointes

  • userform_diET_RDV_4.xlsm
    113.2 KB · Affichages: 14

Chapichapo

XLDnaute Junior
Vegedron,

Immense merci. je n'osais pas en demander autant, c'est très gentil de votre part. J'ai fait un pas de géant dans mon projet. Pour les rdv's je n'avais pas encore terminé de comprendre la vidéo de base


qui utilise le code
Sub mettre_a_jour_plages()

Call supprimer_donnees

Call lister_plages_horaires

Call ajout_rdv_dans_plages

End Sub

Sub supprimer_donnees()

Dim lstrw As Long
Dim lstcol As Long

Call load_public_variables

lstcol = ws_plages_RDV.Cells(1, Columns.Count).End(xlToLeft).Column
lstrw = ws_plages_RDV.Cells(Rows.Count, 1).End(xlUp).Row

If lstcol > 3 Then
ws_plages_RDV.Range(ws_plages_RDV.Cells(4, 4), ws_plages_RDV.Cells(4, lstcol)).EntireColumn.Delete
End If

If lstrw > 4 Then
ws_plages_RDV.Rows("5:" & lstrw).EntireRow.Delete
End If

ws_plages_RDV.Cells(4, 1).ClearContents
ws_plages_RDV.Cells(1, 3).Clear
ws_plages_RDV.Cells(2, 3).Clear

End Sub

Sub lister_plages_horaires()

Dim heure_debut As Date
Dim heure_fin As Date
Dim tranche_horaire_min As Long
Dim nb_jours As Long
Dim nb_heures As Long
Dim nb_plages As Long
Dim date_en_cours As Date
Dim heure_en_cours As Date
Dim date_heure_plage As Date
Dim rw_paste As Long
Dim pause_midi_debut As Date
Dim pause_midi_fin As Date

Call load_public_variables

'heures ouvertures
heure_debut = TimeSerial(8, 0, 0)
heure_fin = TimeSerial(19, 0, 0)

'pause midi
pause_midi_debut = TimeSerial(12, 0, 0)
pause_midi_fin = TimeSerial(13, 59, 0)

nb_heures = 11
tranche_horaire_min = 15
nb_plages = (nb_heures / (tranche_horaire_min / 60)) - 1
nb_jours = 7

'boucle sur le nombre de jours
For i = 0 To nb_jours
'identifier la date avec l'heure d'ouverture
date_en_cours = DateAdd("d", i, Date)
heure_en_cours = heure_debut

'boucle sur le nombre de plage horaires sur les heures d'ouvertures
For k = 0 To nb_plages

'ligne pour coller
If ws_plages_RDV.Cells(Rows.Count, 1).End(xlUp).Row = 4 And ws_plages_RDV.Cells(4, 1) = "" Then
rw_paste = 4
Else
rw_paste = ws_plages_RDV.Cells(Rows.Count, 1).End(xlUp).Row + 1
End If

If k = 0 Then
ws_plages_RDV.Cells(rw_paste, 1) = date_en_cours + heure_en_cours
Else
'itération sur l'heure
heure_en_cours = DateAdd("n", tranche_horaire_min, heure_en_cours)
'condition sur la tranche
If heure_en_cours >= pause_midi_debut And heure_en_cours < pause_midi_fin Then
'alors rien
Else
'coller date et heure de la plage
ws_plages_RDV.Cells(rw_paste, 1) = date_en_cours + heure_en_cours
End If
End If
Next

Next

End Sub

Sub ajout_rdv_dans_plages()

Dim arr_data() As Variant
Dim lstrw As Long, lstcol As Long
Dim date_rdv As Date
Dim heure_rdv As Date
Dim date_debut_rdv As Date, date_fin_rdv As Date
Dim duree_rdv_min As Long
Dim col_coller As Long

Call load_public_variables

'enregistrer les données dans une array
lstrw = ws_rdv.Cells(Rows.Count, 1).End(xlUp).Row
lstcol = ws_rdv.Cells(1, Columns.Count).End(xlToLeft).Column

arr_data = ws_rdv.Range(ws_rdv.Cells(2, 1), ws_rdv.Cells(lstrw, lstcol))

'boucle sur les RDV
For i = LBound(arr_data) To UBound(arr_data)
'vérifier que la date du RDV est après ou égal à la date du jour
If arr_data(i, 1) >= Date Then
'identifier la date et heure de début
date_rdv = arr_data(i, 1)
heure_rdv = arr_data(i, 2)
date_debut_rdv = date_rdv + heure_rdv
'identifier la durée du RDV
duree_rdv_min = arr_data(i, 7)
'identifier la date et heure de fin
date_fin_rdv = date_rdv + DateAdd("n", duree_rdv_min, heure_rdv)
'ajouter une colonnes sur onglet avec les dates sur lignes 1 et 2
col_coller = ws_plages_RDV.Cells(1, Columns.Count).End(xlToLeft).Column + 1

With ws_plages_RDV
.Cells(1, col_coller) = date_debut_rdv
.Cells(2, col_coller) = date_fin_rdv
.Cells(3, col_coller) = "RDV"
End With

'copier coller la formule
If col_coller > 3 Then
ws_plages_RDV.Cells(4, 3).Copy
ws_plages_RDV.Cells(4, col_coller).PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
End If

End If
Next

Erase arr_data

'ajout formule
lstcol = ws_plages_RDV.Cells(1, Columns.Count).End(xlToLeft).Column
lstrw = ws_plages_RDV.Cells(Rows.Count, 1).End(xlUp).Row

If lstcol <= 3 Then
ws_plages_RDV.Range(ws_plages_RDV.Cells(4, 2), ws_plages_RDV.Cells(lstrw, 2)).FormulaR1C1 = "=[@[RDV]]"
Else
'ws_plages_RDV.Cells(4, 2).FormulaR1C1 = "=SUM(Tableau3[@[RDV]:[RDV" & lstcol - 2 & "]])"
ws_plages_RDV.Range(ws_plages_RDV.Cells(4, 2), ws_plages_RDV.Cells(lstrw, 2)).FormulaR1C1 = "=SUM(Tableau3[@[RDV]:[RDV" & lstcol - 2 & "]])"
End If

End Sub

ce qu'il manque, comme signale M. BRUNDU dans sa vidéo, c'est la durée du rdv dans le userfrm : je l'ai ajouté et les paramètres sont dans l'onglet liste

je travaille sur le fichier : j'ai une question je souhaite ajouter des données
dans le ufm patients puis-je faire un userform avec multipages pour récupérer les données ensuite ?
je dois seulement penser le formulaire.....

Merci bcp
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
314 729
Messages
2 112 272
Membres
111 483
dernier inscrit
Wism