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

activation selection multiple tableau dynamique

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

image

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

Rechercher des sujets similaires à "code vba activation selection multiple"