Erreur 1004 VBA incomprise [Résolu]

Messages postés
10
Date d'inscription
lundi 8 novembre 2010
Statut
Membre
Dernière intervention
4 février 2011
- - Dernière réponse : cs_ilyaundebutatout
Messages postés
10
Date d'inscription
lundi 8 novembre 2010
Statut
Membre
Dernière intervention
4 février 2011
- 16 nov. 2010 à 20:11
Bonjour,

Je suis débutant sur VBA, je possède une feuille sur laquelle sont répertorié toutes mes factures (num facture, reférence client et date) et une autre avec le détail de chaque facture (num facture, ref produit et quantité).

Je souhaite qu'avec le raccourci Ctrl+Shift+M, Je puisse avoir sur une nouvelle feuille la facture précédemment établi avec la bonne présentation.

Je sais que mon code n'est pas parfait mais je pense qu'il pourrait fonctionner (si vous avez des conseils, merci d'avance :)))

Par contre lors de l'exécution j'ai une erreur 1004 à la ligne en gras dans le code ci-dessous. Je ne comprend pas pourquoi ?

Ci-dessous le fichier créé (ce sera surement plus clair) et le code incriminé.

[b]Merci par avance à celui qui aura le courage de me venir en aide ...
/b


Excel 95-03
http://www.cijoint.fr/cjlink.php?file= cj201011/cijPuVRsYm.xls

Excel 2007
http://www.cijoint.fr/cjlink.php?file=cj201011/cijD56hlpJ.xlsm


Sub consulter()
Application.ScreenUpdating = False

' consulter Macro
'
' Touche de raccourci du clavier: Ctrl+Shift+M
'Copier la valeur dans la case séletionner
Application.CutCopyMode = False
Selection.Copy
' Rend la feuille consult visible

Sheets("consult").Visible = True
Range("B8").Select
ActiveSheet.Paste

'Déclaration des variables
Dim Trouve As Range
Dim Valeur_cherchee As String

'Détermination de la valeur à rechercher dans consult, soit le N° de facture
Valeur_cherchee = Sheets("consult").Range("B8").Value
'procédure de recherche du numéro de facture
Set Trouve = Sheets("liste_facture").Columns(1).Cells.Find(what:=Valeur_cherchee)
'Quand on a trouvé le n° de facture
If Trouve Is Nothing Then
MsgBox "Erreur mon frère", vbOKOnly + vbExclamation, "Terminé"

Else


''//DEBUT DE PROCEDURE FAISANT APPARAITRE LES PRINCIPAUX ELEMENTS DE LA FACTURE
With Sheets("liste_facture")
'Copie du num client que l'on colle en B9
ActiveCell.Offset(0, 1).Copy
Sheets("consult").Select
Range("B9").Select
ActiveSheet.Paste
'Copie de la date en F1
Trouve.Offset(0, 2).Copy
Sheets("consult").Select
Range("F1").Select
ActiveSheet.Paste
End With

''//DEBUT DE PROCEDURE POUR COLLER LE DETAIL DE LA FACTURE
With Sheets("detail_facture")
'Je sélectionne la feuille detail_facture
Sheets("detail_facture").Select
'Dans cette feuille, je sélectionne A1
Range("A1").Select
'Tant que la cellule <> rien
Do While ActiveCell <> "Valeur_cherchee"
'Je sélectionne la cellule en dessous
ActiveCell.Offset(1, 0).Select
Loop
'A ce stade, la cellule active dans la feuille detail_facture
'est la première cellule avec le numéro de facture

'Je selectionne la cellule de droite avec la référence produit et je vais la coller en A14 de la feuille consult

'Tant que la celulle active <>""
Do While ActiveCell = "Valeur_cherchee"
'j'instaure les variables ref, qte
Dim ref
Dim qte

'la var ref est égale à la celulle active+ 1 colonne
ref = ActiveCell.Offset(0, 1)
'la var qte = à la val de la cellule active + 2 colonnes
qte = ActiveCell.Offset(0, 2)

'Je sélectionne la première ligne des ref de la feuille consult
Sheets("consult").Select
Range("A14").Select
'je peux lui affecter la val de la référence produit
ActiveCell = ref
'La deuxième colonne contien la val de la variable qte
ActiveCell.Offset(0, 4) = qte
'Je sélectionne la ligne en dessous
ActiveCell.Offset(1, 0).Select
'Je sélectionne la feuille detail_facture
Sheets("detail_facture").Select
'Je sélectionne la cellule en dessous
ActiveCell.Offset(1, 0).Select
Loop
End With
End If

Application.ScreenUpdating = True

Set Trouve = Nothing
End Sub
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
10
Date d'inscription
lundi 8 novembre 2010
Statut
Membre
Dernière intervention
4 février 2011
3
Merci
Merci cnt pour ton aide, j'ai trouvé la solution. Le problème venait du deuxième Do While quand je revenais sur la page consult j'écrivai sur la cellule A14 et je supprimai la ligne précédente, j'ai donc rajouté un Do While et ça fonctionne parfaitement !!

Merci à la prochaine ;)


