Message d'erreur 1004 VBA excel
Fermé
SD71
-
8 mars 2013 à 09:21
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 - 11 mars 2013 à 11:48
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 - 11 mars 2013 à 11:48
A voir également:
- Message d'erreur 1004 VBA excel
- Message - Guide
- Erreur 0x80070643 - Accueil - Windows
- Liste déroulante excel - Guide
- Recuperer message whatsapp supprimé - Guide
- Message d'absence thunderbird - Guide
5 réponses
chossette9
Messages postés
4239
Date d'inscription
lundi 20 avril 2009
Statut
Contributeur
Dernière intervention
12 septembre 2014
1 308
8 mars 2013 à 11:12
8 mars 2013 à 11:12
Bonjour,
tu écris x1Down avec un 1, mais c'est xlDown avec un l (xl étant une abréviation de Excel).
Cordialement.
tu écris x1Down avec un 1, mais c'est xlDown avec un l (xl étant une abréviation de Excel).
Cordialement.
pilas31
Messages postés
1825
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
644
Modifié par pilas31 le 8/03/2013 à 11:16
Modifié par pilas31 le 8/03/2013 à 11:16
Bonjour,
A priori je trouve 3 erreurs dans cette syntaxe :
Me("Code_prest" & i).List = (Sheets("Prestations").Range([A2], [A2].End(x1Down)))
1/ la valeur de i n'est pas initialisée (a moins que ce soit une variable globale initialisée ailleurs). Mais cela ressemble à l'initialisation de plusieurs listBox dans une boucle qui est absente de la macro montrée ici. Donc par exemple si il y a dans cet UF deux listBox qui s'appellent Code_prest1 et Code_prest2 , il faudra inclure cette ligne dans une boucle for par exemple.
2/ x1Down est une erreur de transcription ce n'est pas le chiffre 1 mais la lettre l : xlDown
3/ il faut initialiser la liste non pas avec le Range mais avec les valeurs
Donc une syntaxe correcte serait par exemple
idem pour le deuxième jeu de listbox
sauf si je répète le i est initialisé ailleurs...
A+
Cordialement,
A priori je trouve 3 erreurs dans cette syntaxe :
Me("Code_prest" & i).List = (Sheets("Prestations").Range([A2], [A2].End(x1Down)))
1/ la valeur de i n'est pas initialisée (a moins que ce soit une variable globale initialisée ailleurs). Mais cela ressemble à l'initialisation de plusieurs listBox dans une boucle qui est absente de la macro montrée ici. Donc par exemple si il y a dans cet UF deux listBox qui s'appellent Code_prest1 et Code_prest2 , il faudra inclure cette ligne dans une boucle for par exemple.
2/ x1Down est une erreur de transcription ce n'est pas le chiffre 1 mais la lettre l : xlDown
3/ il faut initialiser la liste non pas avec le Range mais avec les valeurs
Donc une syntaxe correcte serait par exemple
For i= 1 to 2 Me("Code_prest" & i).List = Sheets("Prestations").Range([A2], [A2].End(xlDown)).Value next i
idem pour le deuxième jeu de listbox
sauf si je répète le i est initialisé ailleurs...
A+
Cordialement,
Bonsoir!!
Tout d'abord grand merci pour vos réponses
1) je pense investir dans des lunettes pour faire la différence entre les 1 et les l !! :)
2) effectivement le i apparait seulement à cet endroit, donc il n'est pas initialisé
mais du coup je n'ai pas vraiment compris le "for" n'est pas abordé dans mon bouquin (il n'y a pas de bonnes explications, juste des exercices à faire bêtement- d'ailleurs si vous avez un bon bouquin à me conseiller, je prends!!)
si ça peut vous aider à y voir plus clair, voici la totalité de la programmation
Private Sub Cmdvalid_Click()
'Ajouter ligne suivante
Dim Ligne As Integer
Ligne = Sheets("Facture").Range("A33").End(xlUp).Row + 1
With Sheets("Facture")
Range("A" & Ligne).Value = Me.CodePrest
Range("B" & Ligne).Value = Me.Prestation
Range("C" & Ligne).Value = Me.PrixU
Range("D" & Ligne).Value = Me.Qte
Range("E" & Ligne).Value = Me.Total
End With
'Récupération des données de la boite de dialogue
Nom = Form_Facture.Adresse
Adresse = Form_Facture.Adresse
CP = Form_Facture.CPostal
Ville = Form_Facture.Ville
'Entrée des données du client dans la facture
Sheets("Facture").Select
Range("C3").Value = Nom
Range("C4").Value = Adresse
Range("C5").Value = CPostal
Range("D5").Value = Ville
Sheets("Facture").Range("B16") = Format(Now, "DD/MM/YYYY")
End Sub
Private Sub CodePrest_Change()
Me("Prestation") = Application.VLookup(Me("CodePrest"), [BDPrestations], 2, False)
Me("PrixU") = Application.VLookup(Me("CodePrest"), [BDPrestations], 3, False)
End Sub
Private Sub Com_Quitter_Click()
Unload Me
End Sub
Private Sub Com_Reset_Click()
'Réinitialisation de la fiche
Prestation.Value = ""
PrixU.Value = ""
Qte.Value = ""
Total.Value = ""
End Sub
Private Sub Frame2_Click()
End Sub
Private Sub Label2_Click()
End Sub
Private Sub Label8_Click()
End Sub
Private Sub Label9_Click()
End Sub
Private Sub Nom_Change()
Me("Adresse") = Application.VLookup(Me("Nom"), [BDClients], 3, False)
Me("CPostal") = Application.VLookup(Me("Nom"), [BDClients], 4, False)
Me("Ville") = Application.VLookup(Me("Nom"), [BDClients], 5, False)
End Sub
Private Sub Qte_AfterUpdate()
If Me("PrixU") <> "" And Me("Qte") <> "" Then
Me("Total") = CDbl(Me("PrixU")) * CDbl(Me("Qte"))
Cmdvalid.Visible = True
Else
MsgBox "Vous n'avez pas entré de quantités ou indiquez 0 !"
Exit Sub
End If
End Sub
Private Sub UserForm_Initialize()
Cmdvalid.Visible = True
Me("Code_prest" & i).List = Sheets("Prestations").Range([A2], [A2].End(xlDown))
Me("Nom" & i).List = Sheets("Clients").Range([A2], [A2].End(xlDown))
End Sub
et donc quand je suis sur ma feuil facture, si je click sur le bouton de commande "Nouvelle facture", j'ai ce fameux message d'erreur, et le débogage m'envoie sur le dernier paragraphe ci dessus
et si j'ai bien compris le but de ce paragraphe, de faire un lien avec mes codes prestations de ma feuil prestations et avec le nom de mes clients de ma feuil clients
(j'ai peut-être visé gros pour débuter!? :/)
voilà si ça peut vous éclairer sur mon problème
En tout cas encore grand merci pour votre temps
Tout d'abord grand merci pour vos réponses
1) je pense investir dans des lunettes pour faire la différence entre les 1 et les l !! :)
2) effectivement le i apparait seulement à cet endroit, donc il n'est pas initialisé
mais du coup je n'ai pas vraiment compris le "for" n'est pas abordé dans mon bouquin (il n'y a pas de bonnes explications, juste des exercices à faire bêtement- d'ailleurs si vous avez un bon bouquin à me conseiller, je prends!!)
si ça peut vous aider à y voir plus clair, voici la totalité de la programmation
Private Sub Cmdvalid_Click()
'Ajouter ligne suivante
Dim Ligne As Integer
Ligne = Sheets("Facture").Range("A33").End(xlUp).Row + 1
With Sheets("Facture")
Range("A" & Ligne).Value = Me.CodePrest
Range("B" & Ligne).Value = Me.Prestation
Range("C" & Ligne).Value = Me.PrixU
Range("D" & Ligne).Value = Me.Qte
Range("E" & Ligne).Value = Me.Total
End With
'Récupération des données de la boite de dialogue
Nom = Form_Facture.Adresse
Adresse = Form_Facture.Adresse
CP = Form_Facture.CPostal
Ville = Form_Facture.Ville
'Entrée des données du client dans la facture
Sheets("Facture").Select
Range("C3").Value = Nom
Range("C4").Value = Adresse
Range("C5").Value = CPostal
Range("D5").Value = Ville
Sheets("Facture").Range("B16") = Format(Now, "DD/MM/YYYY")
End Sub
Private Sub CodePrest_Change()
Me("Prestation") = Application.VLookup(Me("CodePrest"), [BDPrestations], 2, False)
Me("PrixU") = Application.VLookup(Me("CodePrest"), [BDPrestations], 3, False)
End Sub
Private Sub Com_Quitter_Click()
Unload Me
End Sub
Private Sub Com_Reset_Click()
'Réinitialisation de la fiche
Prestation.Value = ""
PrixU.Value = ""
Qte.Value = ""
Total.Value = ""
End Sub
Private Sub Frame2_Click()
End Sub
Private Sub Label2_Click()
End Sub
Private Sub Label8_Click()
End Sub
Private Sub Label9_Click()
End Sub
Private Sub Nom_Change()
Me("Adresse") = Application.VLookup(Me("Nom"), [BDClients], 3, False)
Me("CPostal") = Application.VLookup(Me("Nom"), [BDClients], 4, False)
Me("Ville") = Application.VLookup(Me("Nom"), [BDClients], 5, False)
End Sub
Private Sub Qte_AfterUpdate()
If Me("PrixU") <> "" And Me("Qte") <> "" Then
Me("Total") = CDbl(Me("PrixU")) * CDbl(Me("Qte"))
Cmdvalid.Visible = True
Else
MsgBox "Vous n'avez pas entré de quantités ou indiquez 0 !"
Exit Sub
End If
End Sub
Private Sub UserForm_Initialize()
Cmdvalid.Visible = True
Me("Code_prest" & i).List = Sheets("Prestations").Range([A2], [A2].End(xlDown))
Me("Nom" & i).List = Sheets("Clients").Range([A2], [A2].End(xlDown))
End Sub
et donc quand je suis sur ma feuil facture, si je click sur le bouton de commande "Nouvelle facture", j'ai ce fameux message d'erreur, et le débogage m'envoie sur le dernier paragraphe ci dessus
et si j'ai bien compris le but de ce paragraphe, de faire un lien avec mes codes prestations de ma feuil prestations et avec le nom de mes clients de ma feuil clients
(j'ai peut-être visé gros pour débuter!? :/)
voilà si ça peut vous éclairer sur mon problème
En tout cas encore grand merci pour votre temps
pilas31
Messages postés
1825
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
644
11 mars 2013 à 00:32
11 mars 2013 à 00:32
Bonsoir,
Je pense que le mieux c'est de nous joindre le fichier en exemple.
Pour cela le déposer sur www.cjoint.com en enlevant les données confidentielles.
Puis venir coller ici dans un message le lien de téléchagement.
A+
Je pense que le mieux c'est de nous joindre le fichier en exemple.
Pour cela le déposer sur www.cjoint.com en enlevant les données confidentielles.
Puis venir coller ici dans un message le lien de téléchagement.
A+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
pilas31
Messages postés
1825
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
644
11 mars 2013 à 11:48
11 mars 2013 à 11:48
Bonjour,
J'ai regardé les macros.
A priori il y a des petites erreurs. Voici les corrections que je propose pour la macro initialize et Cmdvalid :
Pour le reste c'est correct. Les sub .. endsub vides comme Frame2 ne servent à rien. Ils ont été générés automatiquement vides. Ils peuvent être supprimés.
A tester.
A+
J'ai regardé les macros.
A priori il y a des petites erreurs. Voici les corrections que je propose pour la macro initialize et Cmdvalid :
Private Sub UserForm_Initialize() Dim DerLig As Integer Cmdvalid.Visible = True DerLig = Sheets("Prestations").Range("A2").End(xlDown).Row CodePrest.List = Sheets("Prestations").Range("A2", "A" & DerLig).Value DerLig = Sheets("Clients").Range("A2").End(xlDown).Row Nom.List = Sheets("Clients").Range("A2", "A" & DerLig).Value End Sub Private Sub Cmdvalid_Click() 'Ajouter ligne suivante Dim Ligne As Integer With Sheets("Facture") Ligne = .Range("A33").End(xlUp).Row + 1 .Range("A" & Ligne).Value = Me.CodePrest .Range("B" & Ligne).Value = Me.Prestation .Range("C" & Ligne).Value = Me.PrixU .Range("D" & Ligne).Value = Me.Qte .Range("E" & Ligne).Value = Me.Total 'Récupération des données de la boite de dialogue 'et Entrée des données du client dans la facture .Range("C3").Value = Me.Nom .Range("C4").Value = Me.Adresse .Range("C5").Value = Me.CPostal .Range("D5").Value = Me.Ville .Range("B16") = Format(Now, "DD/MM/YYYY") End With End Sub
Pour le reste c'est correct. Les sub .. endsub vides comme Frame2 ne servent à rien. Ils ont été générés automatiquement vides. Ils peuvent être supprimés.
A tester.
A+