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 :

Erreur d'exécution 1004 VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 4
    Par défaut Erreur d'exécution 1004 VBA
    Bonjour,
    débutant en VBA, et en code en général, j'essaye de faire une macro permettant de copier les caractéristiques d'une machine d'un classeur dans un autre en fonction du nom des machine et de la date (la macro sera activé chaque jour et s'incrémente de 1 pour changer de case). J'ai écris le code mais je reçois une erreur 1004. Pourriez vous m'aider ? Mes éléments de départ sont dans la feuille 1 du classeur Essai003.xlsm et je veux les mettre dans la feuille 1 du classeur Essai004.xlsm. L'ensemble des tests en if me permettent de savoir à quelle machine appartient la caractéristique et la remettre dans la bonne case à l'arrivé. Si la case comporte un nom inconnue on arrête la boucle for. (ce n'est pas optimal mais je verrai pour optimiser quand ça marchera). J'ai effectué l'indentation manuellement pour que ce soit plus lisible.
    Merci d'avance.

    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
    Sub CommandButton1_Click()
    Windows("Essai003.xlsm").Activate
    Dim k As Integer
    Dim j As Integer
    Dim i As Integer
    Dim l As Integer
     
    Sheets("Feuil1").Range("B1").Copy
    Windows("Essai004.xlsm").Activate
    Worksheets("Feuil1").Cells(1, i).PasteSpecial Paste:=xlValues
    For j = 3 To 16
        Windows("Essai003.xlsm").Activate
        Sheets("Feuil1").Cells(j, 15).Copy
        If Cells(j, 10) = "DS17" Then
            l = 2
        ElseIf Cells(j, 10) = ("DS30") Then
                l = 3
              ElseIf Cells(j, 10) = ("DS11") Then
                    l = 4
                    ElseIf Cells(j, 10) = ("DR28") Then
                        l = 5
                          ElseIf Cells(j, 10) = ("DS40") Then
                            l = 6
                                ElseIf Cells(j, 10) = ("DS41") Then
                                    l = 7
                                      ElseIf Cells(j, 10) = ("DS08") Then
                                        l = 8
                                            ElseIf Cells(j, 10) = ("DS12") Then
                                                l = 9
                                                  ElseIf Cells(j, 10) = ("DR20") Then
                                                    l = 10
                                                        ElseIf Cells(j, 10) = ("DR15") Then
                                                            l = 11
                                                              ElseIf Cells(j, 10) = ("DR16") Then
                                                                l = 12
                                                                    ElseIf Cells(j, 10) = ("DR32") Then
                                                                        l = 13
                                                                          ElseIf Cells(j, 10) = ("DR18") Then
                                                                            l = 14
                                                                                ElseIf Cells(j, 10) = ("DH27") Then
                                                                                    l = 15
                                                                                      ElseIf Cells(j, 10) = ("DS06") Then
                                                                                        l = 16
                                                                                            ElseIf Cells(j, 10) = "DR19" Then
                                                                                                l = 17
                                                                                                  ElseIf Cells(j, 10) = "DS05" Then
                                                                                                    l = 18
                                                                                                        ElseIf Cells(j, 10) = "DR22" Then
                                                                                                            l = 19
                                                                                                              ElseIf Cells(j, 10) = "DR03" Then
                                                                                                                l = 20
                                                                                                                    ElseIf Cells(j, 0) = "DS42" Then
                                                                                                                        l = 21
                                                                                                                        Else:
                                                                                                                            j = 16
        End If
        Windows("Essai004.xlsm").Activate
        Worksheets("Feuil1").Cells(k, i).PasteSpecial Paste:=xlValues
    Next
    Windows("Essai003.xlsm").Activate
    Cells(2, 1) = i + 1
     
    End Sub

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Petit détail liminaire : tu devrais remplacer ta batterie de ElseIf par un Select Case plus pratique et plus lisible.
    https://msdn.microsoft.com/fr-fr/lib.../gg278665.aspx

    Autre conseil (mais c'est moins important), je te conseille d'utiliser Workbook plutôt que Window pour désigner un classeur.
    https://msdn.microsoft.com/fr-fr/lib.../ff835568.aspx

    Citation Envoyé par vdescham Voir le message
    J'ai écris le code mais je reçois une erreur 1004.
    Quelle ligne passe en surbrillance quand tu appuies sur Debogage lorsque survient ton erreur ?

    Je pense que le problème vient du fait que tu confonds i et l.
    Tu renseignes la variable l sans l'utiliser et tu utilises la variable i sans l'avoir renseignée.

    Quand on débugue, les variable est le premier truc à vérifier après la syntaxe.
    Comme on dit : "le diable est dans la variable".

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Si j'ai bien vu, déjà au début dans cette ligne de code, vous utilisez la variable "i" qui n'a pas été initialisée (et le débogage indique bien "Erreur 1004" sur cette ligne) :

    Worksheets("Feuil1").Cells(1, i).PasteSpecial Paste:=xlValues
    Vous l'utilisez également deux fois à la fin de la procédure.

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    outre les variables non initialisées (i,k) qui provoquent ton erreur

    ton bloc if/end if pique effectivement les yeux.
    un select case n'est même pas nécessaire en utilisant la fonction Match (celle de l'objet Application, pas celle appartenant à la classe Worksheetfunction), qui peut également gérer la sortie de ta boucle For/Next sans forcer son indice

    exemple illustratif :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub toto()
    '   Poisition doit impérativement être un VARIANT !
    Dim Position As Variant, Tableau(), Valeur As String, j As Long
     
    Tableau = Array("", "Valeur1", "Valeur2", "Valeur3", "Valeur4")
        For j = 1 To 10 ' pour l'exemple
            Valeur = "Valeur" & j                                   ' on construit des chaines qui existent dans le tableau
            Position = Application.Match(Valeur, Tableau, False)    ' on recherche si la chaine existe pour en récupérer sa position
            If IsError(Position) Then Exit For                      ' si la chaine n'existe pas, position est en erreur : on sort de la boucle For/Next
            Debug.Print Position & " | " & Valeur                   ' on affiche la position de la valeur qu'on cherchait
        Next j
    Debug.Print "on s'est arrêté à la position " & j
    End Sub

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 4
    Par défaut
    je ne sais pas pourquoi il manque effectivement une ligne de code sur mon message qui est bien dans ma page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     Windows("Essai003.xlsm").Activate
    Dim k As Integer
    Dim j As Integer
    Dim i As Integer
    Dim l As Integer
    i = Cells(2, 1)
    i est alors bien initialisé

    j'ai remplacé le k par le l (oublie lors de l'évolution du code) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        End If
        Windows("Essai004.xlsm").Activate
        Worksheets("Feuil1").Cells(l, i).PasteSpecial Paste:=xlValues
    je vais essayer de retirer les if je vous redis
    Merci pour vos réponses

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Même si le i est déclaré, il n'est toujours pas renseigné.
    A aucun endroit de ton code tu ne lui donnes une valeur.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. VBA - Erreur d'exécution 1004 Erreur définie par l'application ou par l'objet
    Par matthieupaul dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 22/01/2015, 16h18
  2. [XL-2007] vba : erreur d'exécution 1004
    Par rayba89 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/12/2013, 10h08
  3. [VBA][export] Erreur d'exécution '1004'
    Par le_niak dans le forum VBA Access
    Réponses: 1
    Dernier message: 29/07/2008, 20h33
  4. [VBA-E] Erreur d'exécution '1004'
    Par bibi5883 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/03/2007, 14h31
  5. [VBA-E] erreur d'exécution 1004 ?
    Par toy dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/05/2006, 13h15

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