Erreur 1004 sur VBA incomprise
Le débutant
-
Le debutant -
Le debutant -
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é.
Merci par avance à celui qui aura le courage de me venir en aide ...
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
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é.
Merci par avance à celui qui aura le courage de me venir en aide ...
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
A voir également:
- Erreur 1004 sur VBA incomprise
- Erreur 0x80070643 - Accueil - Windows
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Erreur 4201 france tv ✓ - Forum Réseaux sociaux
- J'aime par erreur facebook notification - Forum Facebook
- Code erreur f3500-31 ✓ - Forum Bbox Bouygues
4 réponses
Bonjour,
L'erreur est ici :
Il faut faire :
Valeur_cherchee est une variable de type String initialisée ici :
Dans Do While ActiveCell <> "Valeur_cherchee" ce n'est pas le contenu de la variable Valeur_cherchee mais la chaine de caractère "Valeur_cherchee" qui est testé.
;o)
L'erreur est ici :
Do While ActiveCell <> "Valeur_cherchee"
Il faut faire :
Do While ActiveCell <> Valeur_cherchee
Valeur_cherchee est une variable de type String initialisée ici :
Valeur_cherchee = Sheets("consult").Range("B8").Value
Dans Do While ActiveCell <> "Valeur_cherchee" ce n'est pas le contenu de la variable Valeur_cherchee mais la chaine de caractère "Valeur_cherchee" qui est testé.
;o)
Bonjour
tant que la la cellule active est différente du texte "Valeur_cherchee" !
D'après ton fichier aucune cellule de la feuille concernée ne contient "Valeur_cherchee", donc on cherche de A1 jusqu'à A65536 et on poursuit pour la cellule dessous, et .... on a dépassé les limites d'excel 2003, d'ou plantage!
Pour 2007 idem, on dépasse les limites d'Excel.
bon courage
'Tant que la cellule <> rien Do While ActiveCell <> "Valeur_cherchee" 'Je sélectionne la cellule en dessous ActiveCell.Offset(1, 0).Select Loop
tant que la la cellule active est différente du texte "Valeur_cherchee" !
D'après ton fichier aucune cellule de la feuille concernée ne contient "Valeur_cherchee", donc on cherche de A1 jusqu'à A65536 et on poursuit pour la cellule dessous, et .... on a dépassé les limites d'excel 2003, d'ou plantage!
Pour 2007 idem, on dépasse les limites d'Excel.
bon courage
Merci beaucoup à tous les deux pour votre réponse.
J'ai modifié mais ça ne fonctionne toujours pas.
Je pense qu'au tout début:
'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
Ceci ne fonctionne pas. Je veux que Excel copie la valeur de la cellule dans laquelle j'ai effectué Ctrl+Shift+M.
Mais j'ai l'impression qu'il ne le fait pas car quand j'active la macro, la feuille consult s'affiche mais rien ne s'y passe et Excel bloque à nouveau. Je pense que le problème vien de là qu'en pensez-vous ?
Merci d'avance pour votre réponse !!
J'ai modifié mais ça ne fonctionne toujours pas.
Je pense qu'au tout début:
'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
Ceci ne fonctionne pas. Je veux que Excel copie la valeur de la cellule dans laquelle j'ai effectué Ctrl+Shift+M.
Mais j'ai l'impression qu'il ne le fait pas car quand j'active la macro, la feuille consult s'affiche mais rien ne s'y passe et Excel bloque à nouveau. Je pense que le problème vien de là qu'en pensez-vous ?
Merci d'avance pour votre réponse !!
Merci à tous les deux pour votre 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
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