IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Débutant - Erreur 1004 VBA


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Inscrit en
    Novembre 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Débutant - Erreur 1004 VBA
    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?fil...cijPuVRsYm.xls

    Excel 2007
    http://www.cijoint.fr/cjlink.php?fil...ijD56hlpJ.xlsm



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    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

    Windows 7 / Firefox 3.6.12

  2. #2
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut ERREUR 1004
    Bonjour Joffrey,

    Plusieurs remarques :

    - beaucoup de redondances dans ton code

    Exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            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
    Si tu appliques la méthode With, alors il n'est pas besoin de répéter l'objet Sheets("detail_facture")

    - Les Select n'ont aucune utilité si ce n'est d'alourdir le code et d'en altérer sa clarté.
    Exemple (à adapter, voir l'aide en ligne)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("G9").Copy Destination:=ActiveSheet.Range("G10")
    - Je trouve dangereux de -presque - commencer le code par

    Ces remarques faîtes, je ne vois pas ce que tu veux faire.
    Explique le processus que tu souhaites aplliquer.

    Autrement dit :
    - De quelle cellule pars-tu (Selection en début de code) ?
    - Quelles valeurs souhaites-tu copier ? Dans quelle feuille ?
    - Vers quelles destinations ?
    - Quel résultat escomptes-tu ?

    Peux-tu donner un exemple précis.

    Après réponses à ces questions, nous verrons le code.

    Bien cordialement.

    Marcel

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  3. #3
    Expert éminent sénior
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 803
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 803
    Points : 32 058
    Points
    32 058
    Par défaut
    Comme nous avons affaire à un débutant, je vais plutôt souligner un point positif : il a mis des commentaires, ainsi que des noms de variables significatifs. C'est très, très bien, et suffisament rare pour être apprécié.

    Après, c'est encore mieux quand les commentaires sont par paragraphe et non par ligne. C'est plus facile de comprendre l'ensemble du traitement comme ça. D'ou(je pense) la question de MarcelG sur ce que tu veux faire exactement, ça n'apparait pas clairement.

    Je souscris aussi à la motion sur les select. Ils bouffent des performances et de la place dans le code sans utilité. Plus généralement, J'ai l'impression que tu cherches à déplacer en permanence le curseur de selection pour faire des opérations sur chaque case. Ca peut peut-être marcher, mais c'est peu performant, et peu maintenable.

    en gros il faudrait remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
                '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
    par un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    dim ligne as integer, colonne as integer, ligneTravail as integer
    (...du code pour initialiser ligne et colonne là ou tu aurais mis ton select...)
    ligneTravail = ligne + 1
    ref = Sheets("detail_facture").cells(ligneTravail, colonne)
    ligneTravail = ligne + 2
    qte = Sheets("detail_facture").cells(ligneTravail, colonne)
     
    Sheets("consult").Cells(14,1) = ref
    en variante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ref = Sheets("detail_facture").cells((ligne + 1), colonne)
    qte = Sheets("detail_facture").cells((ligne + 2), colonne)
    qui évite d'avoir la variable ligneTravail, mais j'aime pas(d'autres adorent, donc je te donne les 2).
    Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
    1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
    2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
    3)le temps de comprendre toutes les exigences, le projet est terminé
    4)le temps de terminer le projet, les exigences ont changé
    Et le serment de non-allégiance :
    Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.

Discussions similaires

  1. [XL-2007] [Débutant] Erreur 1004
    Par 'OTM' dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 12/01/2015, 17h09
  2. Erreur 1004, VBA et Tableau Croisé Dynamique
    Par manu.68 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 25/02/2012, 08h59
  3. [E-07] Débutant erreur 1004
    Par dnargnidnod dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 17/03/2009, 00h40
  4. [E-07] erreur '1004' vba Excel (suite)
    Par mrah1 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/02/2009, 17h48
  5. erreur '1004' vba Excel
    Par mrah1 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/02/2009, 16h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo