Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

VBA soit le filtre automatique est sur une valeur soit il est sur tous.

  • Initiateur de la discussion Georges
  • Date de début
G

Georges

Guest
Bonjour à tous.

J'ai un petit souci.

Voilà j'ai mis en place un Userform qui est une aide à la saisie. Or lorsqu'on le lance il peut y avoir 2 cas de figure, soit le filtre automatique est sur une valeur : exp M. DURAND soit il est sur tous.

Or je voudrai que lorsqu'il est sur "M. Dupont" son nom apparaîsse (ça je l'ai déjà fait) et que lorsqu'il est sur "tous" les textbox soient vides.

Je cherche donc à faire une condition du type :

If sheets("MALADIE").AutoFilter = 1 Then
Nom.Value = ""
Prénom.Value = ""
End If

On ne se moque pas, je suis pas bon en VBA mais je me soigne )))

Merci d'avance pour votre aide
 
D

Dan

Guest
Bonjour Georges,

Le mieux serait de voir ton fichier.

Le fait de placer le filtre sur tous revient à montrer toutes les données ce qui peut se traduire en VBA par : ActiveSheet.ShowAllData

Toutefois essaie ceci dans ta macro :

If Worksheets("Maladie").AutoFilterMode = True Then ....

Mais je pense que si ton filtre est sur "tous", les textbox ne seront pas vides mais elles te montreront le 1er item enregistré.

Dans l'attente de te lire

@+ Dan
 
G

Georges

Guest
Merci pour ton aide, pour l'instant ça plante encore, j'ai essayé d'introduire ton code mais ça ne marche pas.

Je ne peux malheureusement t'envoyer mon fichier avant ce soir car je n'ai pas de ZIP au bureau ... Je me l'envoie at home ce soir et le renvoie.

Je te fais une copie du code :

Option Explicit
Dim Monbook As Workbook
Dim WS1 As Worksheet
Dim A As String
Dim B As String
Dim L3 As String



Private Sub UserForm_Initialize()
Set Monbook = ThisWorkbook
With Monbook
Set WS1 = .Worksheets("MALADIE")
End With
L3 = WS1.Range("A65536").End(xlUp).Row
Nom.Value = WS1.Range("a" & L3).Value
Prénom.Value = WS1.Range("b" & L3).Value
If WS1.AutoFilterMode = True Then
Nom.Value = ""
Prénom.Value = ""
End If

(Et là plantage intégrale)
If ActiveSheet.ShowAllData Then
Nom.Value = ""
Prénom.Value = ""
End If

Enfant.Visible = False
Label3.Visible = False
Enfant.Value = ""
Date1.Value = ""
date2.Value = ""
comm.Value = ""
ComboBox1.List = Array("MAL", "ENF", "HOSP", "AT")
End Sub

Merci pour votre aide.
 
G

georges

Guest
Voici le fichier sur lequel je travaille.


Merci pour votre aide
 

Pièces jointes

  • Exemple1.zip
    16 KB · Affichages: 34
  • Exemple1.zip
    16 KB · Affichages: 30
  • Exemple1.zip
    16 KB · Affichages: 32
G

Georges

Guest
Salut,
Ca marche enfin, j'ai trouvé une solution, ce n'est peut-être pas la plus élégante, mais elle fonctionne. Je vous livre le code si un jour ça peut-être utile à quelqu’un :

Option Explicit
Dim Monbook As Workbook
Dim WS1 As Worksheet
Dim A As String
Dim B As String
Dim C As String
Dim D As String
Dim E As String
Dim L3 As String



Private Sub UserForm_Initialize()
Set Monbook = ThisWorkbook
With Monbook
Set WS1 = .Worksheets("MALADIE")
End With

'dans le cas où le filtre automatique n'est pas activé
If WS1.AutoFilterMode = False Then
Nom.Value = ""
Prénom.Value = ""
End If

‘Voila l’astuce déterminer la valeur du critère du filtre
With WS1
If .AutoFilterMode Then
With .AutoFilter.Filters(1)
If .On Then D = .Criteria1
End With
End If
End With

‘et l’utiliser pour créer une condition
If D = "" Then
Nom.Value = ""
Prénom.Value = ""
Else
L3 = WS1.Range("A65536").End(xlUp).Row
Nom.Value = WS1.Range("a" & L3).Value
Prénom.Value = WS1.Range("b" & L3).Value
End If
End Sub


Merci à tous pour l'émulation et les conseils que ce site apporte.

a+

Georges
 

Discussions similaires

Réponses
16
Affichages
549
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…