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 1004 - erreur définie par l'application ou par l'objet - .name [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2013
    Messages : 24
    Points : 17
    Points
    17
    Par défaut erreur 1004 - erreur définie par l'application ou par l'objet - .name
    Bonjour à tous,

    J'ai un petit problème dans un module.

    Mon code fonctionnait très bien lorsque mes variables étaient déclarées dans les procédures. Mais comme c'est un fichier que je vais envoyer à pas mal de monde et qu'ils auront à changer des chemins ou nom de fichiers, j'ai décidé de déclarer toutes les variables en un lieu unique, pour ne pas avoir à fouiller dans tout le code.

    En tête de module (avant la première fonction) j'ai donc déclaré des variables Public, et dans la fonction qui s'effectue à l'ouverture du fichier Excel j'ai attribué des références aux variables.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Public Rapport_final_gdc As Workbook
        Public Extraction As Workbook
        Public Rapport_sans_macros As Workbook
        Public Nom_preparateur As String
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub WorkBook_Open()
     
     
     
        Set Rapport_final_gdc = Workbooks("GDC_delai_reso.xls")
        Set Extraction = Workbooks.Open("S:\DAUSE\Permis\Rapports permis et certificats\GDC_requetes\GDC_extraction.xls")   'CHEMIN ET NOM DU FICHIER À REMPLACER SI BESOIN donne à une variable le nom du fichier Excel extrait de GDC et je l'ouvre
        Set Rapport_sans_macros = Workbooks.Open("S:\DAUSE\Permis\Rapports permis et certificats\GDC_delai_reso_sans_macros.xls")
     
     
        Call creation_rapport
        Call Copier_feuilles
     
     
    End Sub
    Depuis que j'ai changé cela, j'ai l'erreur 1004 inscrite en objet qui s'affiche pour la ligne en rouge, et je ne comprends vraiment pas pourquoi.

    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
    Sub creation_rapport()
    
        ' Désactivation des messages d'alerte
        Application.DisplayAlerts = False
        
        'suppression des données existantes dans le fichier que l'on utilise pour le rapport final
        Rapport_final_gdc.Activate   'postionne sur le fichier désiré
        DerniereLigneRapport_final_gdc = Rapport_final_gdc.Sheets(1).UsedRange.Rows.Count  'compte le nombre de lignes du fichier Excel "actif"
        Range("A2:AP" & DerniereLigneRapport_final_gdc).Delete   'supprime toutes les lignes du fichier, sauf la première (l'entête)
        
              
        'copier/coller des informations du rapport extrait au rapport final
        Extraction.Activate  'positionne sur le fichier désiré
        Range("J:K,G:G").Delete Shift:=xlToLeft  'supprime du fichier les colonnes non désirées
        DerniereLigneExtraction = Extraction.Sheets(1).Range("A" & Rows.Count).End(xlUp).Row   'compte le nombre de ligne du fichier
        Extraction.Sheets(1).Range("A2:L" & DerniereLigneExtraction).Copy  'copie les colonnes
        Rapport_final_gdc.Activate  'positionne sur le fichier dans lequel on veut coller les données
        Range("A2").Select  'sélectionne la cellule qui sera la première à recevoir les données
        ActiveSheet.Paste  'colle les données
        
        'fermeture du fichier extrait de GDC sans sauvegarder les modifications qui y ont été faites (suppression des colonnes)
        Extraction.Close SaveChanges:=False
        
        'Remplissage des champs vides de "délai de résolution" et des quatres dernières colonnes
        DerniereLigneRapport_final_gdc = Rapport_final_gdc.Sheets(1).Range("A" & Rows.Count).End(xlUp).Row  'compte le nombre de lignes du fichier
        For Ligne = DerniereLigneRapport_final_gdc To 2 Step -1   'en partant de la dernière ligne et en remontant ligne par ligne, on effectue les actions demandées
            If Not Range("L" & Ligne) <> "" Then  'si la cellule dans la colonne L (délai de résolution) est vide, on indique 365
                Range("L" & Ligne) = 365
            End If
            Range("M" & Ligne) = Format(Date, "d mmmm yyyy")   'ajout de la date du jour
            Range("N" & Ligne) = DateDiff("d", Range("B" & Ligne), Range("M" & Ligne))  'calcul du nombre de jours entre la date de création et la date du jour
            Range("O" & Ligne) = Range("N" & Ligne).Value - Range("L" & Ligne).Value
            Range("P" & Ligne) = Range("N" & Ligne).Value \ Range("L" & Ligne).Value
            If Range("O" & Ligne).Value >= 0 Then  'si la valeur de la cellule dans la colonne O (nombre de jours hors délai) est supérieur à 0, on grise la cellule (15 est le code pour le gris choisi)
                Range("O" & Ligne).Interior.ColorIndex = 15
            End If
        Next Ligne  'on remonte d'une ligne
        
        'modification du nom de la feuille
        Rapport_final_gdc.Sheets(1).Name = "Requêtes " & Format(Date, "d mmmm yyyy")
        
        'mise en page
        Range("A:C").HorizontalAlignment = xlCenter   'alignement horizontal du texte dans la plage indiquée
        Range("E:E").HorizontalAlignment = xlCenter
        Range("J:J").HorizontalAlignment = xlCenter
        Range("L:P").HorizontalAlignment = xlCenter
        Range("A:P").VerticalAlignment = xlCenter   'alignement vertical du texte dans la plage indiquée
        Range("A1:P" & DerniereLigneRapport_final_gdc).Borders.Value = 1   'ajout des bordures
        Range("A1:P" & DerniereLigneRapport_final_gdc).Sort Key1:=Range("O2"), Order1:=xlDescending  'triage par ordre décroissant en fonction de la colonne O (nombre de jour hors délai)
        Range("K2:K" & DerniereLigneRapport_final_gdc).ShrinkToFit = True  'ajustement automatique du texte à la taille de la colonne
        Range("G2:H" & DerniereLigneRapport_final_gdc).ShrinkToFit = True
        
        'Ajout de l'en-tête et du pied de page
        With ActiveSheet.PageSetup
            .CenterHeader = "&14&BGDC" & Chr(10) & "actifs" & Chr(10) & Format(Date, "d mmmm yyyy")  'le texte à changer est entre guillemets, après le &14&b (ce qui veut dire police 14 et en gras). chr(1o) permet d'aller à la ligne
            .RightFooter = Nom_preparateur
        End With
        
        'Définition de la plage d'impression
        ActiveSheet.PageSetup.PrintArea = "$A$1:$P$" & DerniereLigneRapport_final_gdc
        
    End Sub

    Est-ce que vous sauriez m'aider?

    Si vous avez des questions, n'hésitez surtout pas.

    Merci d'avance.

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Vite fait, juste avant de fermer pour aller souper:

    Dans cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Rapport_final_gdc = Workbooks("GDC_delai_reso.xls")
    Es-tu sûr que ton classeur est déjà ouvert ?

    Également :

    Ces 4 lignes sont dans quel module ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Public Rapport_final_gdc As Workbook
     Public Extraction As Workbook
     Public Rapport_sans_macros As Workbook
     Public Nom_preparateur As String
    Elles doivent être obligatoirement dans un module standard. (Jamais dans un module de classe, un module de classeur ou un module de feuille. (En fait, ce sont 3 types de modules de classe.))
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2013
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    Bonjour,

    Tout d'abord, merci pour ton aide.

    La réponse à tes questions :

    • Es-tu sûr que ton classeur est déjà ouvert ? Oui, c'est à l'ouverture de ce classeur que les macros se lancent via le Sub Workbook_open() que j'ai placé dans ThisWorkBook


    • Ces 4 lignes sont dans quel module ? Je n'ai qu'un module qui s'appelle Module 1 (très original ), et c'est au tout début de ce module que ce situent ces quatre lignes, avec mon Sub creation_rapport() :


    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
        Public Rapport_final_gdc As Workbook
        Public Extraction As Workbook
        Public Rapport_sans_macros As Workbook
        Public Nom_preparateur As String
     
     
     
    Sub creation_rapport()
     
        ' Désactivation des messages d'alerte
        Application.DisplayAlerts = False
     
        'suppression des données existantes dans le fichier que l'on utilise pour le rapport final
        Rapport_final_gdc.Activate   'postionne sur le fichier désiré
        DerniereLigneRapport_final_gdc = Rapport_final_gdc.Sheets(1).UsedRange.Rows.Count  'compte le nombre de lignes du fichier Excel "actif"
        Range("A2:AP" & DerniereLigneRapport_final_gdc).Delete   'supprime toutes les lignes du fichier, sauf la première (l'entête)
     
     
        'copier/coller des informations du rapport extrait au rapport final
        Extraction.Activate  'positionne sur le fichier désiré
        Range("J:K,G:G").Delete Shift:=xlToLeft  'supprime du fichier les colonnes non désirées
        DerniereLigneExtraction = Extraction.Sheets(1).Range("A" & Rows.Count).End(xlUp).Row   'compte le nombre de ligne du fichier
        Extraction.Sheets(1).Range("A2:L" & DerniereLigneExtraction).Copy  'copie les colonnes
        Rapport_final_gdc.Activate  'positionne sur le fichier dans lequel on veut coller les données
        Range("A2").Select  'sélectionne la cellule qui sera la première à recevoir les données
        ActiveSheet.Paste  'colle les données
     
        'fermeture du fichier extrait de GDC sans sauvegarder les modifications qui y ont été faites (suppression des colonnes)
        Extraction.Close SaveChanges:=False
     
        'Remplissage des champs vides de "délai de résolution" et des quatres dernières colonnes
        DerniereLigneRapport_final_gdc = Rapport_final_gdc.Sheets(1).Range("A" & Rows.Count).End(xlUp).Row  'compte le nombre de lignes du fichier
        For Ligne = DerniereLigneRapport_final_gdc To 2 Step -1   'en partant de la dernière ligne et en remontant ligne par ligne, on effectue les actions demandées
            If Not Range("L" & Ligne) <> "" Then  'si la cellule dans la colonne L (délai de résolution) est vide, on indique 365
                Range("L" & Ligne) = 365
            End If
            Range("M" & Ligne) = Format(Date, "d mmmm yyyy")   'ajout de la date du jour
            Range("N" & Ligne) = DateDiff("d", Range("B" & Ligne), Range("M" & Ligne))  'calcul du nombre de jours entre la date de création et la date du jour
            Range("O" & Ligne) = Range("N" & Ligne).Value - Range("L" & Ligne).Value
            Range("P" & Ligne) = Range("N" & Ligne).Value \ Range("L" & Ligne).Value
            If Range("O" & Ligne).Value >= 0 Then  'si la valeur de la cellule dans la colonne O (nombre de jours hors délai) est supérieur à 0, on grise la cellule (15 est le code pour le gris choisi)
                Range("O" & Ligne).Interior.ColorIndex = 15
            End If
        Next Ligne  'on remonte d'une ligne
     
        'modification du nom de la feuille
        Rapport_final_gdc.Sheets(1).Name = "Requêtes " & Format(Date, "d mmmm yyyy")
     
        'mise en page
        Range("A:C").HorizontalAlignment = xlCenter   'alignement horizontal du texte dans la plage indiquée
        Range("E:E").HorizontalAlignment = xlCenter
        Range("J:J").HorizontalAlignment = xlCenter
        Range("L:P").HorizontalAlignment = xlCenter
        Range("A:P").VerticalAlignment = xlCenter   'alignement vertical du texte dans la plage indiquée
        Range("A1:P" & DerniereLigneRapport_final_gdc).Borders.Value = 1   'ajout des bordures
        Range("A1:P" & DerniereLigneRapport_final_gdc).Sort Key1:=Range("O2"), Order1:=xlDescending  'triage par ordre décroissant en fonction de la colonne O (nombre de jour hors délai)
        Range("K2:K" & DerniereLigneRapport_final_gdc).ShrinkToFit = True  'ajustement automatique du texte à la taille de la colonne
        Range("G2:H" & DerniereLigneRapport_final_gdc).ShrinkToFit = True
     
        'Ajout de l'en-tête et du pied de page
        With ActiveSheet.PageSetup
            .CenterHeader = "&14&BGDC" & Chr(10) & "actifs" & Chr(10) & Format(Date, "d mmmm yyyy")  'le texte à changer est entre guillemets, après le &14&b (ce qui veut dire police 14 et en gras). chr(1o) permet d'aller à la ligne
            .RightFooter = Nom_preparateur
        End With
     
        'Définition de la plage d'impression
        ActiveSheet.PageSetup.PrintArea = "$A$1:$P$" & DerniereLigneRapport_final_gdc
     
    End Sub
    Merci beaucoup!

  4. #4
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonsoir,
    au hasard, as-tu essayé en passant par le nom de feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rapport_final_gdc.Sheets("nomdetafeuille").Name = "Requêtes " & Format(Date, "d mmmm yyyy")
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2013
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    Bonjour Casefayere,

    Oui, j'ai essayé en mettant le nom de la feuille,ça n'a pas marché non plus. D'ailleurs je sais que la structure est bonne parce que j'ai essayé une autre fonction avec la même structure, et elle a très bien marché. C'est juste avec le .name que ça ne marche pas.

    Merci!

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2013
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    Bonjour à tous,

    En fait il semblerait que ça ne vienne pas de ce fichier, de cette macro en particulier : tous mes fichiers Excel qui ont une macro avec une ligne "activesheet.Name" plantent à cette ligne, alors que ça fonctionnait très bien avant. Je parle donc de fichiers dans lesquels je n'ai pas "joué" : du jour au lendemain je me suis retrouvé avec l'erreur mentionnée en objet pour toutes ces lignes.

    Est-ce que ça peut éclairer quelqu'un?

    Merci encore.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2013
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    Je viens de résoudre mon problème, et je peux me traiter de tous les noms tellement j'ai été imbécile

    J'ai oublié que j'avais mis une protection sur le classeur : il est donc impossible de modifier le nom d'une feuille... En ôtant la protection, tout est redevenu normal.

    Merci à vous, et désolé pour le temps que je vous ai fait perdre...

    Bonne journée!

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

Discussions similaires

  1. [XL-2003] Erreur d'éxécution 1004 Erreur définie par l'application ou par l'objet
    Par tokis dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/06/2012, 15h18
  2. Erreur d'exécution 1004. Erreur définie par l'application ou par l'object
    Par Quentin15 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/06/2011, 21h59
  3. ERREUR 1004-erreur défini par l'application ou par l'objet
    Par zineb87 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/02/2010, 17h40
  4. Erreur 1004 définie par l'application ou par l'objet
    Par GreatDeveloperOnizuka dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 05/12/2007, 10h33

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