Erreur 424 objet requis

Bonjour à tous

Je rencontre un problème à l'ouverture d'un userform.

Depuis mon userform Menu, j'ouvre un 2nd userform mais j'ai un message d'erreur "Erreur 424 Objet requis". Je ne comprend pas le pb. C'est à l'ouverture du formulaire "frmCriteres"

Voici le code :

Private Sub CmdCriteres_Click()

frmCriteres.Show

End Sub

Private Sub CmdEmbauche_Click()

frmSaisie.Show

End Sub

Private Sub CmdFiche_Click()

frmFiche.Show

End Sub

Private Sub CmdQuitter_Click()

With ActiveWorkbook

.Save ' enregistre

Unload Me

End With

End Sub

Merci beaucoup de vos lumières.

Bonjour,

L'explication se trouve très certainement dans le code du formulaire "frmCriteres"

A+

Bonjour Frangy,

Merci pour ton aide.

Voici le code du formulaire frmCriteres

Private Sub UserForm_Initialize()

Label10.Caption = Format(Date, "dd/mm/yyyy")

Me.ListBox1.List = [liste].Value

Me.ListBox1.ColumnWidths = temp

With Sheets("bdd")

Me.ListBox1.List = .Range("A2:B" & .[A65000].End(xlUp).Row).Value

End With

a = Me.ListBox1.List

NbCol = UBound(a, 2) - LBound(a, 2) + 1 ' nb de colonnes

Call tri(a, LBound(a), UBound(a), NbCol, 0)

Me.ListBox1.List = a

CboStatut.AddItem "Titulaire"

CboStatut.AddItem "Non titulaire"

CboNatcontrat.AddItem "CDI"

CboNatcontrat.AddItem "CDD"

CboAffectation.RowSource = ("code!Affectacuisine")

CboAffectation.ListIndex = -1

CboPortage.RowSource = ("code!Affectacuisine")

CboPortage.ListIndex = -1

CboHorairecont.AddItem "5"

CboHorairecont.AddItem "6"

CboHorairecont.AddItem "7"

CboHorairecont.AddItem "151,67"

CboSS.RowSource = ("bdd!ss")

ComboBox3.AddItem "1"

ComboBox3.AddItem "5"

ComboBox4.AddItem "Française"

ComboBox4.AddItem "Union européenne"

ComboBox4.AddItem "Hors UE"

End Sub

Sub tri(a, gauc, droi, NbCol, colTri) ' Quick sort

ref = a((gauc + droi) \ 2, colTri)

g = gauc: d = droi

Do

Do While a(g, colTri) < ref: g = g + 1: Loop

Do While ref < a(d, colTri): d = d - 1: Loop

If g <= d Then

For c = 0 To NbCol - 1

temp = a(g, c): a(g, c) = a(d, c): a(d, c) = temp

Next

g = g + 1: d = d - 1

End If

Loop While g <= d

If g < droi Then Call tri(a, g, droi, NbCol, colTri)

If gauc < d Then Call tri(a, gauc, d, NbCol, colTri)

End Sub

Private Sub Optionpresents_Change()

