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 :

reactualiser automatiquement un TCD a chaque fois que les données du tableau source changent [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut reactualiser automatiquement un TCD a chaque fois que les données du tableau source changent
    Bonjour,
    Depuis ce matin , je me heurte à un problème qui m'empêche d'avancer dans mon travail.
    Je vais essayer d'etre simple

    Dans un fichier Excel, j'ai plusieurs feuilles dont:
    - la feuille ("TMJ") où j'ai un tableau de données (I2 à L481).
    - la feuille ("Nom_PPDC") où j'ai crée un TCD( "TCD_Nbr_PPDC") issu de ce tableau.
    De ce tableau TCD, je récupère des données que j'insère dans un autre tableau (par un simple copier/coller).

    Mon soucis, c'est que le tableau de donnees de la feuille "TMJ" est dynamique. Ces données changent assez frequemment au cours de la journée.
    Ce que j'essaie de faire en vain, c'est de creer un petit code evenementiel qui , a chaque fois que les données du tableau (I2 à L481) changent, mon TCD issu de ce tableau se réactualise automatiquement .

    J'ai inseré le code évenementiel ci-dessous dans la feuille "TMJ" mais rien ne se passe. :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Worksheets("TMJ").Range("I2:L481")) Is Nothing Then
    Worksheets("Nom_PPDC").PivotTables("TCD_Nbr_PPDC").RefreshTable
    End If
    End Sub
    Merci de votre aide

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    transforme ta plage des données en Tableau (Insertion / Tableau)
    Fait ton TCD sur ce tableau qui s'étendra automatiquement.
    eric

  3. #3
    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
    Citation Envoyé par eriiic Voir le message
    Bonjour,

    transforme ta plage des données en Tableau (Insertion / Tableau)
    Fait ton TCD sur ce tableau qui s'étendra automatiquement.
    eric
    Sur 2003 c'est "Créer une liste de données" (de mémoire dans le menu données)
    Si ta plage est bien déclarée en liste, même si sur 2003 tu ne peux nommer la liste, si tu crées ton TCD sur cette plage, il suivra l'ajout de lignes.

    A noter que la fin de la liste est répérable par un petit angle bleu en bas à droite de la dernière cellule.

    Edit : en te relisant, tu ne parles pas de lignes supplémentaires mais de changement de valeurs. Ton code devrait fonctionner. Comment s'effectue le changement ?

  4. #4
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut
    Bonjour à vous deux et merci de vous pencher sur mon problème

    78Chris, effectivement, mon tableau de données source n'aura jamais de ligne supplémentaire.
    Mon tableau, que l'on nommera B, aura soit des lignes en moins ou des valeurs modifiées.
    Les valeurs de mon tableau B contiennent des formules dont celle d'une recherche ( fonction Index Equiv). Cette formule "Index Equiv" recupère des valeurs d'un autre tableau Excel, que l'on nommera A ( tableau en forme de plan). Je ne peux malheureusement pas modifié ce tableau A.
    Donc, Lorsque ce tableau A est modifié, mon tableau B est lui même modifié garce aux formules. Mais le TCD issu de mon tableau B lui ne l'est pas automatiquement. je dois le réactualiser de façon manuelle (clique droit sur réactualiser).


    eriiic, Comme je l'ai dis plus haut, mon tableau n'aura jamais de ligne supplémentaire. Je souhaite simplement réactualiser mon TCD lorsque les valeurs du tableau source sont modifiées.

  5. #5
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 680
    Par défaut
    Bonjour,
    Citation Envoyé par facteur Voir le message
    Les valeurs de ce tableau contiennent des formules dont celle d'une recherche ( fonction Index Equiv). Cette formule "Index Equiv" recupère des valeurs d'un tableau Excel en forme de plan que je ne peux malheureusement pas modifié.
    Le recalcul des fonctions Excel ne déclenche pas l'évènement worksheet_change, il faudrait que tu place l'évènement sur la/les feuille(s) où pointent tes formules.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    Donc, Lorsque ce tableau A est modifié, mon tableau B est lui même modifié garce aux formules
    C'est donc le tableau A qu'il faut superviser par Change, pas le B.
    A condition que ce soit des saisies, sinon par l'événement Calculate comme dit précédemment. Ou s'il est sur une autre feuille à l'activation de celle-ci.
    eric

  7. #7
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut
    Bonjour,
    je viens de m'apercevoir que la code évènement ci dessous ne fonctionne pas avec des formules.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Worksheets("TMJ").Range("I2:L481")) Is Nothing Then
    Worksheets("Nom_PPDC").PivotTables("TCD_Nbr_PPDC").RefreshTable
    End If
    End Sub

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Voir post #6

  9. #9
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut
    Bonjour eriiic,
    Comme je le pensais et comme le dis halaster08,
    le recalcul des fonctions Excel ne déclenche pas l'évènement worksheet_change
    .
    Donc sur tes conseils eriiic, j'ai place le code suivant dans l'événement Calculate .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub calulate()
    Worksheets("TMJ").PivotTables("TCD_Nbr_PPDC").RefreshTable
    End Sub
    Ce code évènement est inséré dans la feuille TMJ ou se trouve mon tableau B.
    mais rien ne se passe...

  10. #10
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut
    Rebonsoir tout le monde,
    je ne sais pourquoi mais j'ai reprise mon code evenement Change et je l'aie épuré : j'ai supprimé les lignes 2 et 4.
    Et la tout fonctionne à merveille.
    Bien evidemment, sur vos conseils à tous les deux, j'ai inséré ce code evenement dans la feuille ("semaine") où se trouve le tableau A.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target As Range)
    Worksheets("Nom_PPDC").PivotTables("TCD_Nbr_PPDC").RefreshTable
    End Sub
    .

    merci encore à eriiic et halaster08 pour les subtilités des codes evenements
    je ferme cette discussion

  11. #11
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bizarre que tu n'arrives pas à contrôler la plage modifiée.
    Si tu n'as que ça sur cette feuille ça peut passer.
    Mais si tu as d'autres choses à y faire c'est peut-être lourd de rafraichir le TCD à chaque saisie.
    eric

  12. #12
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut
    Bonjour eriiic,
    j'ai parlé trop vite
    la procédure évènement Private Sub Worksheet_Change(ByVal Target As Range) empêche mes macro de s'éxecuter.
    Pour pallier à cela, j'essaie de trouver le moyen de lancer mes macros et ensuite le code évenement Private Sub Worksheet_Change(ByVal Target As Range).
    mais je bloque

  13. #13
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut
    J'ai trouvé le moyen de bloquer la procédure évènement Private Sub Worksheet_Change(ByVal Target As Range) pendan l'éxécution de ma amcro :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Application.EnableEvents = False
    'lancer ma macro
    Application.EnableEvents = true
    call RetablitEvents
    la procédure RetablitEvents permet de réactiver la gestion
    événementielle dans le cas ou celle-ci ne s'activerait pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub RetablitEvents
    Application.EnableEvents = True
    End Sub

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

Discussions similaires

  1. SCD Transformation charge chaque fois toutes les données
    Par nessim dans le forum Alimentation
    Réponses: 0
    Dernier message: 05/01/2010, 16h40
  2. Réponses: 5
    Dernier message: 14/11/2007, 08h03
  3. decrementer selection chaque fois que macro est appelée
    Par joeyd dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 28/09/2007, 18h05
  4. Réponses: 10
    Dernier message: 02/10/2006, 13h36
  5. Réponses: 10
    Dernier message: 17/05/2006, 19h55

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