Bonjour, j'ai un fichier vba acev des lignes de codes presque identiques qui remplissent mes formulaires à différent stades de l'avancement du "ttt du patient". J'ai un code qui fonctionne très bien, mais c'est le foutoir. J'aimerai apprendre a faire des sous-routine, mais vraisemblablement, je ne les appellent pas bien. Est-ce que quelqu'un pourrait me dire où est mon erreur?
Je ne peux pas joindre le ficher, il est trop gros.
Donc voici des exemples de sous-routine :
'charger les données de la feuille complet
Public Sub ChargerDonneesDepuisComplet(wsComplet As Worksheet, patientRow As Long, ByRef frm As Object)
With frm
.txtmois.Value = wsComplet.Cells(patientRow, 1).Value
.txtan.Value = wsComplet.Cells(patientRow, 2).Value
.oburgent.Value = (wsComplet.Cells(patientRow, 3).Value = "Urgence")
.obelectif.Value = (wsComplet.Cells(patientRow, 3).Value = "Electif")
.obconsultohb.Value = (wsComplet.Cells(patientRow, 3).Value = "Consultation Hyperbare")
'charger les données de la feuille consultation
Public Sub ChargerDonneesDepuisConsultation(wsConsultation As Worksheet, patientRow As Long, ByRef frm As Object)
With frm
.txtmois.Value = wsConsultation.Cells(patientRow, 1).Value
.txtan.Value = wsConsultation.Cells(patientRow, 2).Value
.txtnumero.Value = wsConsultation.Cells(patientRow, 3).Value
.txtedsa.Value = wsConsultation.Cells(patientRow, 4).Value
'Enregistrer les données dans la feuille complet
Public Sub EnregistrerDonneesPatientComplet(wsComplet As Worksheet, rowIndex As Long, ByRef frm As Object)
With wsComplet
.Cells(rowIndex, 1).Value = frm.txtmois.Value
.Cells(rowIndex, 2).Value = frm.txtan.Value
' Enregistrement de l'urgence ou électif ou consultation
If frm.oburgent.Value Then
.Cells(rowIndex, 3).Value = "Urgence"
ElseIf frm.obelectif.Value Then
.Cells(rowIndex, 3).Value = "Electif"
Ceux ci sont quelques exemples
ET voici comment j'essai de les appeler dans mon userform_Initialize :
Private Sub UserForm_Initialize()
' Initialisation basique pour les boutons dynamiques
ConfigureTabButtons
Me.MultiPage1.Value = 0
UpdateNavigationButtonColors "btnAdmin" ' Définir le bouton "btnAdmin" comme actif au démarrage
' Initialiser les valeurs par défaut pour txtmois et txtan si vides
If Me.txtmois.Value = "" Then
Me.txtmois.Value = UCase((Left(MonthName(Month(Date), False), 1)) & Mid(MonthName(Month(Date), False), 2))
End If
If Me.txtan.Value = "" Then
Me.txtan.Value = Year(Date)
End If
' Initialiser les dates par défaut si elles sont vides
If Me.txtdateconsult.Value = "" Then
Me.txtdateconsult.Value = Format(Date, "dd.mm.yyyy")
End If
If Me.txtdateassu.Value = "" Then
Me.txtdateassu.Value = Format(Date, "dd.mm.yyyy")
End If
' Masquer par défaut le champ txtdateseance
Me.txtdateseance.Visible = True ' Rendre le champ visible initialement
' Placer le curseur dans le champ txtnom
Me.txtnom.SetFocus
' Configurer les barres de défilement (both : horizontal et vertical)
Me.ScrollBars = fmScrollBarsBoth
Me.ScrollHeight = 1000 ' Hauteur de défilement (ajuster si nécessaire)
Me.ScrollWidth = 1000 ' Largeur de défilement (ajuster si nécessaire)
Me.ScrollTop = 0
Me.ScrollLeft = 0
' Adapter la taille de l'UserForm à l'écran
Me.StartUpPosition = 1 ' Centrer l'UserForm sur l'écran
' Masquer la barre de tabulation des MultiPages
Me.MultiPage1.Style = fmTabStyleNone
' Configuration additionnelle si nécessaire...
RemplirComboBoxIndication Me
' Réinitialiser tous les OptionButtons à False
Dim ctrl As Control
For Each ctrl In Me.Controls
If TypeName(ctrl) = "OptionButton" Then
ctrl.Value = False
End If
Next ctrl
' Fixer la taille de la police des titres des frames
Dim frm As Control
For Each frm In Me.Controls
If TypeName(frm) = "Frame" Then
frm.Font.Size = 12
End If
Next frm
End Sub
Le fonctionnement de base, c'est, si vous cliquez sur le nom ou prénom d'un patient de la feuille accueil, (ou si vous faite une recherche par numéro depuis un bouton, le code va chercher le patient dans complet, ou dans consultation pour remplir le formulaire Saisie. ça ne marche pas, il me dit bien qu'il a trouvé le patient, mais j'ai mal codé mon appel, et je ne sais pas comment faire.
merci pour votre aide.
Nat
Je ne peux pas joindre le ficher, il est trop gros.
Donc voici des exemples de sous-routine :
'charger les données de la feuille complet
Public Sub ChargerDonneesDepuisComplet(wsComplet As Worksheet, patientRow As Long, ByRef frm As Object)
With frm
.txtmois.Value = wsComplet.Cells(patientRow, 1).Value
.txtan.Value = wsComplet.Cells(patientRow, 2).Value
.oburgent.Value = (wsComplet.Cells(patientRow, 3).Value = "Urgence")
.obelectif.Value = (wsComplet.Cells(patientRow, 3).Value = "Electif")
.obconsultohb.Value = (wsComplet.Cells(patientRow, 3).Value = "Consultation Hyperbare")
'charger les données de la feuille consultation
Public Sub ChargerDonneesDepuisConsultation(wsConsultation As Worksheet, patientRow As Long, ByRef frm As Object)
With frm
.txtmois.Value = wsConsultation.Cells(patientRow, 1).Value
.txtan.Value = wsConsultation.Cells(patientRow, 2).Value
.txtnumero.Value = wsConsultation.Cells(patientRow, 3).Value
.txtedsa.Value = wsConsultation.Cells(patientRow, 4).Value
'Enregistrer les données dans la feuille complet
Public Sub EnregistrerDonneesPatientComplet(wsComplet As Worksheet, rowIndex As Long, ByRef frm As Object)
With wsComplet
.Cells(rowIndex, 1).Value = frm.txtmois.Value
.Cells(rowIndex, 2).Value = frm.txtan.Value
' Enregistrement de l'urgence ou électif ou consultation
If frm.oburgent.Value Then
.Cells(rowIndex, 3).Value = "Urgence"
ElseIf frm.obelectif.Value Then
.Cells(rowIndex, 3).Value = "Electif"
Ceux ci sont quelques exemples
ET voici comment j'essai de les appeler dans mon userform_Initialize :
Private Sub UserForm_Initialize()
' Initialisation basique pour les boutons dynamiques
ConfigureTabButtons
Me.MultiPage1.Value = 0
UpdateNavigationButtonColors "btnAdmin" ' Définir le bouton "btnAdmin" comme actif au démarrage
' Initialiser les valeurs par défaut pour txtmois et txtan si vides
If Me.txtmois.Value = "" Then
Me.txtmois.Value = UCase((Left(MonthName(Month(Date), False), 1)) & Mid(MonthName(Month(Date), False), 2))
End If
If Me.txtan.Value = "" Then
Me.txtan.Value = Year(Date)
End If
' Initialiser les dates par défaut si elles sont vides
If Me.txtdateconsult.Value = "" Then
Me.txtdateconsult.Value = Format(Date, "dd.mm.yyyy")
End If
If Me.txtdateassu.Value = "" Then
Me.txtdateassu.Value = Format(Date, "dd.mm.yyyy")
End If
' Masquer par défaut le champ txtdateseance
Me.txtdateseance.Visible = True ' Rendre le champ visible initialement
' Placer le curseur dans le champ txtnom
Me.txtnom.SetFocus
' Configurer les barres de défilement (both : horizontal et vertical)
Me.ScrollBars = fmScrollBarsBoth
Me.ScrollHeight = 1000 ' Hauteur de défilement (ajuster si nécessaire)
Me.ScrollWidth = 1000 ' Largeur de défilement (ajuster si nécessaire)
Me.ScrollTop = 0
Me.ScrollLeft = 0
' Adapter la taille de l'UserForm à l'écran
Me.StartUpPosition = 1 ' Centrer l'UserForm sur l'écran
' Masquer la barre de tabulation des MultiPages
Me.MultiPage1.Style = fmTabStyleNone
' Configuration additionnelle si nécessaire...
RemplirComboBoxIndication Me
' Réinitialiser tous les OptionButtons à False
Dim ctrl As Control
For Each ctrl In Me.Controls
If TypeName(ctrl) = "OptionButton" Then
ctrl.Value = False
End If
Next ctrl
' Fixer la taille de la police des titres des frames
Dim frm As Control
For Each frm In Me.Controls
If TypeName(frm) = "Frame" Then
frm.Font.Size = 12
End If
Next frm
End Sub
Le fonctionnement de base, c'est, si vous cliquez sur le nom ou prénom d'un patient de la feuille accueil, (ou si vous faite une recherche par numéro depuis un bouton, le code va chercher le patient dans complet, ou dans consultation pour remplir le formulaire Saisie. ça ne marche pas, il me dit bien qu'il a trouvé le patient, mais j'ai mal codé mon appel, et je ne sais pas comment faire.
merci pour votre aide.
Nat