Criteres = Criteres & "(bdd!Z2 = """ & "" & """) * "

Criteres = "=" & Criteres & "1"

Sheets("filtre").Range("A2").Value = Criteres

'on utilise ensuite les critères de choix dans un filtre élaboré sur une feuille masquée

Sheets("filtre").Activate

Range("zonebdd").AdvancedFilter Action:=xlFilterCopy, _

CriteriaRange:=Range("A1:A2"), CopyToRange:=Range("A4:AS4"), Unique:=False

If Range("filtre!A5").Value <> "" Then

ActiveWorkbook.Names.Add Name:="Fiche", RefersToR1C1:= _

"=OFFSET(filtre!R5C2,,,COUNTA(filtre!C2)-1)"

Me.ListBox1.Clear

Me.ListBox1.List = [liste].Value

With Sheets("filtre")

Me.ListBox1.List = .Range("A5:B" & .[A65000].End(xlUp).Row).Value

End With

Me.ListBox1.ColumnWidths = temp

a = Me.ListBox1.List

NbCol = UBound(a, 2) - LBound(a, 2) + 1 ' nb de colonnes

Call tri(a, LBound(a), UBound(a), NbCol, 0)

Me.ListBox1.List = a

End If

End Sub

Private Sub TextBox1_Change()

TextBox1 = UCase(TextBox1)

Me.ListBox1.Clear

i = 0

For Each c In Application.Index([liste], , 1)

If UCase(c) Like UCase(Me.TextBox1) & "*" Then

Me.ListBox1.AddItem

Me.ListBox1.List(i, 0) = c.Value

Me.ListBox1.List(i, 1) = c.Offset(, 1).Value

i = i + 1

End If

Next c

End Sub

Private Sub ListBox1_Click()

'dès que l'on clique sur le titre de la recette, on affiche dans le formulaire usfaffiche

'les données de cette recette.

NumNom = ListBox1.Value

With Sheets("bdd").Range("a:a")

'on commence par rechercher dans la table de de données le N° de ligne correspondant

'au titre sélectionné

Set c = .Find(NumNom, LookIn:=xlValues, LookAt:=xlWhole)

'la variable Lig, correspondant au numéro de la ligne trouvée, est définie comme une variable

'publique dans le module général déclarations. Ceci permet de passer sa valeur d'un userform à un autre.

If Not c Is Nothing Then Lig = c.Row

End With

frmFiche.Caption = Range("bdd!A" & Lig).Value

frmFiche.ComboBox1.Value = Range("bdd!A" & Lig).Value

frmFiche.Show

End Sub

Private Sub CmdVoir_Click()

'on récupère les différents critères de choix demandés et on construit un critère composé

'qui sera utilisée dans un filtre élaboré,

'voyez la page pap-filtreelaboré sur excelabo pour comprendre l'utilisation du filtre élaboré.

'attention dans la construction du critère à bien indiquer sur quelle feuille est la base

'de données. N'oubliez pas que dans le filtre on fait référence à l'adresse de la première valeur

'de la colonne et non à celle de l'étiquette. Ici la table est en feuille "cuisine" avec les

'étiquettes de champ en ligne 1 et la première fiche en ligne 2. Le critère devra par conséquent

'faire référence à "cuisine!I2" pour un critère portant sur le temps de préparation.

'dans la construction du critère, on cherche tous les champs remplis et on va multiplier les

'critères entre eux pour imposer que toutes les conditions demandées soient remplies. d'où

'le signe * en fin de critère pour préparer le suivant.

'attention une même recette peut être utilisée dans plusieurs occasions

'il faut donc que le critère permette de trouver par exemple le mot buffet

'au milieu de plusieurs autres.

'On utilise pour cela la fonction trouve que l'on traduit en VBA

'Type de plat

If CboStatut.ListIndex <> -1 Then

statut = CboStatut.Value

Criteres = Criteres & "(bdd!H2 = """ & statut & """) * "

End If

'Type de contrat

If CboNatcontrat.ListIndex <> -1 Then

contrat = CboNatcontrat.Value

Criteres = Criteres & "(bdd!AA2 = """ & contrat & """) * "

End If

'Type de contrat

If CboAffectation.ListIndex <> -1 Then

Affectation = CboAffectation.Value

Criteres = Criteres & "(bdd!X2 = """ & Affectation & """) * "

End If

'Type de contrat

If CboPortage.ListIndex <> -1 Then

Portage = CboPortage.Value

Criteres = Criteres & "(bdd!X2 = """ & Portage & """) * "

End If

'Type de contrat

If CboHorairecont.ListIndex <> -1 Then

Horairecont = CboHorairecont.Value

Criteres = Criteres & "(bdd!Q2 = """ & Horairecont & """) * "

End If

'Type de contrat

If CboSS.ListIndex <> -1 Then

secu = CboSS.Value

Criteres = Criteres & "(bdd!G2 = """ & secu & """) * "

End If

'Type de contrat

If ComboBox3.ListIndex <> -1 Then

Ancienneté = ComboBox3.Value

Criteres = Criteres & "(bdd!AN2 = """ & Ancienneté & """) * "

End If

If OptionButton3.Value = True Then

Médaillés = OptionButton3.Value

Criteres = Criteres & "(bdd!AI2 <> """ & "" & """) * "

End If

If Optiontous.Value = True Then

tous = Optiontous.Value

Criteres = Criteres & "(bdd!A2 <> """ & "" & """) * "

Else

If Optionpresents.Value = True Then

presents = Optionpresents.Value

Criteres = Criteres & "(bdd!Z2 = """ & "" & """) * "

End If

End If

If OptionButton1.Value = True Then

Féminin = OptionButton1.Value

Criteres = Criteres & "(bdd!AH2 = """ & "Féminin" & """) * "

Else

If OptionButton2.Value = True Then

Masculin = OptionButton2.Value

Criteres = Criteres & "(bdd!AH2 = """ & "Masculin" & """) * "

End If

End If

'à ce stade le critère se termine par *... On ajoute donc un 1. Un critère renvoie normalement

'vrai ou faux. En le multipliant par 1 il renvoie 1 ou 0 ce qui est inter^rété de la même façon par excel.

Criteres = "=" & Criteres & "1"

Sheets("filtre").Range("A2").Value = Criteres

'on utilise ensuite les critères de choix dans un filtre élaboré sur une feuille masquée

Sheets("filtre").Activate

Range("zonebdd").AdvancedFilter Action:=xlFilterCopy, _

CriteriaRange:=Range("A1:A2"), CopyToRange:=Range("A4:AS4"), Unique:=False

'Si aucune recette ne correspond aux critères

If Range("filtre!A5").Value = "" Then

MsgBox ("Aucun nom ne répond à tous vos critères")

'S'il y a plus d'une recette répondant au critère autrement dit si B6 non vide

'on réaffiche les recettes dans une zone de liste pour en faire choisir une à l'utilisateur

'pour cela on nomme "Fiches Filtrées" la plage contenant les titres sélectionnés.

'Il y a plusieurs façons de faire pour indiquer les coordonnées de cette plage. Ici j'ai choisi

'la fonction décaler (offset en VBA)

ElseIf Range("filtre!A5").Value <> "" Then

ActiveWorkbook.Names.Add Name:="Fiche", RefersToR1C1:= _

"=OFFSET(filtre!R5C2,,,COUNTA(filtre!C2)-1)"

Unload frmCriteres

frmSelect.Show

'sinon on récupère son numéro de ligne et on affiche la recette dans le userform UsfAffiche

Else

nom = Range("A5").Value

With Sheets("bdd").Range("A:A")

Set c = .Find(Titre, LookIn:=xlValues, LookAt:=xlWhole)

If Not c Is Nothing Then Lig = c.Row

End With

frmFiche.Show

End If

End Sub

Pour trouver la ligne de code où se situe le problème, tu te positionnes dans la procédure CmdCriteres puis tu déroules le programme en pas à pas avec la touche F8.

Si tu ne trouves pas, fais suivre ton classeur.

A+

Merci de ton aide.

En fait j'ai trouvé d'où venait le problème. Ce sont mes listes nommées qui s'étaient modifiées toutes seules. A la place de bdd!$A$2, j'avais bdd!#REF.

Comment cela se fait-il ? Juste pour info ?

Peut-être suite à une suppression de cellules, de ligne ou de colonne.

A+

Rechercher des sujets similaires à "erreur 424 objet requis"