Macro vba
RésoluLe Pingou Messages postés 12720 Date d'inscription Statut Contributeur Dernière intervention -
Merci par avance
- Macro vba
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Jitbit macro recorder - Télécharger - Confidentialité
- Excel compter cellule couleur sans vba - Guide
- Dépassement de capacité vba ✓ - Forum Excel
41 réponses
Le problème concerne l’automatisation de la mise à jour d’un tableau croisé dynamique dès que la base de données est actualisée, via une macro.
Les solutions évoquées privilégient une source de données dynamique par plage nommée, réalisée avec OFFSET (DECALER) et NBVAL, pour que le TCD s’étende automatiquement avec les nouvelles lignes.
Des difficultés techniques apparaissent, notamment une erreur d’exécution 1004 liée à la définition de la plage et à l’adresse renvoyée, et des questions sur l’unicité des noms de champs et l’emplacement de la source (feuille Base).
Les échanges insistent sur l’importance de définir une plage dynamique fiable et de vérifier les conditions d’extension, en particulier les noms de champs uniques et le découpage correct de la source.
Avec un exemple qui reflète la situation exact (par exemple une copie de votre classeur si confidentiel vous pouvez poster le lien sur un MP), pour avoir la structure exacte de la base de données (y compris son évolution... !) et une explication du résultat à obtenir avec le TCD (je pense que c'est déjà en partie correcte..).
Pas de problème pour " mettre un exemple qui reflète la situation exact (par exemple une copie de votre classeur si confidentiel vous pouvez poster le lien sur un MP), pour avoir la structure exacte de la base de données (y compris son évolution... !) et une explication du résultat à obtenir avec le TCD" dès reception de votre réponse quant à la messagerie privé.
Merci d'avance pour votre réponse
Concernant le problème de la version 2003, Veuillez essayer cette version avec une modification dans le code.
Le fichier proposé : https://www.cjoint.com/?3AgxZdLJaja
Je suis vivement intéressé de savoir si cela fonctionne avec la version 2003, surtout pour d'éventuel cas similaire.
Merci.
Merci d'avance pour la réponse
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionSelon votre classeur, la feuille [Base] qui sert de source de données pour le TCD n'est pas utilisable tel quelle.
Raison : les titres des colonnes [H :M] sont en double avec [X :AC], la source de données doit avoir des noms de champs unique.
En plus il y a des colonnes [R :W] ... que faire... !
D'accord pour les colonnes inutiles [X :AC] à supprimer.
Ces colonnes [R :W] ne semblent avoir aucun lien avec le reste du tableau ou alors vous avez une explication ... ?
Proposition à essayer.
Pour commencer vous cliquez directement sur [Mise à jour du TCD] pour voir ce qui se passe !
Ensuite vous poursuivrez avec l'ajout de données selon la petite note en fin de plage.
Si tout marche bien, si nécessaire, il est possible de mettre en forme les colonnes ajoutées dans le TCD.
Le fichier pour test : https://www.cjoint.com/?3AixbldkthB
Merci d'avance pour votre réponse.
Je pense que vous avez oublié de réaliser ce que j'avais indiqué une première fois pour le même problème :
Note : contrôler l'exactitude du nom de la feuille (Base)... !
Vous corrigez celui de la feuille, pas celui du code .... pas d'espace après le [e]...
Salutations.
Le Pingou
MERCI pour votre réponse
Vous corrigez celui de la feuille, pas celui du code .... pas d'espace après le [e]...
Merci pour votre réponse
Eh bien vous avez toujours parlé d'ajouter des données.
C'est vraiment dommage de le dire maintenant, car cela pouvait se faire directement au début.
Concernant le deuxième problème, si vous modifiez des données déjà existantes, le TCD se met à jour automatiquement, rien d'autre à faire.
J'y pense, vous n'avez rien mentionné par rapport au nombre de ligne de la base de données, fixé sur 77, c'est étonnant... ?
Salutations.
Le Pingou
"Eh bien vous avez toujours parlé d'ajouter des données.
C'est vraiment dommage de le dire maintenant, car cela pouvait se faire directement au début". Je suis vraiment désolé c'est vrai que j'ai dû mal à être claire dans mes explications. Et du coup est-ce trop tard? merci pour votre réponse.
" Concernant le deuxième problème, si vous modifiez des données déjà existantes, le TCD se met à jour automatiquement, rien d'autre à faire."justement non certes le TCD se met à jour automatiquement mais lorsque je modifie une donnée (que j'avais saisi juste avant) par exemple sur laquelle j'ai fait une erreur sur la base, et j'actualise à nouveau mon TCD, mon TCD ne prend pas compte mes dernières modifications il reste figé.
"J'y pense, vous n'avez rien mentionné par rapport au nombre de ligne de la base de données, fixé sur 77, c'est étonnant... ? ". C'est normal car pour le moment le nombre de ligne de la base est 77 et je n'ai pas encore rajouté des lignes.Mais si le nombre de lignes devient par exemple 90 qu'elle seraient les modifications à faire sur la macro?
Si vous le permettez je pense que vous devriez aussi consulter l'aide pour comprendre le fonctionnement d'un TCD.
Petit rappel selon ce que j'ai compris, si vous modifier des données et/ ou ajouter des lignes à votre base de données, le tableau croisée dynamique se m'est à jour automatiquement (c'est une des propriétés du TCD) .
Par contre lorsque vous ajoutez une ou plus de colonne y compris leurs données, vous devez modifier la source de données du TCD et en plus ajouter les champs concernés dans la zone des valeurs.
Vous avez 2 possibilités de le réaliser :
La première manuellement, le plus simple.
La deuxième plus complexe en passant par une procédure VBA et c'est ce que j'ai réalisé.
Normalement vous avez la possibilité de modifier ma procédure pour tenir compte d'une suppression de colonne.
La dernière mouture selon ce que j'ai compris.
Dans le but de prendre en compte une variation du nombre de lignes (en plus ou moins) utiliser le TCD avec une plage nommée dynamique, par exemple :
voir extrait d'image feuille [Base].
Ensuite attribuer le nom de la plage comme source de données de votre TCD :
voir extrait d'image feuille [Recap].
Concernant la variation du nombre de colonnes (en plus ou en moins [minimum 9]), elle est gérée par une procédure activer par le bouton de commande [Mise à jour du TCD].
La proposition : https://www.cjoint.com/?3Aki3ZEp4NP
désolé je n'ai pas pu me connecter ces derniers temps.Merci pour votre réponse.
En suivant votre exemple, j'ai fait tourner la macro, et un message d'erreur d'exécution "1004" apparait, je fais débogage pour voir ma source d'erreur, une des ligne de la procédure apparait en jaune "la methode "range de l'objet'_Global a échoué"....
Merci d'avance pour votre réponse.
Merci de préciser sur quel classeur le problème survient ?
Je pense sérieusement que la question est trop simple
Sur quel classseur .... le votre ou le mien ....
Ä vous lire j'en déduis que c'est sur votre classeur... !
Ma question : est-ce que cela fonctionne avec le mien... !
Dans la procédure, vous insérez après cette ligne :
Set montcd = Sheets("Recap").PivotTables(1)
la ligne qui suit :
MsgBox "Nom de la plage: " & montcd.SourceData
Lancer la procédure et vous me communiquez le message qui apparaitra .... !
je fais ce que vous m'avez dit et une fenêtre apparaît nom de plage : Base!L4C2:L77C13 je tape sur ok et après j'ai le message erreur d'exécution 1004 la méthode "range" de l'objet _ Global a échoué. Je tape sur débogage pour voir où se trouve l'erreur et la ligne suivante: adrsd = Range(nomsd).Address(ReferenceStyle:=xlR1C1) apparait en jaune.
Merci pour votre aide.
Alors c'est bien clair, vous n'avez pas reproduit sur votre classeur ce que je vous ai mentionnée dans le poste 68.
Pourquoi.... Nul ne le sait ...
merci pour votre réponse mais pour créer une source de données dynamique pour mon tcd il faut bien que j'aille dans formule, définir un nom, dans l'onglet nom je mets bien tblsdtcd, dans zone je laisse classeur et dans fait référence à je tape la plage suivante =DECALER(Base!$B$4;;;NBVAL(Base!$B:$B);12) puis je clique sur ok. Est ce bien cela? Merci pour votre réponse.
pouvez vous svp m'envoyez en document word 97 2003 la dernière version de la macro cf poste 68 car je ne la retrouve pas sur mon pc! merci pour votre réponse car je rencontre toujours des problèmes avec mon classeur et je ne peux ouvrir que des documents en version 2003 sur le pc auquel j'ai accès maintenant. Merci pour votre réponse.
Désolé, j'ai interverti 2 dossiers, voici celui qui vous concerne : https://www.cjoint.com/?3AsoolyWVJz
C'est vraiment dur la vie, c'est pourtant mentionné dans le message 68, à savoir :
Dans le but de prendre en compte une variation du nombre de lignes (en plus ou moins) utiliser le TCD avec une plage nommée dynamique, par exemple :
voir extrait d'image feuille [Base]. --- Nommée la plage et fait référence à comme le montre l'extrait
Ensuite attribuer le nom de la plage comme source de données de votre TCD :
voir extrait d'image feuille [Recap]. ------ Le nom de cette plage doit être introduit comme La source de données pour le TCD comme le montre l'extrait
Est-ce clair...
Lors du dernier contrôle que je vous ai demandé avec la [MsgBox "Nom de la plage: " & montcd.SourceData] et suite au résultat que vous aviez donnée [une fenêtre apparaît nom de plage : Base!L4C2:L77C13], je pense que vous n'avez pas modifié la source de données pour le TCD sur la feuille [Recap]
merci pour votre aide j'ai pu modifier la source de données pour le TCD sur la feuille [Recap] après de nombreuses tentative et ça fonctionne parfaitement et je vous en suis très reconnaissante. Merci beaucoup!!!
Sinon j'aurai une autre question en ce qui concerne votre questionnement...
"J'y pense, vous n'avez rien mentionné par rapport au nombre de ligne de la base de données, fixé sur 77, c'est étonnant... ? " par exemple si je décide de changer le nombre de ligne de la base de données c'est à dire fixé à 125 au lieu de 77 ou encore 100 au lieu de 77, quelles modifications dois-je faire??? SVP sur ma macro pour qu'elle tienne compte du changement du nombre de ligne de mon classeur base??? Désolé de vous déranger à nouveaux et merci d'avance pour votre réponse.