Filtrer automatiquement le planning d'une équipe

Mais il insiste !

Mais rien ne t'empêchait de le faire !

L'idée ne me plait pas trop (pour diverses raisons...) On va faire autrement !

Sub NommerBouton()
    Dim btn As Shape, nm As String
    On Error GoTo errselec
    If ActiveSheet.Shapes(Selection.Name).AutoShapeType = msoShapeRoundedRectangle Then _
     Set btn = ActiveSheet.Shapes(Selection.Name)
    On Error GoTo 0
    nm = Application.InputBox("Nom à affecter au bouton sélectionné ?", _
     "Renommer un bouton", , , , , , 2)
    btn.Name = nm
    btn.TextFrame.Characters.Text = nm
    Exit Sub
errselec:
    MsgBox "Sélectionner le bouton à renommer avant de lancer la procédure.", vbInformation, _
     "Erreur de sélection"
End Sub

Tu sélectionnes un bouton et tu lances cette macro (mis un bouton pour ça).

Et tu saisis le nouveau nom à la demande.

(Attention, la macro de filtrage a été réajustée pour correspondre aux noms (problème précédent), donc avant d'utiliser le filtrage, changer tous les noms et modifier également la colonne B...

Cordialement.

Merci !!!!

Ça marche parfaitement, et la macro pour renommer un bouton, c'est cool.

A ce niveau-là, le VBA pour moi, c'est quasiment de la sorcellerie (dans une autre vie, j'aurais bien pris des cours).

Hem hem : histoire d'insister un tout piti peu plus :

j'ai tenté, sans succès, de récupérer le nom du bouton sur lequel l'utilisateur a cliqué pour déclencher une mise en forme conditionnelle qui mette en valeur le nom de la personne qui apparaît sur le bouton cliqué.

J'ai tenté des tas de trucs bidouillés à partir de ce que j'ai trouvé sur internet, mais le VBA n'a pas l'air d'apprécier mes approximations...

Donc si tu as encore un peu d'énergie à me consacrer, je suis preneur.

Voilà voilà.

Et merci encore : ce planning va rendre de grands services à toute mon équipe.

j'ai tenté, sans succès, de récupérer le nom du bouton sur lequel l'utilisateur a cliqué pour déclencher une mise en forme conditionnelle qui mette en valeur le nom de la personne qui apparaît sur le bouton cliqué.

Peux-tu être plus précis sur ce que tu veux faire ?

Et indiquer plus précisément aussi ce que tu as fait ?

Bonjour,

Voilà ce que je veux : quand quelqu'un clique sur un bouton (par exemple le bouton "Machin"), une cellule (par exemple la B2) prenne la valeur "Machin".

Ensuite, ce sera facile pour moi de créer une mise en forme conditionnelle qui mette en valeur le nom "Machin" dans toutes les lignes du planning où il apparaît.

J'ai donc essayé de faire ça comme un grand, mais sans les bases en VBA. J'ai donc essayé des trucs du genre :

ActiveCell = p$ ou ActiveCell = i% ou ActiveCell = j% en espérant que p$, i%, j% contenaient le nom du bouton → échec

ou des bidouilles à base de : userform1.bouton1.caption ou ActiveControl.name → échec

J'ai conscience de mon côté éléphant dans un magasin de porcelaine, mais des fois ça passe....

Bonjour,

Note-toi quelque part que les $ ou % ou autre que tu ajoutes à un nom de variable sont ce que l'on appelle des caractères de déclaration de type : au lieu déclarer sous la forme Dim p As String, i As Integer, tu peux mettre à la place :

Dim p$, i%

Cela a le mérite d'être plus court.

Tu peux éventuellement t'en servir pour forcer le type d'une variable non déclarée lors d'une affectation :

p$ = ... [p n'acceptera qu'une valeur de type String]

(Il demeure préférable de déclarer ses variables au départ...)

Pour ta question : raisonnons de façon simple, lorsque tu actionnes un bouton, il déclenche la procédure Filtrer :

Sub Fitrer()
    Dim crit, p$, i%, j%
    If Application.Caller = "_OFF" Then
        With ActiveSheet
            If .AutoFilterMode Then
                If .FilterMode Then .ShowAllData
            End If
        End With
    Else
        p = Application.Caller

Si le bouton porte un nom de personne, à la dernière ligne ci-dessus son nom sera affecté à la variable p.

C'est là que tu peux l'intercepter. Tu mets donc à la suite :

ActiveSheet.Range("B2") = p

Mais si l'on a cliqué sur le bouton OFF, le nom ne sera pas inscrit, certes, mais il serait préférable que le nom disparaisse de B2, donc tu vas ajouter pour ce cas (à l'emplacement adéquat :

.Range("B2").ClearContents

Ce qui va donner :

Sub Fitrer()
    Dim crit, p$, i%, j%
    If Application.Caller = "_OFF" Then
        With ActiveSheet
            If .AutoFilterMode Then
                If .FilterMode Then .ShowAllData
            End If
            .Range("B2").ClearContents
        End With
    Else
        p = Application.Caller
        ActiveSheet.Range("B2") = p
        Application.ScreenUpdating = False
       (....)

Cordialement.

C'est parfait. Et même, perfectissime !

Merci beaucoup de m'avoir accompagné jusque-là, et de tes efforts de pédagogie.

J'apprécie beaucoup. )

Rechercher des sujets similaires à "filtrer automatiquement planning equipe"