Sub consulter()
Application.ScreenUpdating = False

' consulter Macro
'
' Touche de raccourci du clavier: Ctrl+Shift+M
'Copier la valeur dans la case séletionner
Application.CutCopyMode = False
ActiveCell.Copy
' Rend la feuille consult visible

Sheets("consult").Visible = True
Sheets("consult").Select
Range("B8").Select
ActiveSheet.Paste

'Déclaration des variables
Dim Trouve As Range
Dim Valeur_cherchee As String

'Détermination de la valeur à rechercher dans consult, soit le N° de facture
Valeur_cherchee = Sheets("consult").Range("B8").Value
'procédure de recherche du numéro de facture
Set Trouve = Sheets("liste_facture").Columns(1).Cells.Find(what:=Valeur_cherchee)
'Quand on a trouvé le n° de facture
If Trouve Is Nothing Then
MsgBox "La facture n'est pas archivée", vbOKOnly + vbExclamation, "Terminé"

Else


''//DEBUT DE PROCEDURE FAISANT APPARAITRE LES PRINCIPAUX ELEMENTS DE LA FACTURE
With Sheets("liste_facture")
'Copie du num client que l'on colle en B9
Trouve.Offset(0, 1).Copy
Sheets("consult").Select
Range("B9").Select
ActiveSheet.Paste
'Copie de la date en F1
Trouve.Offset(0, 2).Copy
Sheets("consult").Select
Range("F1").Select
ActiveSheet.Paste
End With

''//DEBUT DE PROCEDURE POUR COLLER LE DETAIL DE LA FACTURE
With Sheets("detail_facture")
'Je sélectionne la feuille detail_facture
Sheets("detail_facture").Select
'Dans cette feuille, je sélectionne A1
Range("A1").Select
'Tant que la cellule <> rien
Do While ActiveCell <> Valeur_cherchee
'Je sélectionne la cellule en dessous
ActiveCell.Offset(1, 0).Select
Loop
'A ce stade, la cellule active dans la feuille detail_facture
'est la première cellule avec le numéro de facture

'Je selectionne la cellule de droite avec la référence produit et je vais la coller en A14 de la feuille consult

'Tant que la celulle active = Valeur_cherchee
Do While ActiveCell = Valeur_cherchee
'j'instaure les variables ref, qte
Dim ref
Dim qte

'la var ref est égale à la celulle active+ 1 colonne
ref = ActiveCell.Offset(0, 1)
'la var qte = à la val de la cellule active + 2 colonnes
qte = ActiveCell.Offset(0, 2)

'Je sélectionne la première ligne des ref de la feuille consult
Sheets("consult").Select
Range("A14").Select

'Je selectionne la première ligne disponible du tableau facture
Do While ActiveCell <> ""
ActiveCell.Offset(1, 0).Select
Loop
'je peux lui affecter la val de la référence produit
ActiveCell = ref
'La deuxième colonne contien la val de la variable qte
ActiveCell.Offset(0, 4) = qte
'Je sélectionne la ligne en dessous
ActiveCell.Offset(1, 0).Select
'Je sélectionne la feuille detail_facture
Sheets("detail_facture").Select
'Je sélectionne la cellule en dessous
ActiveCell.Offset(1, 0).Select
Loop
End With
End If
Sheets("consult").Select
Application.ScreenUpdating = True

