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 illogique [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    stagiaire
    Inscrit en
    Septembre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : stagiaire
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Septembre 2011
    Messages : 26
    Par défaut Erreur 1004 illogique
    Bonjour,

    J'ai un problème assez épineux avec une macro de tri. En fait, j'ai un fichier qui contient 2 tableaux de données mis à jours automatiquement avec Access. J'ai d'autre part une feuille qui contient deux tableaux croisés dynamiques qui synthétisent les deux tableaux précédents. Le seul filtre appliqué à ces TCD est un filtre sur la date du jour.

    J'ai une macro qui fait les choses suivantes :
    -actualisation des TCD
    -suppression du filtre sur la date de la veille
    -application du filtre de la date du jour

    Problème : un beau jour, cette macro a cessé de fonctionner. Je dis bien un beau jour car elle a du fonctionner au moins deux mois sans sourciller. Malheureusement je n'ai vu aucune idée de ce qu'il a pu advenir...

    Explication du titre (le terme illogique, pour de la programmation, n'est pas franchement adapté, au mieux on peut dire incompréhensible) : j'ai lancé l'enregistreur de macro puis ai sélectionné une date disponible dans les filtres. J'ai tenté de relancer cette macro sans succès (erreur 1004). Ce qui est enregistré avec l'enregistreur de macro ne peut être reproduit ??? Gros doutes ...

    Voici le code utilisé pour mettre à jour le filtre de la date :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        With Sheets("TdB").PivotTables("TdbI").PivotFields("Date Inter")
            .ClearAllFilters
            .CurrentPage = Right(Left(StrJour, 5), 2) & "/" & Left(StrJour, 2) & "/" & Right(StrJour, 4)
        End With
     
        With Sheets("TdB").PivotTables("TdbP").PivotFields("Date Inter")
            .ClearAllFilters
            .CurrentPage = Right(Left(StrJour, 5), 2) & "/" & Left(StrJour, 2) & "/" & Right(StrJour, 4)
        End With
    Pas de problèmes du coté droit du "=" du .currentpage, j'ai testé avec du debug.print. Pas de problème avec la méthode ".clearAllFilters" (pas à pas ça roule). J'ai testé la méthode sur un autre tableau croisé dynamique de mon fichier, et l'enregistreur de macro fonctionne cette fois sans broncher.

    Une idée ?? =)

    Merci pour votre aide !

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Ce qui est enregistré avec l'enregistreur de macro ne peut être reproduit ???
    L'enregistreur est la source de plus d'une erreur, par exemple quand il enregistre des références L1C1 (VBA ne connaît que le R1C1) ou des nombres avec des virgules (pour VBA, c'est le séparateur des milliers) etc. Dans ton cas, il serait intéressant de savoir comment tu renseignes la variable "StrJour"

    Essaie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    StrJour = Format(Date, "m/d/yyyy")
    ActiveSheet.PivotTables(1).PivotFields("Date").CurrentPage = StrJour

  3. #3
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonsoir,

    je ne crois pas que ton enregistreur de macro à créé cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .CurrentPage = Right(Left(StrJour, 5), 2) & "/" & Left(StrJour, 2) & "/" & Right(StrJour, 4)
    j'aurais plutôt mis une date au format date et pas une chaine de caractére à droite de ton égal..

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour bbil,

    Et pourtant, si tu exécutes cette ligne, avec un champ de page contenant des dates :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Var = ActiveSheet.PivotTables(1).PivotFields("Date").CurrentPage
    tu récupères une variable string contenant une date au format "m/j/aaaa".

  5. #5
    Membre averti
    Homme Profil pro
    stagiaire
    Inscrit en
    Septembre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : stagiaire
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Septembre 2011
    Messages : 26
    Par défaut
    Désolé pour la réponse tardive, long weekend !

    Voila ce que me donne l'enregistreur de macro (qui ne se reproduit toujours pas)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        ActiveSheet.PivotTables("TdbI").PivotFields("Date Inter").ClearAllFilters
        ActiveSheet.PivotTables("TdbI").PivotFields("Date Inter").CurrentPage = _
            "16/05/2012"
    J'ai utilisé un string pour ma date du jour (StrJour) car dans l'enregistreur de macro, c'est un string qui est inséré après currentPage.

    J'essai quand même avec la date, sait-on jamais.

    Merci pour votre aide, j'espère qu'on arrivera à bout du problème.

  6. #6
    Membre averti
    Homme Profil pro
    stagiaire
    Inscrit en
    Septembre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : stagiaire
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Septembre 2011
    Messages : 26
    Par défaut
    J'ai testé avec ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        With Sheets("TdB").PivotTables("TdbI").PivotFields("Date Inter")
            .ClearAllFilters
            .CurrentPage = Format(Date - 3, "dd/mm/yyyy")
        End With
    Mais ce n'est toujours pas concluant.

    Au fait, je reviens sur ce que j'ai dit dans mon premier post : si je met le même champ dans un autre TCD du fichier, les macro de tri automatique ne marchent pas non plus ! J'ai bien un problème dans l'appel du champ il faut croire... (mais pourquoi ça fonctionnait avant ??? T_T )

  7. #7
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    L'enregistreur de macros t'induis en erreur, comme parfois; il enregistre au format Excel (c'est à dire avec tes paramètres locaux) alors que VBA use des paramètres US. Est-ce que tu as essayé ce que je t'ai proposé. Je l'ai testé et cela fonctionne.

  8. #8
    Membre averti
    Homme Profil pro
    stagiaire
    Inscrit en
    Septembre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : stagiaire
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Septembre 2011
    Messages : 26
    Par défaut
    Citation Envoyé par Bamban Voir le message
    J'ai testé avec ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        With Sheets("TdB").PivotTables("TdbI").PivotFields("Date Inter")
            .ClearAllFilters
            .CurrentPage = Format(Date - 3, "dd/mm/yyyy")
        End With
    Mais ce n'est toujours pas concluant.
    Oui et j'obtiens toujours une erreur 1004 ! J'ai mis Date-3 pour obtenir le 18 mai, et j'ai vérifié que cette date était bien dans la liste de mes filtres.

  9. #9
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Pas étonnant; utilise le format exactement comme je l'ai écrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .CurrentPage = Format(Date - 3, "m/d/yyyy")

  10. #10
    Membre averti
    Homme Profil pro
    stagiaire
    Inscrit en
    Septembre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : stagiaire
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Septembre 2011
    Messages : 26
    Par défaut
    Bon, j'ai modifié ma manière de traiter la date. Maintenant, Excel plante carrément à la ligne 37. J'ai suivi ton conseil et je suis passé à ceci :
    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
    Sub TriJour()
     
    Dim Jour As Date
    Jour = Format(Date - 1, "m/d/yyyy")
     
    'mise à jour des TCD
        Sheets("TdB").PivotTables("TdbI").PivotCache.Refresh
        Sheets("TdB").PivotTables("TdbP").PivotCache.Refresh
        Sheets("Stat Install").PivotTables("AnoIsem").PivotCache.Refresh
     
    On Error GoTo Annuler
    Jour = CDate(InputBox("Inscrire en dessous la date à isoler" & vbLf, "Tri", Jour))
    On Error GoTo 0
     
    Application.ScreenUpdating = False
     
    'Tri sur le jour des deux tableaux de donnée
    Range("DataI[#All]").AutoFilter 'efface les filtres en cours
    Range("DataP[#All]").AutoFilter 'efface les filtres en cours
     
    Sheets("Data Install").ListObjects("DataI").Range.AutoFilter Field:=13, _
        Operator:=xlFilterValues, Criteria1:=Array(2, Jour) 'Filtre les valeur de la veille dans le tableau DataP
    Sheets("Data Install").ListObjects("DataI").AutoFilter.ApplyFilter
     
    Sheets("Data Porta").ListObjects("DataP").Range.AutoFilter Field:=13, _
        Operator:=xlFilterValues, Criteria1:=Array(2, Jour) 'Filtre les valeur de la veille dans le tableau DataI
    Sheets("Data Porta").ListObjects("DataP").AutoFilter.ApplyFilter
     
     
    'Tri sur le jour des TCD de TdB
     
    On Error GoTo errorHandler 'gestion d'erreur : si la date entrée n'est pas trouvée dans le TCD
     
        'puis on trie
        With Sheets("TdB").PivotTables("TdbI").PivotFields("Date Inter")
            .ClearAllFilters
            .CurrentPage = Jour
        End With
     
        With Sheets("TdB").PivotTables("TdbP").PivotFields("Date Inter")
            .ClearAllFilters
            .CurrentPage = Jour
        End With
     
        'réactivation du mouvement de l'écran
        Application.ScreenUpdating = True
     
        Exit Sub 'Pour ne pas éxectuer les instructions situées après l'étiquette
     
    errorHandler:
        Sheets("TdB").PivotTables("TdbI").PivotFields("Date Inter").ClearAllFilters
        Sheets("TdB").PivotTables("TdbP").PivotFields("Date Inter").ClearAllFilters
        MsgBox "Date non trouvée !"
     
        'réactivation du mouvement de l'écran
        Application.ScreenUpdating = True
     
    Annuler:
     
    End Sub
    J'ai aussi testé (à la ligne 37) de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .CurrentPage = Format(Jour, "m/d/yyyy")
    mais il retourne une erreur (1004).

    PS: après ce changement, pour que mes tableaux prennent en compte le filtre (première partie du Sub) j'ai du ajouter un .autofilter.applyfilter. C'est normal ?

  11. #11
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Regarde un classeur simple en pièce jointe.
    Fichiers attachés Fichiers attachés

  12. #12
    Membre averti
    Homme Profil pro
    stagiaire
    Inscrit en
    Septembre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : stagiaire
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Septembre 2011
    Messages : 26
    Par défaut
    On est parfaitement d'accord. C'est d'ailleurs ce que j'ai appliqué. Malheureusement ça plante excel ... :/

  13. #13
    Membre averti
    Homme Profil pro
    stagiaire
    Inscrit en
    Septembre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : stagiaire
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Septembre 2011
    Messages : 26
    Par défaut
    Ok, j'avoue, j'ai fait n'importe quoi sur la fin ! Une coquille, j'ai inversé m/d en d/m évidemment... Tout fonctionne, merci encore pour ton aide Daniel.C et les autres !

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

Discussions similaires

  1. pb Range: erreur 1004
    Par charlie105 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/11/2006, 17h10
  2. [VB-E] Erreur 1004 dans une boucle For
    Par lycaon dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 02/11/2006, 22h41
  3. [VBA][EXCEL]Erreur '1004' avec "Application.Run"
    Par Ania dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/01/2006, 10h50
  4. [Excel] Erreur 1004 avec un search
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/12/2005, 13h54
  5. Insérer une image : Erreur 1004
    Par dp_favresa dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 26/10/2005, 14h01

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