Erreur 424 "objet requis" sous excel [Résolu/Fermé]

Signaler
-
 mary -
Bonjour

j'ai realisé une interface graphique et ce programme :

Private Type Patient
    numeroarrivee As Integer
    nom As String
    prenom As String
    numerosecu As Long
    gravite As String
    depart As Date
    arrivee As Date
End Type

Private Type Gestion
    n As Integer 'patient courant
    liste(500) As Patient 'les patients
End Type

Dim g As Gestion
Dim p As Patient

Private Sub Bdépart_Click()
    MsgBox "Départ du client pris en compte.", vbInformation, "Mise à jour"
    Saisie.TDepart = Now
    Call enregistrer_patient
    Call afficher_patient
    Call activer_boutons
    With g.liste(g.n)
        .depart = Now
    End With
    Feuil1.Cells(g.n + 3, 7) = g.liste(g.n).depart
End Sub

Private Sub Bprecedent_Click() 'passe au patient précédent
    If enregistrer_patient() Then 'si le patient est enregistrer (ou qu'on navigue)
        g.n = g.n - 1 'patient précédent
        Call afficher_patient 'on affiche
    End If
    Call activer_boutons 'on active les boutons qui vont bien
End Sub

Private Sub BProchain_Click()
    If numero_patient_suivant("TG") <> -1 Then
        g.n = numero_patient_suivant("TG")
    Else
        If numero_patient_suivant("G") <> -1 Then
            g.n = numero_patient_suivant("G")
        Else
            If numero_patient_suivant("NG") <> -1 Then
                g.n = numero_patient_suivant("NG")
            Else
                MsgBox "Pas de patient a traiter!"
                Exit Sub
            End If
        End If
    End If
    Call afficher_patient
    Call activer_boutons
    MsgBox p.nom
End Sub

Private Function numero_patient_suivant(etat As String)
    For i = 0 To UBound(g.liste) Step 1
    p = g.liste(i)
        If g.liste(i).gravite = etat And (g.liste(i).depart = "00:00:00" Or g.liste(i).depart = Empty) Then
            numero_patient_suivant = i
            Exit Function
        End
    Next i
    numero_patient_suivant = -1
End Function

Private Sub BQuitter_Click()
    Saisie.Hide 'on cache la feuille
End Sub

Private Sub Bsuivant_Click() 'passe au patient suivant
    If enregistrer_patient() Then 'si le patient est enregistrer (ou qu'on navigue)
        g.n = g.n + 1 'patient suivant
        Call afficher_patient 'on affiche
    End If
    Call activer_boutons 'on active les boutons qui vont bien
End Sub


Public Sub activer_boutons() 's'occupe de la gestion actif ou non des bouton suivant/precedent
    If g.n <= 0 Or g.n = LBound(g.liste) Then 'patient initial donc pas de bouton précédent
        Saisie.Bprecedent.Enabled = False
    Else
        Saisie.Bprecedent.Enabled = True
    End If
    If g.n = UBound(g.liste) Then 'dernier patient, donc pas de bouton suivant
        Saisie.Bsuivant.Enabled = False
    Else
        Saisie.Bsuivant.Enabled = True
    End If
End Sub

Public Sub afficher_patient() 'affiche le patient courant
    Dim p As Patient
    p = g.liste(g.n)
        Saisie.TNum.Caption = g.n
        Saisie.TNom.Text = p.nom
        Saisie.TPrenom.Text = p.prenom
        If p.numerosecu = 0 Then 'cas ou le num sécu est a 0 (valeur par défaut) on affiche du vide
            Saisie.TSecu.Text = Empty
        Else
            Saisie.TSecu.Text = p.numerosecu
        End If
        If p.depart = "00:00:00" Then 'cas ou la date départ est a 00:00:00 (valeur par défaut) on affiche du vide
            Saisie.TDepart.Text = Empty
        Else
            Saisie.TDepart.Text = p.depart
        End If
        Select Case p.gravite 'on selectionne la bonne gravité
            Case "TG"
                Saisie.Rtg.Value = True
            Case "G"
                Saisie.Rg.Value = True
            Case "NG"
                Saisie.Rng.Value = True
            Case Else 'ou aucune si le patient n'existe pas encore
                Saisie.Rng.Value = False
                Saisie.Rg.Value = False
                Saisie.Rtg.Value = False
        End Select
End Sub


