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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Avril 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2014
    Messages : 14
    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

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 555
    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 555
    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é ?

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

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

    Informations forums :
    Inscription : Avril 2014
    Messages : 14
    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

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 555
    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 555
    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

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

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

    Informations forums :
    Inscription : Avril 2014
    Messages : 14
    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

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 555
    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 555
    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...

+ 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