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 :

MAJ TCD selon une sélection de cellule ( boucle while) en VBA [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Femme Profil pro
    Supply chain Manager
    Inscrit en
    Août 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Supply chain Manager
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2017
    Messages : 5
    Par défaut MAJ TCD selon une sélection de cellule ( boucle while) en VBA
    Bonjour à tous,

    Malgré les vacances de la plupart je sollicite votre aide pour un projet sur lequel je travaille actuellement.

    J'aimerai mettre à jour un TCD selon une suite de valeur disposées dans une feuille, pour qu'à chacune des valeur j'imprime en PDF une version du TCD.
    J'ai trouvé le code nécessaire pour l'impression en PDF, mais je n'arrive pas à trouver celui pour MAJ le TCD.
    Voilà ce que j'ai commencé à rédiger, même si je ne suis pas sûr de son orthodoxie (par contre ce dont je suis sûr c'est que ce n'a marche pas ! )

    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
    Sub boucle_do_while()
     
    Dim numero As Integer
    Dim i As Integer
    Dim Nb_Orders As Double
     
       With Sheets("Others")
       'Others est la feuille sur laquelle se trouve les données par lesquelles je voudrais filtrer mon TCD
            Nb_Orders = Application.WorksheetFunction.CountA(.Range("$B:$B")) - 1
            ' Me permet de savoir combien de valeur existe sur cette feuille (et donc combien de valeurs sont à filtrer)
        i = 4
        Do While i <= Nb_Orders
        ActiveSheet.PivotTables("TCD_1").PivotFields("order-no").ClearAllFilters
        ActiveSheet.PivotTables("TCD_1").PivotFields("Order Number").CurrentPage = _
            "Cell(2,i)"
        i = i + 1
        Loop
     
        End With
     
    End Sub
    Merci pour votre aide et vos conseils !

  2. #2
    Expert éminent

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

    Met ton code entre balises de code (bouton #)

    "Cell(2,i)" ne peut pas marcher

    Je suppose que ton premier N° erst en ligne 4 colonne 2 de la feuille Others

    devrait correspondre

    CurrentPage ne s'applique qu'aux champs de page en mono sélection : est-ce le cas ?

    Néanmoins il faut vérifier que les valeurs de la feuille Others existent bien dans le TCD

    Une autre solution est de dérouler tous les cas du TCD si l'ensemble est sensé figurer dans Others...

  3. #3
    Membre à l'essai
    Femme Profil pro
    Supply chain Manager
    Inscrit en
    Août 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Supply chain Manager
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2017
    Messages : 5
    Par défaut Qu'entends-tu par "champs de page en mono sélection" ?
    Hello Chris,

    Merci pour ta réponse.
    J'ai modifié la dénomination de la cellule par ta proposition.
    Par contre, je t'avoue ne pas avoir compris ta question par rapport au "champs de page en mono sélection".

    Pour que les choses soient plus simple, je te joins mon ébauche de fichier.

    Merci pour ton aide!


    Citation Envoyé par 78chris Voir le message
    Bonjour

    Met ton code entre balises de code (bouton #)

    "Cell(2,i)" ne peut pas marcher

    Je suppose que ton premier N° erst en ligne 4 colonne 2 de la feuille Others

    devrait correspondre

    CurrentPage ne s'applique qu'aux champs de page en mono sélection : est-ce le cas ?

    Néanmoins il faut vérifier que les valeurs de la feuille Others existent bien dans le TCD

    Une autre solution est de dérouler tous les cas du TCD si l'ensemble est sensé figurer dans Others...
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent

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

    Tu n'es pas très attentif :
    • j'ai écrit .Cells(i, 2).Value pas "Cells(i, 2).Value"
    • j'ai indiqué "Je suppose que ton premier N° est en ligne 4 colonne 2 de la feuille Others" : comme elle est sur la ligne 5 tu aurait du rectifier...


    En colonne B tu as une valeur + 1 titre : il faut donc soustraire 2 lignes et non 1 pour avoir le nombre de N° et si tu utilises i pour lire la colonne B il faut ajouter 4 au nombre de N° puisqu'on parcours à partir de 5

    Plutôt qu'un boucle While + un compteur pour i j'ai mis un For i.

    Reste à appeler ton code d'impression dans la boucle

    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
    Sub boucle_do_while()
     
    Dim numero As Integer
    Dim i As Integer
    Dim Nb_Orders As Double
     
       With Sheets("Others")
    '   Others est la feuille sur laquelle se trouve les données par lesquelles je voudrais filtrer mon TCD
            Nb_Orders = Application.WorksheetFunction.CountA(.Range("$B:$B")) - 2
    '         Me permet de savoir combien de valeur existe sur cette feuille (et donc combien de valeurs sont à filtrer)
        For i = 5 To Nb_Orders + 4
            ActiveSheet.PivotTables("TCD_1").PivotFields("order Number").ClearAllFilters
            ActiveSheet.PivotTables("TCD_1").PivotFields("Order Number").CurrentPage = _
                .Cells(i, 2).Value
        Next
        End With
     
    End Sub

  5. #5
    Membre à l'essai
    Femme Profil pro
    Supply chain Manager
    Inscrit en
    Août 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Supply chain Manager
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2017
    Messages : 5
    Par défaut
    Hello Chris,

    Merci pour ton retour, en effet je n'ai pas été très attentif.

    J'ai essayé ton code mais j'ai une erreur quand je lis le code: "Erreur d'execution 1004: Impossible de lire la propriété PivotTables de la classe Worksheet"et la ligne 13 est surlignée.

    Le TCD étant sur la feuille "Preview_Print", j'ai cru qu'en la re-sélectionnant ça allait solutionner la chose mais ce n'est pas le cas...
    As-tu une idée de ce qui peut bloquer ?

    Et merci encore pour ton aide.

  6. #6
    Expert éminent

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

    De façon générale il est plus fiable de nommer la feuille que d'utiliser activesheet.

    Le code testé sur ton exemple fonctionne sans erreur... en partant de la feuille contenant le TCD...

    Es-tu sûr de ne pas avoir oublié le .

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

Discussions similaires

  1. [XL-2010] Macro filtres successifs d'un TCD selon une plage de cellules, +copy-paste
    Par Faust13 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/08/2017, 20h42
  2. selectionner une plage selon une address de cellule
    Par charlou74 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/12/2009, 11h31
  3. Réponses: 2
    Dernier message: 21/11/2008, 14h02
  4. Réponses: 11
    Dernier message: 10/04/2007, 07h02
  5. Réponses: 5
    Dernier message: 15/08/2006, 16h51

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