Code VBA pour activation sélection multiple
Bonjour
Je voudrais que l'option sélection multiple pour deux tableaux dynamique que j'ai créé sur un fichier Excel modèle soit activé automatiquement à l'ouverture.
J'ai réussi à trouver ce code sur un forum me permettant de le faire pour un des tableau mais n'y connaissant rien en VBA je ne sais pas comment faire pour qu'il puisse le faire pour les deux.
Merci de votre aide
Melaine
Bonjour Bronsard et
Lorsque vous posez une question sur ce forum, il est bien de mettre le code directement, plutôt qu'une image !
Le code est à déposer en utilisant le bouton de la barre d'outil
Maintenant faire ce que vous souhaitez à coup de "SendKeys" n'est pour moi pas une bonne pratique
de plus ça vous enlève le verrouillage numérique
A+
Bonjour BrunoM45
Merci pour ta réponse, je ne connais absolument rien en codage, je suis juste débrouillard et arrive plus ou moins à faire des choses en grapillant des bouts de codes dans des forums à droite à gauche, d'où le côté imparfait et que je ne comprends pas tellement ce que j'écris dans ces codages.
J'ai réussi entre temps à le faire pour les deux tableaux en recopiant tout simplement les 3 lignes de codes.
Cependant, j'ai un autre soucis car ce code au final n'était pas pour tous le classeur mais seulement pour une feuille. Or j'avais déjà un code sur cette feuille pour la réactualiser dès que je vais dessus. Le code ci-dessous fonctionne mais dès que je quitte la feuille puis y revient ca désactive la sélection multiple puis ca la réactive si je la quitte et reviens de nouveau, ainsi de suite... Peut être ça que tu entends par "verrouillage numérique" ?
Est il possible de garder ce bouton sélection multiple en permanence activé tout en gardant la réactualisation de la page en modifiant ce code ? Ou bien carrément par une autre solution plus dans les bonnes pratiques ?
Private Sub Worksheet_Activate()
ThisWorkbook.RefreshAll
ActiveSheet.Shapes.Range(Array("Matériau")).Select
SendKeys "%S"
DoEvents
ActiveSheet.Shapes.Range(Array("Section")).Select
SendKeys "%S"
DoEvents
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
End Sub
Bonjour à tous,
Entre tes erreurs de vocabulaire excel et de mauvaises explications j'ai du mal à te comprendre...
Déjà, ce ne sont pas 2 tableaux mais 2 segments.
j'ai un autre soucis car ce code au final n'était pas pour tous le classeur mais seulement pour une feuille.
Là il va falloir t'expliquer mieux car ce que tu as mis est bien actif uniquement pour le module de feuille ayant ce code (?)
Sinon il faut éviter SenKeys. Peut-être la cause de ton pb que je n'ai pas compris (?), mais surtout il fait bascule le verrouillage du pavé numérique, ce qui devient vite gonflant.
Essaie avec :
Private Sub Worksheet_Activate()
ActiveSheet.Shapes.Range(Array("Matériau", "Section")).Select
End Sub
Si toujours pb, reviens avec de meilleures explications qui décrivent bien le problème en détail
Au final, je ne comprend pas non plus le but de cette manip. C'est pour en faire quoi ensuite ?
A part les supprimer ou les déplacer, je ne vois pas. Et ça tu pourrais le faire dans la macro...
eric
Bonjour
Merci pour ta réponse
Oui le code que j'ai mis est bien actif uniquement pour la feuille qui m'intéresse, ce qui n'était pas le cas dans la capture d'écran que j'ai mis dans mon premier message
Ce que je souhaiterais c'est que dès que j'active cette feuille excel en allant dessus d'une part que le tableau dynamique se réactualise à chaque fois en fonction des données qui auraient pu être modifiées dans une autre feuille de ce même classeur et en même temps que les boutons sélections multiples des deux segments soient activés par défaut.
J'ai essayé de mettre le code que tu proposes mais ca ne fonctionne pas, même en enlevant la partie pour rafraichir la page.
Le code que j'ai copié dans mon dernier message fonctionne, seulement il active les boutons sélections multiple autant qu'il les désactivent s'il étaient déjà actif, ce que j'aimerais c'est qu'ils soient actif tout le temps.
Effectivement le SenKeys semble désactiver mon pavé numérique mais vu qu'il est écrit deux fois dans mon code il le laisse actif, ou désactivé selon son état initial. Je ne connais pas grand chose en VBA, c'était un code que j'avais copié dans un forum, si une solution plus efficace existe je suis preneur
Pour ce à quoi il va servir, c'est un classeur excel que j'ai créé et qui sert de modèle pour l'import de données depuis logiciel de DAO que l'on utilise dans mon entreprise. A chaque projet on fait un transfert de liste du logiciel vers ce classeur qui permet d'avoir des listes de débits et de commande actualisés via divers formule excel, un tableau croisé dynamique qui permet de regrouper des éléments en double et d'en désactiver certains suivant le besoin et une mis en page uniforme. Plusieurs utilisateurs l'utilise c'est pourquoi je souhaiterais qu'ils aient le moins de manip possible pour éviter les erreurs de manipulation et qu'on vienne me solliciter à chaque fois pour corriger.
Merci de votre aide
Melaine
Bonjour,
mon code fonctionne. Je n'ai plus le fichier et je n'ai pas envie de refaire à cette heure ce que tu aurais dû fournir.
Me basant sur ton code, il sélectionne les 2 segments. Maintenant ce n'est peut-être pas ce que tu veux car effectivement, ça ne sert à rien...
Le mieux est de leur apprendre à s'en servir. Ce ne sont pas des boeufs quand même.
Ce que je souhaiterais c'est que dès que j'active cette feuille excel en allant dessus d'une part que le tableau dynamique se réactualise
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotCache.Refresh
si tu veux tous les rafraichir : ThisWorkbook.RefreshAll
eric
bonjour,
pour ce multiselect, utilisez le bouton "CTRL" chaque fois que vous voulez ajouter une nouvelle sélection, donc vous n'avez pas besoin de VBA.
Bonjour à tous et merci pour vos réponse
Désolé si je ne maitrise pas les procédures je suis novice et demande qu'à apprendre
Je n'ai à priori pas réussi à faire comprendre exactement ce que je voulais mais j'ai fini pas réussir à trouver un code qui fonctionne. Ce n'est peut être pas du grand art de codage VBA mais ça exécute ce que je veux et sans erreur dans mon cas.
Le ActiveSheet... sélectionne mes segment, le SendKeys exécute le Alt+S qui active le bouton sélection multiple du segment et le test = 1 ne le fait se produire qu'une fois et il reste donc actif tout le temps même si je change de feuille. Enfin le RefreshAll réactualise la page entière (et donc mon tableau dynamique) à chaque fois que je reviens sur la feuille.
Je le met ici au cas où quelqu'un aurait besoin de quelque chose de similaire :
Dim test
Private Sub Worksheet_Activate()
If IsEmpty(test) Then
ActiveSheet.Shapes.Range(Array("Matériau")).Select
SendKeys "%S"
DoEvents
ActiveSheet.Shapes.Range(Array("Section")).Select
SendKeys "%S"
DoEvents
test = 1
End If
ThisWorkbook.RefreshAll
End Sub
Bonne journée
Bonjour Bronsard
Je vous conseille d'utiliser PowerShell pour les SendKeys et ne pas être embêté avec le verrouillage numérique qui se désactive
Dim test
Private Sub Worksheet_Activate()
If IsEmpty(test) Then
ActiveSheet.Shapes.Range(Array("Matériau")).Select
CreateObject("WScript.Shell").SendKeys "%S"
DoEvents
ActiveSheet.Shapes.Range(Array("Section")).Select
CreateObject("WScript.Shell").SendKeys "%S"
DoEvents
test = 1
End If
ThisWorkbook.RefreshAll
End Sub
Bonne journée
Bonjour BrunoM45
J'ai un message d'erreur "Erreur d'exécution '424': Objet requis" avec le code que vous proposez.
Re,
Désolé j'ai laissé l'objet en début de ligne, il faut le supprimer
Normalement ça devrait aller mieux
A+
Parfait ça marche, merci beaucoup