Microsoft 365 appel des sous-routine

Nattalia

XLDnaute Nouveau
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
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Transmettez le plus souvent ByVal vos paramètres, surtout les objets. ByRef est assumé si ce n'est pas précisé. Pour un objet, ByRef ne serait requis que si la procédure était chargée de l'initialiser par un Set à l'intention de la procédure appelante.
Je n'ai trouvé aucune invocation de vos procédures de la 1ère partie dans la seconde.
Dans vos messages, reproduisez du code à l'aide de la commande Code: </>, c'est plus lisible.
 

Nattalia

XLDnaute Nouveau
Excusez moi, je crois que j'étais vraiment trop fatiguée par mes recherches, voici le code ouvrir formulaire qui va avec les sous-routine dans mon code et qui ne fonctionnent pas :


Code:
Public Sub OuvrirFormulaire(patientNumber As String)
    Dim wsComplet As Worksheet
    Dim wsConsultation As Worksheet
    Dim wsAccueil As Worksheet
    Dim findRowComplet As Range
    Dim findRowConsultation As Range
    Dim findRowAccueil As Range

    ' Initialisation des feuilles
    Set wsComplet = ThisWorkbook.Sheets("complet")
    Set wsConsultation = ThisWorkbook.Sheets("Consultation")
    Set wsAccueil = ThisWorkbook.Sheets("accueil")
    
    ' Rechercher le patient dans "complet"
    Set findRowComplet = wsComplet.columns(6).Find(What:=patientNumber, LookIn:=xlValues, LookAt:=xlWhole)
    If Not findRowComplet Is Nothing Then
        ChargerDonneesDepuisComplet wsComplet, findRowComplet.Row, Me
    End If

    ' Rechercher le patient dans "Consultation"
    Set findRowConsultation = wsConsultation.columns(3).Find(What:=patientNumber, LookIn:=xlValues, LookAt:=xlWhole)
    If Not findRowConsultation Is Nothing Then
        ChargerDonneesDepuisConsultation wsConsultation, findRowConsultation.Row, Me
    End If

    ' Rechercher le patient dans "accueil"
    Set findRowAccueil = wsAccueil.columns(7).Find(What:=patientNumber, LookIn:=xlValues, LookAt:=xlWhole)
    If Not findRowAccueil Is Nothing Then
        ChargerDonneesDepuisAccueil wsAccueil, findRowAccueil.Row, Me
    End If

    ' Afficher le formulaire en mode édition
    Me.Show
End Sub

Du coup, j'aurais besoin de savoir comment "Charger" ou "appeler" mes sous-routines
merci beaucoup
 

Dranreb

XLDnaute Barbatruc
Sous réserve que j'aurais mi ByVal devant tous les paramètres des Sub, leurs invocations me paraissent correctes. Qu'est-ce qui ne marche pas ?
Vous devriez quand même joindre un classeur avec très peu de données bidon.
 

Discussions similaires

Réponses
4
Affichages
343
Réponses
5
Affichages
388

Statistiques des forums

Discussions
313 866
Messages
2 103 082
Membres
108 521
dernier inscrit
manouba