IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Excel Discussion :

VBA afficher une cellule filtrée automatiquement sur formulaire [XL-2013]


Sujet :

Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Chargé de formation
    Inscrit en
    Juillet 2016
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé de formation
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2016
    Messages : 85
    Points : 41
    Points
    41
    Par défaut VBA afficher une cellule filtrée automatiquement sur formulaire
    Bonjour,

    J'ai crée un formulaire en VBA sur Excel Userform1. Le résultat s'affiche toujours en colonne A.
    Sur mon formulaire Userform1 j'ai crée un bouton Valider et une zone de texte pour affichage du résultat.
    J' ai fais ma macro pour qu'en cliquant sur Valider le résultat s'affiche sur la zone de texte de Userform1. Hélas je ne parviens pas à afficher le résultat. Pourriez-vous m'aider, je n'arrive pas à voir ou mon code est incomplet

    Private Sub CommandButton3_Click()
    Sheets("Feuil1").Activate
    UserForm1.CheckBox7.Value = False
    UserForm1.CheckBox9.Value = False
    UserForm1.CheckBox2.Value = False
    UserForm1.CheckBox10.Value = False
    UserForm1.CheckBox3.Value = False
    UserForm1.CheckBox11.Value = False
    UserForm1.CheckBox5.Value = False
    UserForm1.CheckBox13.Value = False
    UserForm1.CheckBox4.Value = False
    UserForm1.CheckBox12.Value = False
    UserForm1.CheckBox15.Value = False
    ActiveSheet.AutoFilterMode = False
    Dim l As Long
    Sheets("Feuil1").Activate
    Range("A1").Select
    For l = 2 To ActiveSheet.UsedRange.Rows.Count
    TextBox1_Change() = True
    Next
    End Sub

    En vous remerciant

  2. #2
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Points : 1 156
    Points
    1 156
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sheets("Feuil1").Activate
    Range("A1").Select
    For l = 2 To ActiveSheet.UsedRange.Rows.Count
    TextBox1_Change() = True
    Next
    Je ne vois pas la finalité de la boucle dans la mesure où I n'est pas utilisé à l'intérieur.

    Ensuite la ligne TextBox1_Change() = true doit moyennement marcher dans la mesure où tu essaye d'assigner une valeur à un Sub. Donc outre que ça ne doit rien afficher, ça doit provoquer une erreur.

    En nettoyant les select qui ne servent à rien on peut déjà partir sur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Private Sub CommandButton3_Click()
    Dim l As Long
    Me.CheckBox2.Value = False
    Me.CheckBox3.Value = False
    Me.CheckBox4.Value = False
    Me.CheckBox5.Value = False
    Me.CheckBox7.Value = False
    Me.CheckBox9.Value = False
    Me.CheckBox10.Value = False
    Me.CheckBox11.Value = False
    Me.CheckBox12.Value = False
    Me.CheckBox13.Value = False
    Me.CheckBox15.Value = False
    With ThisWorkBook.Sheets("Feuil1").
       For l = 2 To ActiveSheet.UsedRange.Rows.Count
           Me.TextBox1.value =  Me.TextBox1.value & .cells(I,1).value
        Next
    End With
    End Sub
    Comme je n'ai pas compris ce que tu voulais faire, j'ai concaténé le contenu de la colonne A dans TextBox1 en attendant que tu (re)explique ton besoin.

    Il y a encore beaucoup à redire sur ce code mais déjà il devrait faire des choses ou pas loin...

  3. #3
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Points : 1 156
    Points
    1 156
    Par défaut
    Oups... virer le poit et le activesheet oubliés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With ThisWorkBook.Sheets("Feuil1")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     For l = 2 To .UsedRange.Rows.Count

  4. #4
    Membre du Club
    Homme Profil pro
    Chargé de formation
    Inscrit en
    Juillet 2016
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé de formation
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2016
    Messages : 85
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par Tête de chat Voir le message
    Oups... virer le poit et le activesheet oubliés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With ThisWorkBook.Sheets("Feuil1")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     For l = 2 To .UsedRange.Rows.Count
    Bonsoir Merci pour votre retour

    En effet, j'étais complétement à côté j'ai mélangé mes codes, ci-dessous le bon. Par contre le votre ne m'affiche rien.

    Private Sub CommandButton1_Click()
    Dim l As Long
    If CheckBox7 = False Then
    Range("G1").AutoFilter Field:=7, Criteria1:="-"
    End If
    If CheckBox9 = False Then
    Range("H1").AutoFilter Field:=8, Criteria1:="-"
    End If
    If CheckBox2 = False Then
    Range("I1").AutoFilter Field:=9, Criteria1:="-"
    End If
    If CheckBox10 = False Then
    Range("J1").AutoFilter Field:=10, Criteria1:="-"
    End If
    If CheckBox3 = False Then
    Range("K1").AutoFilter Field:=11, Criteria1:="-"
    End If
    If CheckBox11 = False Then
    Range("L1").AutoFilter Field:=12, Criteria1:="-"
    End If
    If CheckBox5 = False Then
    Range("M1").AutoFilter Field:=13, Criteria1:="-"
    End If
    If CheckBox13 = False Then
    Range("N1").AutoFilter Field:=14, Criteria1:="-"
    End If
    If CheckBox4 = False Then
    Range("O1").AutoFilter Field:=15, Criteria1:="-"
    End If
    If CheckBox12 = False Then
    Range("P1").AutoFilter Field:=16, Criteria1:="-"
    End If
    If CheckBox15 = False Then
    Range("Q1").AutoFilter Field:=17, Criteria1:="-"
    End If
    With ThisWorkbook.Sheets("Feuil1")
    For l = 2 To .UsedRange.Rows.Count
    Me.TextBox1.Value = Me.TextBox1.Value & .Cells(i, 1).Value
    Next
    End With
    End Sub

  5. #5
    Membre du Club
    Homme Profil pro
    Chargé de formation
    Inscrit en
    Juillet 2016
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé de formation
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2016
    Messages : 85
    Points : 41
    Points
    41
    Par défaut
    Mon besoin :
    Mon formulaire génère des filtres sur une feuille Excel en fonction des cases que je coche
    A la fin de mes choix lorsque je clique sur valider, les cases non cochés sont filtré sur un seul critère spécifique ce qui permet de n'avoir qu'une seule ligne d'afficher.
    Sur la colonne A j'ai un code que je souhaite voir apparaitre dans ma zone de texte 1 sur mon formulaire
    Mon code
    Private Sub CommandButton1_Click()
    If CheckBox7 = False Then
    Range("G1").AutoFilter Field:=7, Criteria1:="-"
    End If
    Dim l As Long
    With ThisWorkbook.Sheets("Feuil1")
    Range("A1").Select
    For l = 2 To .UsedRange.Rows.Count
    UserForm1.TextBox1.Value = UserForm1.TextBox1.Value & .Cells(i, 1).Value
    Next
    End With
    End Sub

    En espérant avoir pu mieux m' expliquer

  6. #6
    Membre du Club
    Homme Profil pro
    Chargé de formation
    Inscrit en
    Juillet 2016
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé de formation
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2016
    Messages : 85
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par sena1911 Voir le message
    Mon besoin :
    Mon formulaire génère des filtres sur une feuille Excel en fonction des cases que je coche
    A la fin de mes choix lorsque je clique sur valider, les cases non cochés sont filtré sur un seul critère spécifique ce qui permet de n'avoir qu'une seule ligne d'afficher.
    Sur la colonne A j'ai un code que je souhaite voir apparaitre dans ma zone de texte 1 sur mon formulaire
    Mon code
    Private Sub CommandButton1_Click()
    If CheckBox7 = False Then
    Range("G1").AutoFilter Field:=7, Criteria1:="-"
    End If
    Dim l As Long
    With ThisWorkbook.Sheets("Feuil1")
    Range("A1").Select
    For l = 2 To .UsedRange.Rows.Count
    UserForm1.TextBox1.Value = UserForm1.TextBox1.Value & .Cells(i, 1).Value
    Next
    End With
    End Sub

    En espérant avoir pu mieux m' expliquer
    J'ai tenté d'épurer et de simplifier l'algorithme en rajoutant l'action de copier le contenu de la text box1 dans le presse papier, mais j'ai une erreur inattendu que je n'arrive pas à comprendre


    If CheckBox15 = False Then
    Range("Q1").AutoFilter Field:=17, Criteria1:="-"
    End If
    Dim l As Long
    With ThisWorkbook.Sheets("Feuil1")
    Range("A1").Select
    For l = 2 To .UsedRange.Rows.Count
    Me.TextBox1.Value = Range("A1").Cells(i, 1).Value
    Next
    End With
    Public Function settextPutInClipboard(contenu)
    On Error Resume Next
    If contenu = "" Then Exit Function
    Dim Presspp As New MSForms.DataObject
    Set Pressp = New DataObject
    Presspp.SetText contenu
    Presspp.PutInClipboard

    End Function

  7. #7
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Points : 1 156
    Points
    1 156
    Par défaut
    Bonjour,

    A la fin de mes choix lorsque je clique sur valider, les cases non cochés sont filtré sur un seul critère spécifique ce qui permet de n'avoir qu'une seule ligne d'afficher.
    Sur la colonne A j'ai un code que je souhaite voir apparaitre dans ma zone de texte 1 sur mon formulaire
    Plus clair !

    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With ThisWorkbook.Sheets("Feuil1")
    UserForm1.TextBox1.Value = ..Range(.Cells(2, 1), .Cells(.UsedRange.Rows, 1)).SpecialCells(xlCellTypeVisible).Cells(1).Value
    End With

  8. #8
    Membre du Club
    Homme Profil pro
    Chargé de formation
    Inscrit en
    Juillet 2016
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé de formation
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2016
    Messages : 85
    Points : 41
    Points
    41
    Par défaut
    Bonjour,

    Avec ce code j'ai une erreur
    Je pensais que c'était les .. devant RAnge mais visiblement ce n'est pas ca car même après la modif ca ne fonctionne pas

  9. #9
    Membre du Club
    Homme Profil pro
    Chargé de formation
    Inscrit en
    Juillet 2016
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé de formation
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2016
    Messages : 85
    Points : 41
    Points
    41
    Par défaut
    J'ai fais évoluer mon code

    With ActiveCell
    With .Offset(1, 0).Resize(Rows.Count - .Row, 1)
    UserForm1.TextBox1.Value = .SpecialCells(xlCellTypeVisible).Cells(1, 1).Select
    End With
    End With

    Je n'ai plus aucun message d'erreur mais celà ne m'affiche pas mon code mais "TRUE" dans la TextBox1

    En vous remerciant par avance

  10. #10
    Membre du Club
    Homme Profil pro
    Chargé de formation
    Inscrit en
    Juillet 2016
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé de formation
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2016
    Messages : 85
    Points : 41
    Points
    41
    Par défaut
    Bonsoir,

    Je cherche a afficher dans la text box1 un message d'erreur si après les filtres aucune donnée n'est présente dans la cellule, ci-dessous mon code

    With ActiveSheet.AutoFilter
    Set iRange = .Range.Resize(.Range.Rows.Count - 1).Offset(1, 0)
    iRange.SpecialCells(xlCellTypeVisible).Cells(1, 1).Select
    UserForm1.TextBox1.Value = Selection.Value
    End With

  11. #11
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Points : 1 156
    Points
    1 156
    Par défaut
    Bonjour,

    je t'ai joint une solution complète dans ce fil
    https://www.developpez.net/forums/d2...neration-code/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim W As String
    On Error Resume Next
    W = Me.Range(Me.Cells(Ligne1, ColCode), Me.Cells(Me.UsedRange.Rows.Count, ColCode)).SpecialCells(xlCellTypeVisible).Cells(1).Value
    If W = "" Then W = "Pas de code !"
    GetCode = W

  12. #12
    Membre du Club
    Homme Profil pro
    Chargé de formation
    Inscrit en
    Juillet 2016
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé de formation
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2016
    Messages : 85
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par Tête de chat Voir le message
    Bonjour,

    je t'ai joint une solution complète dans ce fil
    https://www.developpez.net/forums/d2...neration-code/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim W As String
    On Error Resume Next
    W = Me.Range(Me.Cells(Ligne1, ColCode), Me.Cells(Me.UsedRange.Rows.Count, ColCode)).SpecialCells(xlCellTypeVisible).Cells(1).Value
    If W = "" Then W = "Pas de code !"
    GetCode = W

    Bonjour,
    J'ai tenté de rajouter votre code mais j'ai un message d'erreur
    Je n'arrive pas à l'adapter à mon vba
    Je suis parti sur un irange et vous sur un string
    Si vous pouvez plus m'aider je suis preneur

  13. #13
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Points : 1 156
    Points
    1 156
    Par défaut
    Re,

    je ne sais pas ce qu'est un irange ... un range ?

    Ce qui passe en erreur c'est ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    iRange.SpecialCells(xlCellTypeVisible).Cells(1, 1).Select
    Quand specialcells ne renvoie rien le select sur une plage vide se plante.

    Déjà pour commencer le select dans du VBA - quand on ne le fait pas pour rendre la main à l'utilisateur au bon endroit - c'est à éviter : inutile, source de problème, source de ralentissements...

    On peut remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    iRange.SpecialCells(xlCellTypeVisible).Cells(1, 1).Select
    UserForm1.TextBox1.Value = Selection.Value
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UserForm1.TextBox1.Value = iRange.SpecialCells(xlCellTypeVisible).Cells(1, 1).Value
    Qui au demeurant va se planter pareil quand la plage est vide.

    Donc pour reprendre le code donné plus haut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    on error resume next
    UserForm1.TextBox1.Value = iRange.SpecialCells(xlCellTypeVisible).Cells(1, 1).Value
    If UserForm1.TextBox1.Value = "" Then  UserForm1.TextBox1.Value = "Pas de code !"
    J'insiste : le classeur que j'ai donné dans l'autre post est une solution complète, structurée correctement avec un code à peu près propre, donc tu devrais essayer de le lire, le comprendre et l'adapter...

  14. #14
    Membre du Club
    Homme Profil pro
    Chargé de formation
    Inscrit en
    Juillet 2016
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé de formation
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2016
    Messages : 85
    Points : 41
    Points
    41
    Par défaut
    J'ai essayé d'adapter votre tableau avec mon code qui est très bien au demeurant. Mais je ne comprends pas vos variables. De plus mon besoin et mon tableau initial ont évolué par rapport à ce que vous avez fait. Je me suis mis dessus 2 soirees de suite mais je n'ai jamais pu faire les modifications que je voulais dessus ou récupérer des codes vba.

  15. #15
    Membre du Club
    Homme Profil pro
    Chargé de formation
    Inscrit en
    Juillet 2016
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé de formation
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2016
    Messages : 85
    Points : 41
    Points
    41
    Par défaut
    A tête repose j'ai repris votre dernier code et j'ai juste modifier une variable de mon côté.. Il marche désormais parfaitement.
    Un très grand merci !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/06/2020, 15h14
  2. [XL-2010] VBA : Recopier une plage filtrée dans une Listbox de formulaire
    Par Pipeti dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 09/06/2015, 18h36
  3. [XL-2010] Lien hypothétique sur une cellule à filtre.
    Par Letudiant66000 dans le forum Excel
    Réponses: 1
    Dernier message: 08/03/2013, 16h41
  4. [XL-2003] pb de filtre automatique sur cellules fusionnées
    Par Bulbulle dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/09/2011, 16h19
  5. Probleme Filtre automatique sur une plange variable
    Par Lucorah dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/05/2010, 10h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo