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 :

Filtre et tri sur Excel via vba [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Avril 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Avril 2014
    Messages : 14
    Points : 10
    Points
    10
    Par défaut Filtre et tri sur Excel via vba
    Bonjour,


    J'obtiens l'erreur 1004 sur le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sheets("c1").PivotTables("Tcd arret c1").PivotFields("Libelle"). _ 
    AutoSort xlDescending, "Somme de Perte fiab", ActiveSheet.PivotTables( _ 
    "Tcd arret c1").PivotColumnAxis.PivotLines(1), 1
    Si je commente cette ligne, j'ai la même erreur sur la ligne de code suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sheets("c1").PivotTables("Tcd arret c1").PivotFields("Libelle"). _ 
    PivotFilters.Add Type:=xlTopCount, DataField:=ActiveSheet.PivotTables( _ 
    "Tcd arret c1").PivotFields("Somme de Perte fiab"), Value1:=10
    Ces 2 bouts de code proviennent de l'enregistreur de macros.

    Ma première instruction sert a trier la colonne "Somme de perte fiab" dans l'ordre décroissant.
    La seconde sert à afficher seulement les 10 premieres lignes du tableau.

    Le nom de ma feuille et le nom du tableau sont corrects.

    Avez vous déjà rencontrés ce problème ? Ou connaissez vous des autres solutions pour effectuer des tris sur un tcd et afficher seulement les 10 premières valeurs ?

    Merci d'avance pour tous vos contributions

  2. #2
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 468
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 468
    Points : 16 348
    Points
    16 348
    Par défaut
    Bonjour

    Ce type de code fonctionne chez moi il faudrait voir de plus près : 1004 est souvent lié à un élément absent, feuille, TCD, champ : n'as tu rien renommé ?
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Avril 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Avril 2014
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Salut,
    Dans mon code, ce n'est pas tout à fait pareil.
    J'utilise plusieurs tableaux (1 par machine), leur noms ont tous la même forme "tcd arret " & nom_machine (C1,C2...). Il y a une feuille par machine et dans chaque feuille 1 tcd.
    J'ai stocké le nom des machines dans un tableau.
    Puis j'utilise une boucle pour répéter les mêmes modifications sur chaque tableau croisé dynamique.
    Voilà en gros mon code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    do 
    'tri dans ordre decroissant
    Sheets(machine(i)).PivotTables("Tcd arret " & machine(i)).PivotFields("Libelle"). _ 
    AutoSort xlDescending, "Somme de Perte fiab", ActiveSheet.PivotTables( _ 
    "Tcd arret " & machine(i)).PivotColumnAxis.PivotLines(1), [COLOR=#cc66cc]1
    
    'Affichage des 10 premières valeurs du tableau
    Sheets(machine(i)).PivotTables("tcd arret " & machine(i)).PivotFields("Libelle"). _
    PivotFilters.Add Type:=xlTopCount, DataField:=ActiveSheet.PivotTables( _
    "Tcd arret " & machine(i)).PivotFields("Somme de Perte fiab"), Value1:=10
    i=i + 1
    loop until i =19
    J'ai vérifié plusieurs fois que les noms de feuilles, de tableaux et colonnes sont les bons.
    L'erreur n'est donc pas liée à un problème de nommage.

    Ps : Mes tableaux croisés dynamiques ont toujours la même plage de données.
    A chaque ouverture du fichier, les données sont rapatriées depuis Access.
    Les tableaux croisés sont donc rafraichis à chaque ouverture du fichier.
    Merci d'avance de t'être pencher sur mon problème

  4. #4
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 468
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 468
    Points : 16 348
    Points
    16 348
    Par défaut
    Re


    D'un côté Sheets(machine(i)) de l'autre Activesheet : est-ce bien la même sheet ?

    Un With Sheets(machine(i)) sera bienvenu pur éviter cela
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Avril 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Avril 2014
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Oui en effet, cela peut prêter à confusion...

    J'ai essayé en remplaçant "activesheet" par "sheets(machine(i))" mais j'ai toujours le même problème;

    J'ai aussi essayé en rajoutant au début de boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(machine(i)).activate
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(machine(i)).select
    .

    Comment va être implémenté le code avec un With ?

  6. #6
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 468
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 468
    Points : 16 348
    Points
    16 348
    Par défaut
    Re

    Le code est-il bien stocké dans un module standard ?

    Edit : ce bout de ligne me parait curieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    , ActiveSheet.PivotTables( _ 
    "Tcd arret " & machine(i)).PivotColumnAxis.PivotLines(1), [COLOR=#cc66cc]1
    Edit 2 : machine(i) renvoie bien le bon nom de feuille ? vérifie si chaque concaténation donne bien le nom attendu...
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Avril 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Avril 2014
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Il est exécuter à l'activation de la 1er feuille de mon fichier la ou je vais faire mes rapports.

    [COLOR=#cc66cc] n'est pas issu du code de mon fichier, il est apparu quand j'ai mis des balises "code" dans mes messages.

    J'ai vérifié les concaténations donnent bien le bon nom de feuille pour chaque machine.

  8. #8
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 468
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 468
    Points : 16 348
    Points
    16 348
    Par défaut
    Bonjour

    Citation Envoyé par benol3 Voir le message
    Il est exécuter à l'activation de la 1er feuille de mon fichier la ou je vais faire mes rapports.
    Oui mais le code doit être dans un module standard même s'il est appelé par le module de feuille.
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Avril 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Avril 2014
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    Pourquoi faut il que le code soit dans un module et non dans une feuille ?

    J'ai réussi à résoudre mes problèmes. Les lignes de codes étaient bonnes.

    L'application plantait seulement lorsque le tcd n'avait pas de données. J'ai donc rajouté un test pour vérifier qu'il y a bien des données dans mon tableau avant d'éxécuter les lignes de code filtrant les données.

    Merci beaucoup Chris d'avoir pris de ton temps pour m'aider à résoudre ce problème

    @+

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

Discussions similaires

  1. [XL-2003] extraction d'un fichier BO sur excel via vba
    Par baptoo61 dans le forum Excel
    Réponses: 4
    Dernier message: 23/05/2014, 18h12
  2. insertion cotation CAC 40 sur excel via VBA
    Par stiffon dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/02/2012, 13h27
  3. connexion a un site internet sur IE via VBA excel
    Par deubelte dans le forum Windows XP
    Réponses: 3
    Dernier message: 16/07/2008, 12h16
  4. Accés au donnés sur Excel via Code vba Access
    Par sakia dans le forum VBA Access
    Réponses: 1
    Dernier message: 24/11/2007, 16h46
  5. Mise en page Excel via VBA Access
    Par popo68 dans le forum VBA Access
    Réponses: 3
    Dernier message: 06/11/2006, 17h03

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