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 :

Sélection automatique d'une valeur dans un TCD et impression


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Sélection automatique d'une valeur dans un TCD et impression
    Bonjour,

    j'ai une feuille contenant une liste de noms.
    J'ai une autre feuille avec un tableau croisé dynamique

    Je voudrais créer une macro qui sélectionne le premier nom de cette liste dans un champ de page d'un tableau croisé dynamique et qui imprime ce tableau. Ensuite
    Sélectionne le deuxième nom sur ma liste, imprime le TCD
    Sélectionne le 3ème nom sur la liste, imprime le TCD

    Et ainsi de suite jusqu'au dernier nom.

    En vous remerciant énormément,

    Phil

  2. #2
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Points : 547
    Points
    547
    Par défaut
    Salut,

    Un petit exemple .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Option Explicit
     
    Sub ImpressionTCD()
        Dim Cpt As Integer
     
        For Cpt = 2 To Feuil1.Range("A65536").End(xlUp).Row
            Feuil2.PivotTables("Tableau croisé dynamique").PivotFields("Nom").CurrentPage = Feuil1.Range("A" & Cpt).Value
            Feuil2.PrintOut 'Preview:=True
        Next
    End Sub
    Avec :
    Feuil1 colonne A -> la liste de noms
    Feuil2 -> ton TCD avec en champ de page le champ 'NOM'

    ++
    Minick

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut ne pas sélectionner les cellules vides
    Merci Minik! ça fonctionne!

    Toutefois, certaines cellules de ma liste sont vides et elles sont considérées dans le choix des valeurs à mettre au tcd. Pour éviter celà, je voudrais mettre une condition pour ne pas qu'elles le soient.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if range("a65536") =""  then passe à l'autre cellule contenant une valeur
     
    else
     
        Dim Cpt As Integer
     
        For Cpt = 2 To Feuil1.Range("A65536").End(xlUp).Row
            Feuil2.PivotTables("Tableau croisé dynamique").PivotFields("Nom").CurrentPage = Feuil1.Range("A" & Cpt).Value
            Feuil2.PrintOut 'Preview:=True
        Next
    End Sub
    Aussi, y a t'il moyen d'utiliser un nom prédéfini comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    range.[feuil1_nom de_ma_liste]
    En espérant être assez clair, merci de ton aide

    Phil

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Points : 547
    Points
    547
    Par défaut
    Salut,

    La boucle ne va pas jusqu'a la ligne 65536, elle s'arrete a la derniere ligne de la liste de noms.

    Oui on peut utiliser une plage definit avec Insertion/Nom/Definir
    et on peut aussi tester si la valeur est vide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Option Explicit
     
    Sub ImpressionTCD()
        Dim Cellule As Range
     
        For Each Cellule In Feuil1.Range("NomDeLaPlage")
            If Cellule.Value <> "" Then
                Feuil2.PivotTables("Tableau croisé dynamique").PivotFields("Nom").CurrentPage = Cellule.Value
                Feuil2.PrintOut 'Preview:=True
            End If
        Next
    End Sub

    ++
    Minick

    PS : Pense aux balises code quand tu mets du code...

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut ajouter msgbox
    Fantastique! merci!

    Maintenant, si je peux me permettre une dernière question!

    si un nom de ma liste n'est pas présent dans les choix du pivotfield, je voudrais ouvrir une msgbox qui indique qu'aucune données n'a été entrée concernant ce nom et le désélectionner de ma liste. (ma liste est créée avec des cases à cocher)

    Présentement, c'est une msgbox de vba qui s'ouvre ERREUR 1004, impossible de définir la propriété. C'est un peu agressant...

    Phil2

  6. #6
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Points : 547
    Points
    547
    Par défaut
    Salut,

    A adapter a tes cases a cocher.

    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
    Option Explicit
     
    Sub ImpressionTCD()
        Dim Cellule As Range
        Dim Cpt As Integer
        Dim Existe As Boolean
     
        For Each Cellule In Feuil1.Range("NomDeLaPlage")
            Existe = False
            If Cellule.Value <> "" Then
                With Feuil2
                    With .PivotTables("Tableau croisé dynamique1").PivotFields("Nom")
                        For Cpt = 1 To .PivotItems.Count
                            If LCase(.PivotItems(Cpt)) = LCase(Cellule.Value) Then
                                Existe = True
                                .CurrentPage = Cellule.Value
                                Exit For
                            End If
                        Next
                    End With
     
                    If Existe Then
                        .PrintOut 'Preview:=True
                    Else
                        MsgBox "Pas de données pour " & Cellule.Value & " dans le rapport."
                    End If
                End With
            End If
        Next
    End Sub
    ++
    Minick

Discussions similaires

  1. [AC-2000] Sélection automatique d'une ligne dans une liste
    Par papymichel dans le forum IHM
    Réponses: 7
    Dernier message: 01/01/2011, 20h26
  2. Réponses: 13
    Dernier message: 11/12/2009, 11h13
  3. Réponses: 4
    Dernier message: 07/01/2009, 15h25
  4. Réponses: 7
    Dernier message: 30/07/2008, 19h51
  5. Réponses: 29
    Dernier message: 15/05/2006, 16h15

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