Private Sub UserForm_Initialize()
    i = 4
    While (Feuil1.Cells(i, 1) <> Empty) And (Feuil1.Cells(i, 2) <> Empty) And (Feuil1.Cells(i, 3) <> Empty) And (Feuil1.Cells(i, 4) <> Empty)
        p.numeroarrivee = i - 4
        p.nom = Feuil1.Cells(i, 2)
        p.prenom = Feuil1.Cells(i, 3)
        p.numerosecu = Feuil1.Cells(i, 4)
        p.gravite = Feuil1.Cells(i, 5)
        p.arrivee = Feuil1.Cells(i, 6)
        If Feuil1.Cells(i, 7) = Empty Then
            p.depart = "00:00:00"
        Else
            p.depart = Feuil1.Cells(i, 7)
        End If
        g.liste(p.numeroarrivee) = p
        i = i + 1
    Wend
    'on met le numero de patient a 0 au démarrage
    g.n = 1
    'affichage du patient
    Call afficher_patient
    'On active ou non les boutons
    Call activer_boutons
End Sub

Public Function enregistrer_patient() 's'occupe d'enregistrer/mettre a jour le patient

If g.n >= 0 And g.n <= UBound(g.liste) Then 'on verifi qu'on ne sorte pas de l'indice du tableau
    If Saisie.TNom.Text = Empty Or Saisie.TPrenom.Text = Empty Or Saisie.TSecu.Text = Empty Or (Saisie.Rtg.Value = False And Saisie.Rg.Value = False And Saisie.Rng.Value = False) Then
        'ici un des champs du formulaire est vide
        If Saisie.TNom.Text = Empty And Saisie.TPrenom.Text = Empty And Saisie.TSecu.Text = Empty Then
            'ici il sont tous vide, on va naviguer
            enregistrer_patient = True
        Else
            'ici certaines infos (nom, prenom ou num sécu) sont saisie, on averti du manque d'info
            MsgBox ("La fiche du patient n'est pas complete")
            enregistrer_patient = False
        End If
    Else
        'ici tout est ok on va enregistrer/mettre a jour
        With g.liste(g.n)
            .numeroarrivee = g.n
            .nom = Saisie.TNom.Text
            .prenom = Saisie.TPrenom.Text
            .numerosecu = Saisie.TSecu.Text
            .arrivee = Now
            If (Saisie.TDepart.Text = Empty) Then 'on evite les erreur d'incompatibilité si la zone départ est vide
                .depart = Empty
            Else
                .depart = Saisie.TDepart.Text
            End If
            If Saisie.Rtg.Value = True Then 'on va verifier les boutons de gravité et prendre le bon
                .gravite = "TG"
            ElseIf Saisie.Rg.Value = True Then
                .gravite = "G"
            Else
                .gravite = "NG"
            End If
            enregistrer_patient = True 'c'est Ok on s'en va :)
            If g.liste(g.n).depart = "00:00:00" Then
                Feuil1.Cells(g.n + 3, 7) = Empty
            Else
                Feuil1.Cells(g.n + 3, 7) = g.liste(g.n).depart
            End If
        End With
    End If
    Feuil1.Cells(g.n + 3, 1) = g.liste(g.n).numeroarrivee
    Feuil1.Cells(g.n + 3, 2) = g.liste(g.n).nom
    Feuil1.Cells(g.n + 3, 3) = g.liste(g.n).prenom
    Feuil1.Cells(g.n + 3, 4) = g.liste(g.n).numerosecu
    Feuil1.Cells(g.n + 3, 5) = g.liste(g.n).gravite
    Feuil1.Cells(g.n + 3, 6) = g.liste(g.n).arrivee
End If
End Function



Mais quand je souhaite l'executer excel m'affiche erreur 424 "objet requis"
Je ne vois aps du tout ou est mon erreur si vous pouvez m'aider je vous remercie d'avance !!

Cordialement,
Mary Benchekroun

2 réponses

Messages postés
1823
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
578
Bonjour,

C'est difficile en regardant le code mais je ne remarque qu'une seule chose qui me semble anormale : dans la fonction numero_patient_suivant il y a un end à la place de endif. Mais ce n'est pas la cause de l'erreur.

L'erreur 424 est provoquée par une erreur dans l'exécution de UserForm_Initialize. C'est dans cette fonction qu'il manque un objet. Or si il manque un champ ou un bouton dans l'Userform ce n'est pas ce type d'erreur.

Je ne voie donc qu'une possibilité c'est que l'objet Feuil1 ne s'appelle pas Feuil1. Attention je ne parle pas du nom de la feuille dans l'onglet. Je parle du nom qui apparait dans la fenetre Visual Basic. En général dans la liste des feuilles il ya l'objet Feuille qui apparait sous cette forme :

Feuil1(Nom de la feuille1)
Feuil2(Nom de la feuille2)
...

Entre parenthèse c'est le nom qui est dans l'onglet et Feuil1 et Feuil2 sont les nom d'objet VBA

A vérifier que Feuil1 existe bien

Sinon pas d'autre idée pour le monment

Edit : Si une autre idée encore plus simple : que le formulaire ne s'appelle pas Saisie

A+

Cordialement,
et bien oui le une histoire de i lol j'avais écris sasie au lieux de saisie pour el nom de mon interface !
Merci beaucoup pour ta réponse