Set Trouve = Nothing
End Sub

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 121 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_ilyaundebutatout
Messages postés
219
Date d'inscription
lundi 21 novembre 2005
Statut
Membre
Dernière intervention
20 décembre 2010
0
Merci
Bonjour

Ben.. c'est que la valeur cherchée n'y est pas, il faut entre autres solutions, limiter le nombre de cellules dans la zone de recherche, par exemple.
du genre
compteur=1
tant que (contenu cellule <> Valeur_cherchee) et (compteur < 100)
sélection cellule suivante
compteur = compteur + 1
fin tant que

Je pense qu'ici, la recherche est faite sur la chaine: "Valeur_cherchee", et non pas sur la variable: Valeur_cherchee

Bonne soirée

CNTJC
Commenter la réponse de cnt
Messages postés
10
Date d'inscription
lundi 8 novembre 2010
Statut
Membre
Dernière intervention
4 février 2011
0
Merci
Bonjour,

Merci cnt pour ton aide. Tu avais raison pour valeur_cherchee. C'était une erreur. Voila le nouveau code que j'ai écris, il fonctionne à l'exception des produits, seul le dernier est écrit. Je pense qu'Excel recopie à chaque fois la ref et les quantité sur la première ligne de la feuille "consult" , il ne descend pas à chaque fois, je n'arrive pas à comprendre pourquoi ?

J'ai essayé avec ce que tu m'a conseillé ci dessus mais j'ai dû mal comprendre, ça ne fonctionne pas. Compteur est une variable n'est-ce pas ? Désolé mais je débute sous VBA.

Merci d'avance pour ton aide


Sub consulter()
Application.ScreenUpdating = False

' consulter Macro
'
' Touche de raccourci du clavier: Ctrl+Shift+M
'Copier la valeur dans la case séletionner
Application.CutCopyMode = False
ActiveCell.Copy
' Rend la feuille consult visible

Sheets("consult").Visible = True
Sheets("consult").Select
Range("B8").Select
ActiveSheet.Paste

'Déclaration des variables
Dim Trouve As Range
Dim Valeur_cherchee As String

'Détermination de la valeur à rechercher dans consult, soit le N° de facture
Valeur_cherchee = Sheets("consult").Range("B8").Value
'procédure de recherche du numéro de facture
Set Trouve = Sheets("liste_facture").Columns(1).Cells.Find(what:=Valeur_cherchee)
'Quand on a trouvé le n° de facture
If Trouve Is Nothing Then
MsgBox "La facture n'est pas archivée", vbOKOnly + vbExclamation, "Terminé"

Else


''//DEBUT DE PROCEDURE FAISANT APPARAITRE LES PRINCIPAUX ELEMENTS DE LA FACTURE
With Sheets("liste_facture")
'Copie du num client que l'on colle en B9
Trouve.Offset(0, 1).Copy
Sheets("consult").Select
Range("B9").Select
ActiveSheet.Paste
'Copie de la date en F1
Trouve.Offset(0, 2).Copy
Sheets("consult").Select
Range("F1").Select
ActiveSheet.Paste
End With

''//DEBUT DE PROCEDURE POUR COLLER LE DETAIL DE LA FACTURE
With Sheets("detail_facture")
'Je sélectionne la feuille detail_facture
Sheets("detail_facture").Select
'Dans cette feuille, je sélectionne A1
Range("A1").Select
'Tant que la cellule <> rien
Do While ActiveCell <> Valeur_cherchee
'Je sélectionne la cellule en dessous
ActiveCell.Offset(1, 0).Select
Loop
'A ce stade, la cellule active dans la feuille detail_facture
'est la première cellule avec le numéro de facture

'Je selectionne la cellule de droite avec la référence produit et je vais la coller en A14 de la feuille consult

