Erreur 1004 sur VBA incomprise

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

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


4 réponses

  1. Bonjour,

    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)

    1
    1. Bonjour

               '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
      0
      1. 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 !!
        0
        1. 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
          0