Erreur 424 "objet requis" sous excel
Résolu
mary
-
mary -
mary -
Bonjour
j'ai realisé une interface graphique et ce programme :
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
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
A voir également:
- Erreur 424 vba
- Erreur d'execution 424 - Meilleures réponses
- Erreur d'execution 424 objet requis userform - Meilleures réponses
- Erreur 3005 france tv - Forum TV & Vidéo
- Incompatibilité de type vba ✓ - Forum Programmation
- Erreur 3000 france tv - Forum Lecteurs et supports vidéo
- Erreur t32 ✓ - Forum Livebox
- Erreur 0x80070643 - Accueil - Windows
2 réponses
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,
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,