'Tant que la celulle active <>""
Do While ActiveCell = Valeur_cherchee
'j'instaure les variables ref, qte
Dim ref
Dim qte

'la var ref est égale à la celulle active+ 1 colonne
ref = ActiveCell.Offset(0, 1)
'la var qte = à la val de la cellule active + 2 colonnes
qte = ActiveCell.Offset(0, 2)

'Je sélectionne la première ligne des ref de la feuille consult
Sheets("consult").Select
Range("A14").Select
'je peux lui affecter la val de la référence produit
ActiveCell = ref
'La deuxième colonne contient la val de la variable qte
ActiveCell.Offset(0, 4) = qte
'Je sélectionne la ligne en dessous
ActiveCell.Offset(1, 0).Select
'Je sélectionne la feuille detail_facture
Sheets("detail_facture").Select
'Je sélectionne la cellule en dessous
ActiveCell.Offset(1, 0).Select
Loop
End With
End If
Sheets("consult").Select
Application.ScreenUpdating = True

Set Trouve = Nothing
End Sub
Commenter la réponse de cs_ilyaundebutatout
Messages postés
219
Date d'inscription
lundi 21 novembre 2005
Statut
Membre
Dernière intervention
20 décembre 2010
0
Merci
Bonsoir
J'ai regardé de plus près la procédure. Nul besoin de faire des "copier/coller", de simples affectations suffisent.

Dim Trouve As Range
Dim Valeur_cherchee As String

'Détermination de la valeur à rechercher dans consult, soit le N° de facture
Valeur_cherchee = ActiveCell.Value

Sheets("consult").Range("B8").Value = Valeur_cherchee
'procédure de recherche du numéro de facture
Set Trouve = Sheets("liste_facture").Columns(1).Cells.Find(what:=Valeur_cherchee)
If Trouve Is Nothing Then
MsgBox "La facture n'est pas archivée", vbOKOnly + vbExclamation, "Terminé"
Else
''//DEBUT DE PROCEDURE FAISANT APPARAITRE LES PRINCIPAUX ELEMENTS DE LA FACTURE
'Copie du num client que l'on colle en B9
Sheets("consult").Range("B9") = Trouve.Offset(0, 1)
Sheets("consult").Range("F1") = Trouve.Offset(0, 2) ''Copie de la date en F1

''//DEBUT DE PROCEDURE POUR COLLER LE DETAIL DE LA FACTURE
'Je sélectionne la feuille detail_facture

Set Trouve = Sheets("detail_facture").Columns(1).Cells.Find(what:=Valeur_cherchee)
If Trouve Is Nothing Then
MsgBox "Il n'y a pas de détails de la facture", vbOKOnly + vbExclamation, "Terminé"
Else

'Je sélectionne la première ligne des ref de la feuille consult
'je peux lui affecter la val de la référence produit
Sheets("consult").Range("A14") = Trouve.Offset(0, 1)
'La deuxième colonne contient la val de la variable qte
Sheets("consult").Range("A14").Offset(0, 4) = Trouve.Offset(0, 2)
End If
End If
Set Trouve = Nothing
Sheets("consult").Select

Bonne programmation.
Commenter la réponse de cnt
Messages postés
10
Date d'inscription
lundi 8 novembre 2010
Statut
Membre
Dernière intervention
4 février 2011
0
Merci
Une fois encore, merci pour ton aide.
Ton code est effectivement beaucoup plus rapide mais je me retrouve avec le même problème qu'avec mon code, je n'ai qu'un produit dans la facture sur la feuille "consult". Alors que, comme tu peux le voir dans la feuille detail-facture, il y a souvent plusieurs produits.

Je pense qu'il faut utiliser "Do While" mais ça ne fonctionne pas sur la feuille consult, ça reécrit à chaque fois sur la ligne A14 et donc ça efface ce qu'il y avait précédemment, aurais-tu une idée de l'origine de mon problème ?

J'espère être à peu près clair, merci beaucoup en tout cas pour ton aide ;)
Commenter la réponse de cs_ilyaundebutatout