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

Macros et VBA Excel Discussion :

UserForm extraction et Filtre ComboBox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 13
    Par défaut UserForm extraction et Filtre ComboBox
    Bonjour,

    Je me permets de poster ma question ici après de longues heures de balades infructueuses sur des forums pour y trouver une réponse. Je ne sais pas si la question a déjà été posée mais dans le doute...

    Mon problème porte en fait sur le code permettant d'extraire des informations via un combobox situé dans un userform. Le userform doit pouvoir combiner plusieurs filtres (date, valeur et nature de l'opération via un combobox pour cette dernire).

    Mais plus qu'un long discours:

    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
    Private Sub CommandButton1_Click()
    
    Sheets("Total").Select
    Sheets("Total").Copy Before:=Sheets(1)
    Sheets("Total (2)").Activate
    Sheets("Total (2)").Name = InputBox("Nom de l'onglet?", "Onglet")
    
    Dim i As Long
    
    For i = 1000 To 3 Step -1
    If Cells(i, 2).Value < CDate(TextDate1) Or Cells(i, 2).Value > CDate(TextDate2) Then Rows(i).Delete
    If Cells(i, 10).Value < CLng(TextMin) Or Cells(i, 10).Value > CLng(TextMax) Then Rows(i).Delete
    
    'Et c'est là que je bloque complétement.....
    End Sub
    Sachant que ma combobox a été appelée ComboBoxSecteur et a été alimentée via un:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ComboBoxSecteur.AddItem ("XXXX")
    etc... Sachant qu'il y a effectivement plus simple pour cela.

    Dans tous les cas, je vous remercie pour votre réponse.

    Loïc

  2. #2
    Membre éprouvé Avatar de Many31
    Profil pro
    Inscrit en
    Février 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 198
    Par défaut
    Bonjour,

    Tout d'abord, il serait agréable de poser une vraie question avec un "?" claire et précise parce que là ca ressemble plus à du "vous pouvez continuer" sans réel contenu...

    Bref je comprend pas où vous voulez en venir.

    Deuxième remarque le For i = X to XX OK ca peut le faire (je préfère perso le While mais bon...) le soucis dans ce que vous écrivez c'est que lorsqu'une ligne est supprimée (exemple ligne "n") la suivante n'est pas "n+1" mais à nouveau "n"

    Ce qui fait qu'en cas de suppression de ligne il faut ramener i à "i+1" pour que la boucle for revienne sur la valeur "n"

    Pour consulter la valeur prise par une combobox rien de plus simple.... if cells(ligne,colonne) = combobox1 par exemple et si vous voulez être rigoureux, cells(ligne,colonne) = combobox1.value

    Mais vu que vous ne posez pas de question clair je ne sais même pas si ca répond à vos intérrogations.

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 13
    Par défaut
    Bonjour Many,

    Je vous remercie pour votre réponse/commentaires!

    En fait ma question portait réellement sur le filtre via un combobox: comment faire?

    Mais je crois que vous m'avez bien indiqué la voie:
    Pour consulter la valeur prise par une combobox rien de plus simple.... if cells(ligne,colonne) = combobox1 par exemple et si vous voulez être rigoureux, cells(ligne,colonne) = combobox1.value
    Je vais tester ça et revient vous dire ce qu'il en est.

    Loïc

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Pourquoi ne pas utiliser un filtre automatique? (sans boucle sur les lignes et sans suppression de lignes)

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 13
    Par défaut
    ....

    Parce que je suis débutant et que je suis parti d'une base que j'avais sous la main sans forcément saisir toutes les possibilités offertes...

    Je suis maintenant entrain de tester la même chose sur un filtre utilisant plusieurs combobox.

    Loïc

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut EDIT: Correction
    Un exemple (à adapter suivant les commentaires)
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Private Sub CommandButton1_Click()
    Dim Sh As Worksheet
    Dim LastLig As Long
    Dim DteDeb As Date, DteFin As Date
    Dim ValMin As Double, ValMAx As Double
    Dim Sect As String
     
    Application.ScreenUpdating = False
    DteDeb = CDate(Me.TextDate1.Value)
    DteFin = CDate(Me.TextDate2.Value)
    ValMin = Val(Me.TextMin.Value)
    ValMAx = Val(Me.TextMax.Value)
    Sect = Me.ComboBoxSecteur.Value
     
    Set Sh = Worksheets.Add(Before:=Sheets("Total"))
    With Sheets("Total")
        .AutoFilterMode = False
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
        With .Range("A1:Z" & LastLig)
            .AutoFilter Field:=2, Criteria1:="<=" & CLng(DteFin), Criteria2:=">=" & CLng(DteDeb), Operator:=xlAnd       'Filtre colonne 2 entre les 2 dates
            .AutoFilter Field:=10, Criteria1:="<=" & ValMAx, Criteria2:=">=" & ValMin, Operator:=xlAnd          'Filtre colonne 10 entre les 2 valeurs min et max
            .AutoFilter Field:=3, Criteria1:=Sect                                                                           'Filtre la colonne 3 sur la valeur de ComboBoxSecteur
            .SpecialCells(xlCellTypeVisible).Copy Sh.Range("A1")
        End With
        .AutoFilterMode = False
    End With
    Set Sh = Nothing
    End Sub

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 13
    Par défaut
    Many, la commande est impeccable!

    Mais mon soucis c'est que mon formulaire contient plusieurs combobox que l'utilisateur n'est pas obligé de renseigner. Lorsque j'applique le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim t As Boolean
    t = False
    If Cells(i, 13) = ComboBox1.Value = True Then
    ElseIf ComboBox1.Value = ("") Then t = True
    End If
    If Cells(i, 5) = ComboBox2.Value = True Then
    ElseIf ComboBox2.Value = ("") Then t = True
    End If
    If Cells(i, 8) = ComboBox3.Value = True Then
    ElseIf 3.Value = ("") Then t = True
    End If
    If t Then Rows(i).Delete: t = False
    Le filtre considère les emplacements vides comme étant à supprimer... Avez-vous une idée de la façon dont je peux contourner la chose? S'il vous plait.

    Edit: je vais jeter un gros oeil sur le code, merci mercatog

    Loïc

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

Discussions similaires

  1. [XL-2007] Problème sur filtre combobox et userform
    Par Esak59 dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 28/01/2011, 16h18
  2. [VB.NET] Filtre combobox - Datasource
    Par chepac dans le forum VB.NET
    Réponses: 15
    Dernier message: 16/06/2009, 14h28
  3. création d'un Tableaudans un userform+extraction de données
    Par Shadow5 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/03/2008, 11h34
  4. UserForm + Extraction de données sur nouveau classeur
    Par tpcforever dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/06/2007, 12h17
  5. [VBA-A] Filtre ComboBox
    Par Mad X dans le forum VBA Access
    Réponses: 3
    Dernier message: 10/05/2006, 13h23

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