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 pour trier une base


Sujet :

Macros et VBA Excel

  1. #21
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2013
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Février 2013
    Messages : 155
    Par défaut
    Je crois savoir d'ou vient mon problème.

    J'ai deux variables: largeur_max_min_k et largeur_max_max_k.

    Je place un integer dans chaque.

    Puis je filtre comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range("A1").AutoFilter Field:=20, Criteria1:=">largeur_max_min_k", Operator:=xlAnd, Criteria2:="<largeur_max_max_k"
    Quand je regarde le filtre auto sur la feuille en question, le filtre perso contient le nom des variables et non leur valeurs.

    Que puis je faire?

  2. #22
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    sort tes variables des " ..


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ....Criteria2:="<" & largeur_max_max_k

  3. #23
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2013
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Février 2013
    Messages : 155
    Par défaut
    Merci ça marche déjà mieux !

    Cependant, les valeurs des variables sont bien dans les filtres, mais pas en temps réel.

    C'est à dire, lorsque que le programme est terminé, je vais sur ma feuille excel et aucune lignes n'est affichée. Je clique sur le filtre perso, je vois que les bonnes valeurs sont présentes, je clique sur ok. Et la j'ai bien les lignes correspondantes qui s'affichent. ??

  4. #24
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2013
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Février 2013
    Messages : 155
    Par défaut
    Je réitère mon problème.

    Je fais un auto filter sur trois colonnes de ma base (ligne 121). Je lance mon userform. le traitement a du être fait. Je stoppe la macro et je vais voir ce qui a été écrit dans mes deux feuilles "temporaires" et si les filtres ont bien pris les valeurs des variables.

    En effet, ma première feuille temp est belle est bien rempli avec la ligne filtrée provenant d'un premier filtre de mon userform (ligne 62).

    Ensuite, je vais voir ma deuxième feuille temp, mais elle ne contient que les étiquettes des colonnes. Il y a peut être aucun enregistrement correspondant aux filtres que j'ai appliqué. Je vais donc voir ma base et les filtres actifs dessus. Il s'avère que les trois filtres sont bien là et ont les bonnes valeurs mais aucun enregistrement n'apparait non plus.

    Dans le filtre de la colonne largeur, j'ai: inférieur à va1 et supérieur à va2. Il faut que j'aille dans filtre perso et que je clique sur OK pour qu'à ce moment là, les enregistrements apparaissent.

    Pourquoi lors du premier filtre tout marche niquel et dans ce deuxième filtre rien n'est actualisé?

    Voici mon code:

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    Private Sub CommandButton1_Click()
    'Variables
     
    Dim type_f As String
    Dim largeur_f As String
    Dim forme_f As String
    Dim type_porte_f As String
    Dim hauteur_porte_f As Double
    Dim materiau_f As String
    Dim nb_battant_f As Integer
    Dim pilier_f As Double
    Dim coteC_f As Double
    Dim coteE_f As Double
    Dim ouv_f As Double
    Dim tension_f As Integer
    Dim poids_max_min_k As Double
    Dim poids_max_max_k As Double
    Dim traction_max_max_k As Double
    Dim traction_max_min_k As Double
    Dim largeur_max_min_k As Double
    Dim largeur_max_max_k As Double
    Dim hauteur_max_min_k As Double
    Dim hauteur_max_max_k As Double
    Dim tmp As Range
    Dim result As Range
     
     
    'Stockage des infos clients
    If ComboBox1.Value = "PORTAIL BATTANT" Then
     
    type_f = "BATTANT"
    largeur_f = ComboBox2.Value
    forme_f = ComboBox3.Value
    materiau_f = ComboBox4.Value
    nb_battant_f = OptionButton1.Value
    tension_f = OptionButton3.Value
     
    ElseIf ComboBox1.Value = "PORTAIL COULISSANT" Then
     
    type_f = "COULISSANT"
    largeur_f = ComboBox2.Value
    forme_f = ComboBox3.Value
    materiau_f = ComboBox4.Value
    tension_f = OptionButton3.Value
     
    ElseIf ComboBox1.Value = "PORTE GARAGE" Then
     
    type_f = "GARAGE"
    type_porte_f = ComboBox2.Value
    hauteur_porte_f = ComboBox3.Value
    tension_f = OptionButton3.Value
     
    End If
     
    Worksheets("Relations").Activate
     
    If ComboBox1.Value = "PORTAIL BATTANT" Then
    'Traitement du besoin
    With Worksheets("Relations")
        If .FilterMode = True Then .ShowAllData
     
        .Range("A1").AutoFilter Field:=2, Criteria1:=type_f
        .Range("A1").AutoFilter Field:=6, Criteria1:=largeur_f
        .Range("A1").AutoFilter Field:=7, Criteria1:=forme_f
        .Range("A1").AutoFilter Field:=8, Criteria1:=materiau_f
         Set tmp = ActiveCell.CurrentRegion.SpecialCells(xlCellTypeVisible)
         tmp.Select
         tmp.Copy Feuil7.Range("A1")
     
    End With
     
    ElseIf ComboBox1.Value = "PORTAIL COULISSANT" Then
    With Worksheets("Relations")
        If .FilterMode = True Then .ShowAllData
     
        .Range("A1").AutoFilter Field:=2, Criteria1:=type_f
        .Range("A1").AutoFilter Field:=6, Criteria1:=largeur_f
        .Range("A1").AutoFilter Field:=7, Criteria1:=forme_f
        .Range("A1").AutoFilter Field:=8, Criteria1:=materiau_f
         Set tmp = ActiveCell.CurrentRegion.SpecialCells(xlCellTypeVisible)
         tmp.Select
        tmp.Copy Feuil7.Range("A1")
     
    End With
     
    ElseIf ComboBox1.Value = "PORTE GARAGE" Then
    With Worksheets("Relations")
        If .FilterMode = True Then .ShowAllData
     
        .Range("A1").AutoFilter Field:=2, Criteria1:=type_f
        .Range("A1").AutoFilter Field:=3, Criteria1:=type_porte_f
        .Range("A1").AutoFilter Field:=6, Criteria1:=hauteur_porte_f
         Set tmp = ActiveCell.CurrentRegion.SpecialCells(xlCellTypeVisible)
         tmp.Select
        tmp.Copy Feuil7.Range("A1")
     
    End With
     
    End If
     
    Worksheets("Relations").AutoFilterMode = False
     
    With Worksheets("tmp")
    Worksheets("tmp").Activate
        poids_max_min_k = .Range("L2")
        poids_max_max_k = .Range("M2")
        traction_max_min_k = .Range("N2")
        traction_max_max_k = .Range("O2")
        largeur_max_min_k = .Range("P2")
        largeur_max_max_k = .Range("Q2")
        hauteur_max_min_k = .Range("R2")
        hauteur_max_max_k = .Range("S2")
    End With
     
    If ComboBox1.Value = "PORTAIL BATTANT" Then
    'Traitement des résultats
    With Worksheets("BASE")
        Worksheets("BASE").Activate
        If .FilterMode = True Then .ShowAllData
     
        .Range("A1").AutoFilter Field:=9, Criteria1:="PORTAIL BATTANT"
        .Range("A1").AutoFilter Field:=20, Criteria1:=">=" & largeur_max_min_k, Operator:=xlAnd, Criteria2:="<" & largeur_max_max_k
        .Range("A1").AutoFilter Field:=21, Criteria1:=">=" & poids_max_min_k, Operator:=xlAnd, Criteria2:="<" & poids_max_max_k
         Set result = ActiveCell.CurrentRegion.SpecialCells(xlCellTypeVisible)
         result.Select
         result.Copy Feuil9.Range("A1")
     
     
     
    End With
     
    ElseIf ComboBox1.Value = "PORTAIL COULISSANT" Then
    With Worksheets("BASE")
    Worksheets("BASE").Activate
        If .FilterMode = True Then .ShowAllData
     
        .Range("A1").AutoFilter Field:=9, Criteria1:="PORTAIL COULISSANT"
        .Range("A1").AutoFilter Field:=20, Criteria1:=">=" & largeur_max_min_k, Operator:=xlAnd, Criteria2:="<" & largeur_max_max_k
        .Range("A1").AutoFilter Field:=21, Criteria1:=">=" & poids_max_min_k, Operator:=xlAnd, Criteria2:="<" & poids_max_max_k
         Set result = ActiveCell.CurrentRegion.SpecialCells(xlCellTypeVisible)
         result.Select
         result.Copy Feuil9.Range("A1")
     
    End With
     
    ElseIf ComboBox1.Value = "PORTE GARAGE" Then
    With Worksheets("BASE")
    Worksheets("BASE").Activate
        If .FilterMode = True Then .ShowAllData
     
        .Range("A1").AutoFilter Field:=9, Criteria1:="PORTE GARAGE"
        .Range("A1").AutoFilter Field:=15, Criteria1:=">=" & hauteur_max_min_k, Operator:=xlAnd, Criteria2:="<" & hauteur_max_max_k
        .Range("A1").AutoFilter Field:=22, Criteria1:=">=" & traction_max_min_k, Operator:=xlAnd, Criteria2:="<" & traction_max_max_k
         Set result = ActiveCell.CurrentRegion.SpecialCells(xlCellTypeVisible)
     
         result.Select
         result.Copy Feuil9.Range("A1")
     
     
    End With
     
    End If
    End Sub

  5. #25
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2013
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Février 2013
    Messages : 155
    Par défaut
    Pas d'idées pour résoudre ce petit soucis?

    J'ai un nouveau problème qui intervient sur les champ optionnels de mon formulaire.

    Les valeurs des champs optionnels permettent de filtrer plus précisemment la base. Du coup, pour éviter qu'il filtre sur ces colonnes par des valeurs vides, j'ai écris ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Not IsEmpty(nb_battant_f) Then .Range("A1").AutoFilter Field:=11, Criteria1:=nb_battant_f
         If Not IsEmpty(tension_f) Then .Range("A1").AutoFilter Field:=25, Criteria1:=tension_f
         If Not IsEmpty(pilier_f) Then .Range("A1").AutoFilter Field:=12, Criteria1:="<=" & pilier_f
         If Not IsEmpty(coteC_max) Then .Range("A1").AutoFilter Field:=13, Criteria1:="<=" & coteC_max
         If Not IsEmpty(coteE_max) Then .Range("A1").AutoFilter Field:=14, Criteria1:="<=" & coteE_max
    Cependant, en remplissant aucun des champs (nb_battant_f, tension_f, pilier_f, coteC_max, coteE_max) , la base est filtrée par nb_battant =0 et pilier_f = 0.

    D'où est ce que cela peut provenir?

Discussions similaires

  1. Réponses: 11
    Dernier message: 29/06/2005, 17h55
  2. Réponses: 8
    Dernier message: 23/03/2005, 19h28
  3. [PowerAMC] Comment s'en servir pour creer une base?
    Par Elmilouse dans le forum Access
    Réponses: 2
    Dernier message: 27/07/2004, 09h53
  4. aide pour exporter une base de donnée
    Par matt55 dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 06/04/2004, 14h28
  5. Créer une vue pour trier une requete UNION ?
    Par Etienne Bar dans le forum SQL
    Réponses: 3
    Dernier message: 03/01/2003, 20h22

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