Optimiser code VBA "Actualiser un TCD"

Amilo

XLDnaute Accro
Bonjour le forum,

J'ai dans un fichier ci-joint, un simple formulaire de saisie en A1:B1 et un TCD que j'actualise avec un bouton,

La plage du TCD est définie à l'aide d'une formule dynamique avec =décaler(),

Lorsque au moins une ligne de valeurs est saisie dans le formulaire, le code VBA rattaché au bouton pour actualiser mon TCD fonctionne sans problème,

mais si je clique par inadvertance sur le bouton sans qu'il y ait aucune ligne de saisie, j'ai un message d'erreur Visual Basic :"Erreur d'éxéxution '1004':"

Comment contourner ce problème en indiquant dans le code ci-dessous de ne pas actualiser s'il n'y a aucune donnée de saisie...??

======

Sub Actualiser_TCD()
'
' Actualiser_TCD Macro
Range("F3").Select
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotCache.Refresh
End Sub

=======

Merci d'avance

Cordialement
 

Pièces jointes

  • Actualiser TCD en VBA.xlsm
    22.5 KB · Affichages: 148
  • Actualiser TCD en VBA.xlsm
    22.5 KB · Affichages: 163
  • Actualiser TCD en VBA.xlsm
    22.5 KB · Affichages: 152
Dernière édition:

chris

XLDnaute Barbatruc
Re : Optimiser code VBA "Actualiser un TCD"

Bonjour

Depuis la version 2003 et surtout 2007 et 2010, on a tout intérêt à déclarer sa source en liste (2003) ou tableau (2007-2010).
Ainsi le changement de taille est automatiquement géré et plus besoin pour les TCD de fonction DECALER.
(pour plus de détails sur cette nouvelle fonctionnalité incontournable tu peux regarder là Ce lien n'existe plus ou là Les tableaux dans Excel 2007)

Pour ton code ajoute un test
Code:
If Range("Source_TCD").Rows.Count > 1 then
avant ton actualisation.
 

Amilo

XLDnaute Accro
Re : Optimiser code VBA "Actualiser un TCD"

Bonjour camarchepas, Chris,

camarchepas, effectivement il ne se passe rien d'anormal et il n'y a pas de message d'erreur lorsqu'il y a des valeurs de saisies dans le tableau comme c'est le cas dans mon exemple,

Le problème apparait après suppression de toutes les données du tableau (sauf les titres de colonnes) et le clic sur le bouton,

Chris, merci pour votre aide, ça résoud trés bien mon problème,

P.S : j'allais oublié, et merci Chris pour le lien concernant la source du TCD, je vais lire attentivement tout ça, je vais voir s'il est applicable à mon fichier....!!!

Cordialement
 
Dernière édition:

Amilo

XLDnaute Accro
Re : Optimiser code VBA "Actualiser un TCD"

Re,

Chris, je viens de terminer la lecture de ton lien concernant les tableaux,

c'est une altenative intéréssante pour définir automatiquement un tableau comme source dynamique d'un TCD,

Mais comme je le craignais, je ne peux pas l'appliquer à mon cas,

Cette option "Mettre sous forme de tableau" est idéale pour un tableau ou une plage comportant déjà au moins 2 lignes (dont les titres de colonnes) et qui va dans le sens où on rajoute de nouveaux enregistrements avec la touche "Tab" en fin de lignes.

Dans mon cas, il y aura toujours suppression de toutes les données sauf les en-têtes de colonnes avant de commencer une nouvelle plage et par ailleurs, j'ai dans mon fichier réel à l'intérieur du formulaire, une colonne avec des données fixes qui sont pré-remplies,

Si je souhaite rajouter un nouvel enregistrement avec la touche "Tab", ça m'écrase cette valeur pré-remplie.

En tout cas, c'était un lien intéréssant et c'est bon à savoir,

Cordialement
 

Amilo

XLDnaute Accro
Re : Optimiser code VBA "Actualiser un TCD"

camarchepas,

Voilà le nouveau fichier sans les données pour que vous puissiez tester le message d'erreur,

Mais vous me direz, il suffit de ne pas cliquer sur le bouton en cas de tableau vide...mais le code pour l'actualisation du TCD se trouve au milieu d'un autre code "Afficher/Masquer" des lignes et qui est éxécuté en parallèle par le même bouton.

J'espère avoir répondu à votre question

Cordialement
 

Pièces jointes

  • Actualiser TCD en VBA.xlsm
    22.5 KB · Affichages: 161
  • Actualiser TCD en VBA.xlsm
    22.5 KB · Affichages: 172
  • Actualiser TCD en VBA.xlsm
    22.5 KB · Affichages: 174

camarchepas

XLDnaute Barbatruc
Re : Optimiser code VBA "Actualiser un TCD"

Amilo,

Ok , le test pourra surement fonctionner placé au début de Actualiser_TCD mais , lorsque les données sont vides
Par contre, conserve t-on le résultat précédent pour le TCD , ou faut-il le rendre vide ? ou faire autre chose?
 

Amilo

XLDnaute Accro
Re : Optimiser code VBA "Actualiser un TCD"

camarchepas,

je suppose que vous voulez parler du test ou de la solution à chris que vous suggérez de mettre en début du code,

Dans ce cas, ce test fonctionne trés bien,

Sinon, vous avez raison de souligner que le TCD va conserver les valeurs précédentes,
cela me dérange moins puisque le formulaire vide ne sera pas imprimé à ce moment là,
Seul un formulaire avec des données est imprimé avec le TCD,

Cordialement
 

Discussions similaires

Statistiques des forums

Discussions
312 291
Messages
2 086 851
Membres
103 400
dernier inscrit
MINOU WILL