Ne plus faire apparaitre un userform si l'utilisateur le demande

  • Initiateur de la discussion Initiateur de la discussion alias_2003
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

alias_2003

XLDnaute Occasionnel
Bonjour à tous !
J'aimerais créer un userform qui apparait à l'ouverture d'un fichier partagé et qui demande à l'utilisateur s'il veut afficher l'aide (ça, ça devrait être bon). J'aimerais savoir s'il est possible lorsque l'utilisateur clique une case (ou un bouton) "Ne plus afficher" que l'userform n'apparaisse plus pour cet utilisateur ??
Merci beaucoup de vos conseils,
Bonne journée,
Amicalement
 
Re : Ne plus faire apparaitre un userform si l'utilisateur le demande

Bonjour alias_2003,

Voyez le fichier joint et les macros.

Dans ThisWorkbook :

Code:
Private Sub Workbook_Open()
Dim i As Variant
i = Application.Match(Environ("Username"), [Refus], 0)
If IsError(i) Then UserForm1.Show 0 '0 => non modal (facultatif)
End Sub
Dans le code de l'USF, création du nom défini Refus pour stocker les Environ("Username") :

Code:
Private Sub CheckBox1_Click()
Dim t() As String, i As Long
If CheckBox1 Then
  If IsError([Refus]) Then
    ReDim t(1 To 2)
    t(2) = Environ("Username")
  Else
    ReDim t(1 To Application.CountA([Refus]) + 1)
    For i = 1 To UBound(t) - 1
      t(i) = Application.Index([Refus], i)
    Next
    t(i) = Environ("Username")
  End If
Else
  If Application.CountA([Refus]) = 2 Then
    ThisWorkbook.Names("Refus").Delete
    Exit Sub
  End If
  ReDim t(1 To Application.CountA([Refus]) - 1)
    For i = 1 To UBound(t)
      t(i) = Application.Index([Refus], i)
    Next
End If
ThisWorkbook.Names.Add "Refus", t
End Sub
Dans Module1, pour masquer/afficher le nom Refus :

Code:
Sub AffichageNomDéfini()
On Error Resume Next
ThisWorkbook.Names("Refus").Visible = False 'Masque
'ThisWorkbook.Names("Refus").Visible = True 'Affiche
End Sub
Pour tester correctement, téléchargez le fichier puis ouvrez-le, fermez-le.

A+
 

Pièces jointes

Dernière édition:
Re : Ne plus faire apparaitre un userform si l'utilisateur le demande

Re,

Ceci évite les boucles dans le code de l'USF :

Code:
Private Sub CheckBox1_Click()
Dim t
If CheckBox1 Then
  If IsError([Refus]) Then
    ReDim t(1 To 2)
    t(1) = ""
    t(2) = Environ("Username")
  Else
    t = [Refus]
    ReDim Preserve t(1 To Application.CountA([Refus]) + 1)
    t(UBound(t)) = Environ("Username")
  End If
Else
  If Application.CountA([Refus]) = 2 Then
    ThisWorkbook.Names("Refus").Delete
    Exit Sub
  End If
  t = [Refus]
  ReDim Preserve t(1 To Application.CountA([Refus]) - 1)
End If
ThisWorkbook.Names.Add "Refus", t
End Sub
Fichier (2).

A+
 

Pièces jointes

Re : Ne plus faire apparaitre un userform si l'utilisateur le demande

Bonjour job75,
MERCI beaucoup de votre aide ! Votre fichier répond parfaitement à ce que je recherchais ! Il me reste à essayer de comprendre le code...
Merci mille fois,
Bonne soirée,
Amicalement
 
Re : Ne plus faire apparaitre un userform si l'utilisateur le demande

Bonjour le Forum, job75,
Une dernière question... J'en suis à la phase de test de mon fichier afin d'identifier les problèmes éventuels... dans le code, comment faire une fois que j'ai cliquer sur "ne plus afficher" pour que le message apparaisse à nouveau ?
Merci beaucoup,
Bonne journée,
Amicalement
 
Re : Ne plus faire apparaitre un userform si l'utilisateur le demande

Bonjour alias_2003,

Si l'utilisateur a refusé le message son nom est stocké dans le nom défini Refus.

Pour le sortir de la liste, exécuter cette macro (clic sur le bouton "Afficher le message") :

Code:
Sub Annuler()
Dim i As Variant, tablo, t$(), nom$, n&
i = Application.Match(Environ("Username"), [Refus], 0)
If IsError(i) Then Exit Sub
tablo = [Refus]
If UBound(tablo) = 2 Then ThisWorkbook.Names("Refus").Delete: Exit Sub
ReDim t(1 To UBound(tablo) - 1)
nom = Environ("Username")
For i = 1 To UBound(tablo)
  If tablo(i) <> nom Then
    n = n + 1
    t(n) = tablo(i)
  End If
Next
ThisWorkbook.Names.Add "Refus", t, Visible:=False  'nom défini masqué
End Sub
Nota : sur cette macro et dans l'USF je masque maintenant le nom Refus dès sa création.

Je ne l'avais pas fait pour le laisser voir quand on teste.

Fichier (3).

A+
 

Pièces jointes

Dernière édition:
Re : Ne plus faire apparaitre un userform si l'utilisateur le demande

Re,

Vérifiez que vous prenez bien le dernier fichier (3), car je l'ai corrigé suite à une erreur.

La 8ème ligne c'est nom = Environ("Username") elle ne peut pas beuguer quand nom est déclaré String ($).

A+
 
Re : Ne plus faire apparaitre un userform si l'utilisateur le demande

Merci job75, la ligne 8 pour moi, celle qui provoque une erreur est :
Code:
If UBound(tablo) = 2 Then [B][Refus].Delete[/B]: Exit Sub
j'ai bien pris le dernier fichier posté (3) !
A+
 
Re : Ne plus faire apparaitre un userform si l'utilisateur le demande

Re,

Je vous ai dit que j'ai corrigé le fichier (3), maintenant on y trouve :

Code:
If UBound(tablo) = 2 Then ThisWorkbook.Names("Refus").Delete: Exit Sub
A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
XL 2019 User Form
Réponses
9
Affichages
314
Réponses
5
Affichages
386
Réponses
5
Affichages
742
Retour