Workbook_open
Bonjour,
Débutant en VBA, j'aimerais pouvoir activer plusieurs événements lors de l'ouverture de mon classeur.
Le premier étant les couleurs de mes feuilles , ce code ne me pose pas de problème :
Private Sub Workbook_Open()
'Couleurs Feuilles
Sheets(1).Tab.Color = RGB(192, 128, 96)
Sheets(2).Tab.Color = RGB(224, 224, 96)
Sheets(3).Tab.Color = RGB(0, 192, 32)
Sheets(4).Tab.Color = RGB(192, 224, 160)
Sheets(5).Tab.Color = RGB(96, 96, 96)
Sheets(6).Tab.Color = RGB(96, 0, 128)
Sheets(7).Tab.Color = RGB(192, 160, 192)
Sheets(8).Tab.Color = RGB(255, 0, 0)
Sheets(9).Tab.Color = RGB(128, 224, 224)
Sheets(10).Tab.Color = RGB(196, 105, 143)
Sheets(11).Tab.Color = RGB(153, 81, 43)
End SubSeulement quand je rajoute le msgbox, vb editor m'informe d'un problème. Voici le code :
Private Sub Workbook_Open()
'Couleurs Feuilles
Sheets(1).Tab.Color = RGB(192, 128, 96)
Sheets(2).Tab.Color = RGB(224, 224, 96)
Sheets(3).Tab.Color = RGB(0, 192, 32)
Sheets(4).Tab.Color = RGB(192, 224, 160)
Sheets(5).Tab.Color = RGB(96, 96, 96)
Sheets(6).Tab.Color = RGB(96, 0, 128)
Sheets(7).Tab.Color = RGB(192, 160, 192)
Sheets(8).Tab.Color = RGB(255, 0, 0)
Sheets(9).Tab.Color = RGB(128, 224, 224)
Sheets(10).Tab.Color = RGB(196, 105, 143)
Sheets(11).Tab.Color = RGB(153, 81, 43)
'Msg ouverture classeur
MsgBox("Bonjour", vbInformation, "Information") = vbOK
End SubEst-ce donc possible ou est-ce ma syntaxe qui n'est pas bonne ?
De plus j'aimerais que mes TCD s'actualise automatiquement, où est ce que je dois écrire le code pour qu'il soit pris en compte ?
Merci d'avance.
Salut et bienvenue sur le Forum,
Dans le fichier ci-joint, je te montre un MsgBox qui fonctionne bien à l'ouverture du fichier.
Toi, avec ton MsgBox, que désires-tu réaliser ?
Cordialement.
Bonjour et merci de votre réponse,
Ce msgbox me permet juste d'annoncer que les TCD s'actualisent désormais automatiquement,
en utilisant cette syntaxe, ça fonctionne :
MsgBox "Les tableaux croisés dynamiques s'actualisent automatiquement"Et non cette syntaxe (qui me renvoie une erreur de compilation : Un appel de fonction dans la partie gauche doit renvoyer variant ou object)
MsgBox("Les tableaux croisés dynamiques s'actualisent automatiquement", vbInformation, "Information") = vbOKJ'aimerais savoir donc pourquoi ? Quelle est mon erreur ?
De plus est-ce que où dois-je déclarer mon script me permettant d'actualiser automatiquement les TCD. A l'ouverture du classeur, d'une feuille ? Vu que j'aimerais que l'actualisation se fasse automatiquement quand on change les données d'un TCD, sans fermer excel.
Voici le code que j'ai pour le moment :
Private Sub Worksheet_Activate()
'Actualisation automatique des tableaux croisés dynamiques
ActiveWorkbook.RefreshAll
End SubCela fait beaucoup de questions d'un coup je m'en excuse mais je suis encore un novice sur ce langage.
Cordialement,
Re,
Ta question première était de savoir pourquoi ton instruction MsgBox("Bonjour", vbInformation, "Information") = vbOK ne fonctionnait pas et je n’ai pas compris que tu voulais confirmer de la sorte que les TCD s’actualisaient automatiquement, puisque rien dans ton code ne laissait présumer la chose.
Maintenant que tu indiques plus clairement vouloir tout d’abord actualiser les TCD par l’intermédiaire d’un code puis en donner la confirmation par un MsgBox, je dois t’avouer que je ne connais pas assez les TCD afin de les modifier par VBA. Je te conseille donc d’indiquer ce fil comme résolu et d’en ouvrir un autre avec une question précise à ce sujet.
Tu sembles avoir pris ton instruction MsgBox("Bonjour", vbInformation, "Information") = vbOK dans un autre code et de vouloir l’employé ici un peu au hasard. Il est très souvent difficile de dire pourquoi une instruction ne fonctionne pas, par contre on peut très souvent dépanner les membres en demandant ce qu’ils désirent réaliser afin de leur proposer un code de remplacement ; d’où ma question hier.
J’ai l’impression que ton bout de code ci-dessus provient d’une ligne telle que IF MsgBox("Bonjour", vbInformation, "Information") = vbOK THEN, non ?
Amicalement.
Oui c'est exact, le bout du code provient de
IF MsgBox("Bonjour", vbInformation, "Information") = vbOK THEN ...Je vais donc le remplacer par celui que vous m'avez conseillé.
Merci en tout cas de votre réponse, et je vais effectivement ouvrir un autre sujet concernant les TCD.
Bonne journée.
Bonjour,
Private Sub Worksheet_Activate()
PivotTables("Tableau croisé dynamique1").PivotCache.Refresh
End SubSinon quel est l'intérêt de remettre toujours la même couleur d'onglet à l'ouverture ?
eric
Bonjour eriiic,
Etant en stage dans une entreprise, l'intérêt de garder la même couleur d'onglet à l'ouverture est juste un moyen mémo-technique pour la personne qui utilisera le classeur, rien de plus.
Concernant :
Private Sub Worksheet_Activate()
PivotTables("Tableau croisé dynamique1").PivotCache.Refresh
End SubLe TCD s'actualisera bien automatiquement si une personne modifie les données, sans changement de feuille ou fermeture du classeur ?
Cordialement,
l'intérêt de garder la même couleur d'onglet à l'ouverture est juste un moyen mémo-technique pour la personne qui utilisera le classeur, rien de plus.
D'accord. Mais c'est sauvegardé avec le classeur, à faire une seule fois. C'est comme si tu ré-écrivais tous tes titres à chaque ouverture, ça serait inutile...
Le TCD s'actualisera bien automatiquement si une personne modifie les données, sans changement de feuille ou fermeture du classeur ?
Le nom de la procédure te l'indique : Worksheet_Activate() = activation de la feuille
Libre à toi de l'ajouter sur d'autres évènements mais si tu n'utilises pas les résultats du TCD sur d'autres feuilles peu d'intérêt.
eric
D'accord. Mais c'est sauvegardé avec le classeur, à faire une seule fois. C'est comme si tu ré-écrivais tous tes titres à chaque ouverture, ça serait inutile...
Je n'ai pas bien compris car les onglets ne changeront pas, c'est un classeur excel qu'un chef d'équipe doit modifié et complété tous les jours.
Le nom de la procédure te l'indique : Worksheet_Activate() = activation de la feuille
Libre à toi de l'ajouter sur d'autres évènements mais si tu n'utilises pas les résultats du TCD sur d'autres feuilles peu d'intérêt.
Effectivement les résultats seront utilisés sur d'autres feuilles, je vais donc garde ce bout de code, merci d'ailleurs
Je n'ai pas bien compris car les onglets ne changeront pas
C'est bien parce que la couleur des noms d'onglets ne change pas que c'est inutile de le faire dans workbook_open.
Tu le fais une fois en manuel et basta, tu n'y touches plus.
Effectivement les résultats seront utilisés sur d'autres feuilles
Si vraiment tu utilises LIREDONNEESTABCROISDYNAMIQUE() tu pourrais prévoir un bouton qui met à jour tous tes TCD que ces formules soient mises à jour.
eric
C'est bien parce que la couleur des noms d'onglets ne change pas que c'est inutile de le faire dans workbook_open.
Tu le fais une fois en manuel et basta, tu n'y touches plus
D'accord je comprends mieux et oui effectivement je me suis rendu compte que c'est du pareil au même. Seulement j'ai fait des tutos avant de commencer mon stage (je suis en bts sio mais il n'y a pas de vba dans le programme), donc j'ai gardé mon code pour les couleurs.
Si vraiment tu utilises LIREDONNEESTABCROISDYNAMIQUE() tu pourrais prévoir un bouton qui met à jour tous tes TCD que ces formules soient mises à jour.
Pour le bouton si je ne trompe pas, je créé un bouton sur une feuille que j'affecte à une macro. Ensuite vu que j'ai plusieurs tcd sur plusieurs feuilles, je devrai faire une macro et un bouton pour chaque feuille. Le code serait ?
Sub Actualisation_tcd()
PivotTables("Tableau croisé dynamique1").PivotCache.Refresh
PivotTables("Tableau croisé dynamique2").PivotCache.Refresh
PivotTables("Tableau croisé dynamique3").PivotCache.Refresh
End subSi tu testes ça fait quoi ?
Finalement je n'ai pas testé le code du post précédent, mais j'ai simplifié ma requête :
sur chaque page contenant un ou plusieurs tcd, il y a un bouton auquel j'ai affecté la même macro :
Sub actualiser_tcd()
ActiveWorkbook.RefreshAll
End SubEdit : Le "nouveau" code fonctionne