1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur maintenance industriel
    Inscrit en
    juin 2018
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur maintenance industriel
    Secteur : Transports

    Informations forums :
    Inscription : juin 2018
    Messages : 75
    Points : 42
    Points
    42

    Par défaut Améliorer les performances générales de la macro

    Bonjour,

    J'ai une macro qui se lance afin d'incrémenter une listBox dans un userform, celle-ci fonctionne très bien. Mais suite à l'ajout de 5 000 ligne la macro fais ramé l'ordinateur. Qu'elle sont les possibilités permettant de diminuer le temps d'exécution d'une macro ?
    voici le 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
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    Private Sub UserForm_Initialize()
    Dim N As Integer
    Dim I As Long
    ListBox1.ColumnCount = 10 'nombre de colonnes la colonne 9 contient le numéro de ligne
    ListBox1.ColumnWidths = "0;65;40;50;45;35;225;55;55;55" 'largeur des colonnes
    ListBox1.TextAlign = fmTextAlignCenter ' centre le texte dans la listbox
    ListBox2.ColumnCount = 10 'nombre de colonnes la colonne 9 contient le numéro de ligne
    ListBox2.ColumnWidths = "0;65;40;50;45;35;225;55;55;55" 'largeur des colonnes
    ListBox2.TextAlign = fmTextAlignCenter ' centre le texte dans la listbox
     
    'trie par ordre alphabétique le N° FTS
     ActiveWorkbook.Worksheets("Base de données").AutoFilter.Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Base de données").AutoFilter.Sort.SortFields.Add _
            Key:=Range("E1:E1048576"), SortOn:=xlSortOnValues, Order:=xlAscending, _
            DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Base de données").AutoFilter.Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
     
     Me.ListBox1.MultiSelect = fmMultiSelectSingle
     
    'Filtre arrivé/départ 1
     
    If RECHMOD.CheckBox1 = True Then
        Selection.AutoFilter Field:=32, Criteria1:=""
        Selection.AutoFilter Field:=9, Criteria1:="<>"
        Selection.AutoFilter Field:=12, Criteria1:=""
     
     
     
        With Sheets("Base de données") 'dans la feuille Base de données
     
            If RECHMOD.CBoxUM.Value <> "" Then Selection.AutoFilter Field:=2, Criteria1:=RECHMOD.CBoxUM.Value
            If RECHMOD.CBoxType.Value <> "" Then Selection.AutoFilter Field:=3, Criteria1:=RECHMOD.CBoxType.Value
            If RECHMOD.CBoxMateriel.Value <> "" Then Selection.AutoFilter Field:=4, Criteria1:=RECHMOD.CBoxMateriel.Value
            If RECHMOD.CBoxNOrgane.Value <> "" Then Selection.AutoFilter Field:=5, Criteria1:=RECHMOD.CBoxNOrgane.Value
            If RECHMOD.CBoxTache.Value <> "" Then Selection.AutoFilter Field:=6, Criteria1:=RECHMOD.CBoxTache.Value
            If RECHMOD.CBoxVersion.Value <> "" Then Selection.AutoFilter Field:=7, Criteria1:=RECHMOD.CBoxVersion.Value
            If RECHMOD.CBoxDocValide.Value = "Oui" Then Selection.AutoFilter Field:=31, Criteria1:="<>"
     
            Derlig = .Range("A" & .Rows.Count).End(xlUp).Row 'Défini la place de celulle et la derniere ligne d'une colonne
     
            For I = 2 To Derlig 'pour I de 1 à la dernière ligne
     
            'ajoute les données dans la listBox1
                If .Range("A" & I).EntireRow.Hidden = False Then 'si la cellule est visible alors faire les étapes suivante sinon end if
                        ListBox1.AddItem .Range("A" & I).Value
                        ListBox1.List(ListBox1.ListCount - 1, 1) = .Range("A" & I).Offset(0, 2) 'ajoute le type en colonne 1
                        ListBox1.List(ListBox1.ListCount - 1, 2) = .Range("A" & I).Offset(0, 3) 'ajoute le Materiel en colonne 2
                        ListBox1.List(ListBox1.ListCount - 1, 3) = .Range("A" & I).Offset(0, 4) 'ajoute le N° Organe en colonne 3
                        ListBox1.List(ListBox1.ListCount - 1, 4) = .Range("A" & I).Offset(0, 5) 'ajoute la tache en colonne 4
                        ListBox1.List(ListBox1.ListCount - 1, 5) = .Range("A" & I).Offset(0, 6) 'ajoute la Version en colonne 5
                        ListBox1.List(ListBox1.ListCount - 1, 6) = .Range("A" & I).Offset(0, 7) 'ajoute le Observation en colonne 6
                        ListBox1.List(ListBox1.ListCount - 1, 7) = .Range("A" & I).Offset(0, 8) 'ajoute le 1 ére Arrivé en colonne 7
                        ListBox1.List(ListBox1.ListCount - 1, 8) = .Range("A" & I).Offset(0, 30) 'ajoute le Validée le en colonne 8
                        ListBox1.List(ListBox1.ListCount - 1, 9) = .Range("A" & I).Offset(0, 31) 'ajoute le Départ en colonne 9
                End If
            Next I
            .ShowAllData
        End With 'fin du with
     
    'Filtre arrivé/départ 2
     
        Selection.AutoFilter Field:=32, Criteria1:=""
        Selection.AutoFilter Field:=13, Criteria1:="<>"
        Selection.AutoFilter Field:=16, Criteria1:=""
     
     
     
        With Sheets("Base de données") 'dans la feuille Base de données
     
            If RECHMOD.CBoxUM.Value <> "" Then Selection.AutoFilter Field:=2, Criteria1:=RECHMOD.CBoxUM.Value
            If RECHMOD.CBoxType.Value <> "" Then Selection.AutoFilter Field:=3, Criteria1:=RECHMOD.CBoxType.Value
            If RECHMOD.CBoxMateriel.Value <> "" Then Selection.AutoFilter Field:=4, Criteria1:=RECHMOD.CBoxMateriel.Value
            If RECHMOD.CBoxNOrgane.Value <> "" Then Selection.AutoFilter Field:=5, Criteria1:=RECHMOD.CBoxNOrgane.Value
            If RECHMOD.CBoxTache.Value <> "" Then Selection.AutoFilter Field:=6, Criteria1:=RECHMOD.CBoxTache.Value
            If RECHMOD.CBoxVersion.Value <> "" Then Selection.AutoFilter Field:=7, Criteria1:=RECHMOD.CBoxVersion.Value
            If RECHMOD.CBoxDocValide.Value = "Oui" Then Selection.AutoFilter Field:=31, Criteria1:="<>"
     
            Derlig = .Range("A" & .Rows.Count).End(xlUp).Row 'Défini la place de celulle et la derniere ligne d'une colonne
            For I = 2 To Derlig 'pour I de 1 à la dernière ligne
     
            'ajoute les données dans la listBox1
                If .Range("A" & I).EntireRow.Hidden = False Then 'si la cellule est visible alors faire les étapes suivante sinon end if
                        ListBox1.AddItem .Range("A" & I).Value
                        ListBox1.List(ListBox1.ListCount - 1, 1) = .Range("A" & I).Offset(0, 2) 'ajoute le type en colonne 1
                        ListBox1.List(ListBox1.ListCount - 1, 2) = .Range("A" & I).Offset(0, 3) 'ajoute le Materiel en colonne 2
                        ListBox1.List(ListBox1.ListCount - 1, 3) = .Range("A" & I).Offset(0, 4) 'ajoute le N° Organe en colonne 3
                        ListBox1.List(ListBox1.ListCount - 1, 4) = .Range("A" & I).Offset(0, 5) 'ajoute la tache en colonne 4
                        ListBox1.List(ListBox1.ListCount - 1, 5) = .Range("A" & I).Offset(0, 6) 'ajoute la Version en colonne 5
                        ListBox1.List(ListBox1.ListCount - 1, 6) = .Range("A" & I).Offset(0, 7) 'ajoute le Observation en colonne 6
                        ListBox1.List(ListBox1.ListCount - 1, 7) = .Range("A" & I).Offset(0, 8) 'ajoute le 1 ére Arrivé en colonne 7
                        ListBox1.List(ListBox1.ListCount - 1, 8) = .Range("A" & I).Offset(0, 30) 'ajoute le Validée le en colonne 8
                        ListBox1.List(ListBox1.ListCount - 1, 9) = .Range("A" & I).Offset(0, 31) 'ajoute le Départ en colonne 9
                End If
            Next I
            .ShowAllData
        End With 'fin du with
     
    'Filtre arrivé/départ 3
     
        Selection.AutoFilter Field:=32, Criteria1:=""
        Selection.AutoFilter Field:=17, Criteria1:="<>"
        Selection.AutoFilter Field:=20, Criteria1:=""
     
     
     
        With Sheets("Base de données") 'dans la feuille Base de données
            If RECHMOD.CBoxUM.Value <> "" Then Selection.AutoFilter Field:=2, Criteria1:=RECHMOD.CBoxUM.Value
            If RECHMOD.CBoxType.Value <> "" Then Selection.AutoFilter Field:=3, Criteria1:=RECHMOD.CBoxType.Value
            If RECHMOD.CBoxMateriel.Value <> "" Then Selection.AutoFilter Field:=4, Criteria1:=RECHMOD.CBoxMateriel.Value
            If RECHMOD.CBoxNOrgane.Value <> "" Then Selection.AutoFilter Field:=5, Criteria1:=RECHMOD.CBoxNOrgane.Value
            If RECHMOD.CBoxTache.Value <> "" Then Selection.AutoFilter Field:=6, Criteria1:=RECHMOD.CBoxTache.Value
            If RECHMOD.CBoxVersion.Value <> "" Then Selection.AutoFilter Field:=7, Criteria1:=RECHMOD.CBoxVersion.Value
            If RECHMOD.CBoxDocValide.Value = "Oui" Then Selection.AutoFilter Field:=31, Criteria1:="<>"
     
            Derlig = .Range("A" & .Rows.Count).End(xlUp).Row 'Défini la place de celulle et la derniere ligne d'une colonne
     
            For I = 2 To Derlig 'pour I de 1 à la dernière ligne
     
            'ajoute les données dans la listBox1
                If .Range("A" & I).EntireRow.Hidden = False Then 'si la cellule est visible alors faire les étapes suivante sinon end if
                        ListBox1.AddItem .Range("A" & I).Value
                        ListBox1.List(ListBox1.ListCount - 1, 1) = .Range("A" & I).Offset(0, 2) 'ajoute le type en colonne 1
                        ListBox1.List(ListBox1.ListCount - 1, 2) = .Range("A" & I).Offset(0, 3) 'ajoute le Materiel en colonne 2
                        ListBox1.List(ListBox1.ListCount - 1, 3) = .Range("A" & I).Offset(0, 4) 'ajoute le N° Organe en colonne 3
                        ListBox1.List(ListBox1.ListCount - 1, 4) = .Range("A" & I).Offset(0, 5) 'ajoute la tache en colonne 4
                        ListBox1.List(ListBox1.ListCount - 1, 5) = .Range("A" & I).Offset(0, 6) 'ajoute la Version en colonne 5
                        ListBox1.List(ListBox1.ListCount - 1, 6) = .Range("A" & I).Offset(0, 7) 'ajoute le Observation en colonne 6
                        ListBox1.List(ListBox1.ListCount - 1, 7) = .Range("A" & I).Offset(0, 8) 'ajoute le 1 ére Arrivé en colonne 7
                        ListBox1.List(ListBox1.ListCount - 1, 8) = .Range("A" & I).Offset(0, 30) 'ajoute le Validée le en colonne 8
                        ListBox1.List(ListBox1.ListCount - 1, 9) = .Range("A" & I).Offset(0, 31) 'ajoute le Départ en colonne 9
                End If
            Next I
            .ShowAllData
        End With 'fin du with
     
    'Filtre arrivé/départ 4
     
        Selection.AutoFilter Field:=32, Criteria1:=""
        Selection.AutoFilter Field:=21, Criteria1:="<>"
        Selection.AutoFilter Field:=24, Criteria1:=""
     
     
     
        With Sheets("Base de données") 'dans la feuille Base de données
     
            If RECHMOD.CBoxUM.Value <> "" Then Selection.AutoFilter Field:=2, Criteria1:=RECHMOD.CBoxUM.Value
            If RECHMOD.CBoxType.Value <> "" Then Selection.AutoFilter Field:=3, Criteria1:=RECHMOD.CBoxType.Value
            If RECHMOD.CBoxMateriel.Value <> "" Then Selection.AutoFilter Field:=4, Criteria1:=RECHMOD.CBoxMateriel.Value
            If RECHMOD.CBoxNOrgane.Value <> "" Then Selection.AutoFilter Field:=5, Criteria1:=RECHMOD.CBoxNOrgane.Value
            If RECHMOD.CBoxTache.Value <> "" Then Selection.AutoFilter Field:=6, Criteria1:=RECHMOD.CBoxTache.Value
            If RECHMOD.CBoxVersion.Value <> "" Then Selection.AutoFilter Field:=7, Criteria1:=RECHMOD.CBoxVersion.Value
            If RECHMOD.CBoxDocValide.Value = "Oui" Then Selection.AutoFilter Field:=31, Criteria1:="<>"
     
            Derlig = .Range("A" & .Rows.Count).End(xlUp).Row 'Défini la place de celulle et la derniere ligne d'une colonne
     
            For I = 2 To Derlig 'pour I de 1 à la dernière ligne
     
            'ajoute les données dans la listBox1
                If .Range("A" & I).EntireRow.Hidden = False Then 'si la cellule est visible alors faire les étapes suivante sinon end if
                        ListBox1.AddItem .Range("A" & I).Value
                        ListBox1.List(ListBox1.ListCount - 1, 1) = .Range("A" & I).Offset(0, 2) 'ajoute le type en colonne 1
                        ListBox1.List(ListBox1.ListCount - 1, 2) = .Range("A" & I).Offset(0, 3) 'ajoute le Materiel en colonne 2
                        ListBox1.List(ListBox1.ListCount - 1, 3) = .Range("A" & I).Offset(0, 4) 'ajoute le N° Organe en colonne 3
                        ListBox1.List(ListBox1.ListCount - 1, 4) = .Range("A" & I).Offset(0, 5) 'ajoute la tache en colonne 4
                        ListBox1.List(ListBox1.ListCount - 1, 5) = .Range("A" & I).Offset(0, 6) 'ajoute la Version en colonne 5
                        ListBox1.List(ListBox1.ListCount - 1, 6) = .Range("A" & I).Offset(0, 7) 'ajoute le Observation en colonne 6
                        ListBox1.List(ListBox1.ListCount - 1, 7) = .Range("A" & I).Offset(0, 8) 'ajoute le 1 ére Arrivé en colonne 7
                        ListBox1.List(ListBox1.ListCount - 1, 8) = .Range("A" & I).Offset(0, 30) 'ajoute le Validée le en colonne 8
                        ListBox1.List(ListBox1.ListCount - 1, 9) = .Range("A" & I).Offset(0, 31) 'ajoute le Départ en colonne 9
                End If
            Next I
            .ShowAllData
        End With 'fin du with
     
    'Filtre arrivé/départ 5
     
        Selection.AutoFilter Field:=32, Criteria1:=""
        Selection.AutoFilter Field:=25, Criteria1:="<>"
        Selection.AutoFilter Field:=28, Criteria1:=""
     
     
     
        With Sheets("Base de données") 'dans la feuille Base de données
              If RECHMOD.CBoxUM.Value <> "" Then Selection.AutoFilter Field:=2, Criteria1:=RECHMOD.CBoxUM.Value
            If RECHMOD.CBoxType.Value <> "" Then Selection.AutoFilter Field:=3, Criteria1:=RECHMOD.CBoxType.Value
            If RECHMOD.CBoxMateriel.Value <> "" Then Selection.AutoFilter Field:=4, Criteria1:=RECHMOD.CBoxMateriel.Value
            If RECHMOD.CBoxNOrgane.Value <> "" Then Selection.AutoFilter Field:=5, Criteria1:=RECHMOD.CBoxNOrgane.Value
            If RECHMOD.CBoxTache.Value <> "" Then Selection.AutoFilter Field:=6, Criteria1:=RECHMOD.CBoxTache.Value
            If RECHMOD.CBoxVersion.Value <> "" Then Selection.AutoFilter Field:=7, Criteria1:=RECHMOD.CBoxVersion.Value
            If RECHMOD.CBoxDocValide.Value = "Oui" Then Selection.AutoFilter Field:=31, Criteria1:="<>"
            Derlig = .Range("A" & .Rows.Count).End(xlUp).Row 'Défini la place de celulle et la derniere ligne d'une colonne
     
            For I = 2 To Derlig 'pour I de 1 à la dernière ligne
     
            'ajoute les données dans la listBox1
                If .Range("A" & I).EntireRow.Hidden = False Then 'si la cellule est visible alors faire les étapes suivante sinon end if
                        ListBox1.AddItem .Range("A" & I).Value
                        ListBox1.List(ListBox1.ListCount - 1, 1) = .Range("A" & I).Offset(0, 2) 'ajoute le type en colonne 1
                        ListBox1.List(ListBox1.ListCount - 1, 2) = .Range("A" & I).Offset(0, 3) 'ajoute le Materiel en colonne 2
                        ListBox1.List(ListBox1.ListCount - 1, 3) = .Range("A" & I).Offset(0, 4) 'ajoute le N° Organe en colonne 3
                        ListBox1.List(ListBox1.ListCount - 1, 4) = .Range("A" & I).Offset(0, 5) 'ajoute la tache en colonne 4
                        ListBox1.List(ListBox1.ListCount - 1, 5) = .Range("A" & I).Offset(0, 6) 'ajoute la Version en colonne 5
                        ListBox1.List(ListBox1.ListCount - 1, 6) = .Range("A" & I).Offset(0, 7) 'ajoute le Observation en colonne 6
                        ListBox1.List(ListBox1.ListCount - 1, 7) = .Range("A" & I).Offset(0, 8) 'ajoute le 1 ére Arrivé en colonne 7
                        ListBox1.List(ListBox1.ListCount - 1, 8) = .Range("A" & I).Offset(0, 30) 'ajoute le Validée le en colonne 8
                        ListBox1.List(ListBox1.ListCount - 1, 9) = .Range("A" & I).Offset(0, 31) 'ajoute le Départ en colonne 9
                End If
            Next I
            .ShowAllData
        End With 'fin du with
     
    Else
     
    With Sheets("Base de données") 'dans la feuille Base de données
     
            If RECHMOD.CBoxUM.Value <> "" Then Selection.AutoFilter Field:=2, Criteria1:=RECHMOD.CBoxUM.Value
            If RECHMOD.CBoxType.Value <> "" Then Selection.AutoFilter Field:=3, Criteria1:=RECHMOD.CBoxType.Value
            If RECHMOD.CBoxMateriel.Value <> "" Then Selection.AutoFilter Field:=4, Criteria1:=RECHMOD.CBoxMateriel.Value
            If RECHMOD.CBoxNOrgane.Value <> "" Then Selection.AutoFilter Field:=5, Criteria1:=RECHMOD.CBoxNOrgane.Value
            If RECHMOD.CBoxTache.Value <> "" Then Selection.AutoFilter Field:=6, Criteria1:=RECHMOD.CBoxTache.Value
            If RECHMOD.CBoxVersion.Value <> "" Then Selection.AutoFilter Field:=7, Criteria1:=RECHMOD.CBoxVersion.Value
            If RECHMOD.CBoxDocValide.Value = "Oui" Then Selection.AutoFilter Field:=31, Criteria1:="<>"
     
            Derlig = .Range("A" & .Rows.Count).End(xlUp).Row 'Défini la place de celulle et la derniere ligne d'une colonne
     
            For I = 2 To Derlig 'pour I de 1 à la dernière ligne
     
            'ajoute les données dans la listBox1
                If .Range("A" & I).EntireRow.Hidden = False Then 'si la cellule est visible alors faire les étapes suivante sinon end if
                        ListBox1.AddItem .Range("A" & I).Value
                        ListBox1.List(ListBox1.ListCount - 1, 1) = .Range("A" & I).Offset(0, 2) 'ajoute le type en colonne 1
                        ListBox1.List(ListBox1.ListCount - 1, 2) = .Range("A" & I).Offset(0, 3) 'ajoute le Materiel en colonne 2
                        ListBox1.List(ListBox1.ListCount - 1, 3) = .Range("A" & I).Offset(0, 4) 'ajoute le N° Organe en colonne 3
                        ListBox1.List(ListBox1.ListCount - 1, 4) = .Range("A" & I).Offset(0, 5) 'ajoute la tache en colonne 4
                        ListBox1.List(ListBox1.ListCount - 1, 5) = .Range("A" & I).Offset(0, 6) 'ajoute la Version en colonne 5
                        ListBox1.List(ListBox1.ListCount - 1, 6) = .Range("A" & I).Offset(0, 7) 'ajoute le Observation en colonne 6
                        ListBox1.List(ListBox1.ListCount - 1, 7) = .Range("A" & I).Offset(0, 8) 'ajoute le 1 ére Arrivé en colonne 7
                        ListBox1.List(ListBox1.ListCount - 1, 8) = .Range("A" & I).Offset(0, 30) 'ajoute le Validée le en colonne 8
                        ListBox1.List(ListBox1.ListCount - 1, 9) = .Range("A" & I).Offset(0, 31) 'ajoute le Départ en colonne 9
            End If
            Next I
     
        End With 'fin du with
    End If
    With Sheets("Base de données") 'dans la feuille Base de données
     
    I = 1
      'ajoute les données dans la listBox2 titre listbox1
           If .Range("A" & I).EntireRow.Hidden = False Then 'si la cellule est visible alors faire les étapes suivante sinon end if
                ListBox2.AddItem .Range("A" & I).Value
                ListBox2.List(ListBox2.ListCount - 1, 1) = .Range("A" & I).Offset(0, 2) 'ajoute le type en colonne 1
                ListBox2.List(ListBox2.ListCount - 1, 2) = .Range("A" & I).Offset(0, 3) 'ajoute le Materiel en colonne 2
                ListBox2.List(ListBox2.ListCount - 1, 3) = .Range("A" & I).Offset(0, 4) 'ajoute le N° Organe en colonne 3
                ListBox2.List(ListBox2.ListCount - 1, 4) = .Range("A" & I).Offset(0, 5) 'ajoute la tache en colonne 4
                ListBox2.List(ListBox2.ListCount - 1, 5) = .Range("A" & I).Offset(0, 6) 'ajoute la Version en colonne 5
                ListBox2.List(ListBox2.ListCount - 1, 6) = .Range("A" & I).Offset(0, 7) 'ajoute le Observation en colonne 6
                ListBox2.List(ListBox2.ListCount - 1, 7) = .Range("A" & I).Offset(0, 8) 'ajoute le 1 ére Arrivé en colonne 7
                ListBox2.List(ListBox2.ListCount - 1, 8) = .Range("A" & I).Offset(0, 30) 'ajoute le Validée le en colonne 8
                ListBox2.List(ListBox2.ListCount - 1, 9) = .Range("A" & I).Offset(0, 31) 'ajoute le Départ en colonne 9
           End If
    .ShowAllData
    End With 'fin du with
     
    'trie par ordre alphabétique le N° FTS
     ActiveWorkbook.Worksheets("Base de données").AutoFilter.Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Base de données").AutoFilter.Sort.SortFields.Add _
            Key:=Range("A1:A1048576"), SortOn:=xlSortOnValues, Order:=xlAscending, _
            DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Base de données").AutoFilter.Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    ListBox2.Enabled = False
    N = ListBox1.ListCount
    TextBoxNfiche.Value = N
    RECHMOD.Hide
     
    End Sub
    Afin d'améliorer la lecture et de simplifier les choses j'ai simplifier les répétitions dans le code voici le nouveau 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
    Private Sub UserForm_Initialize()
    Dim N As Integer
    Dim I As Long
    ListBox1.ColumnCount = 10 'nombre de colonnes la colonne 9 contient le numéro de ligne
    ListBox1.ColumnWidths = "0;65;40;50;45;35;225;55;55;55" 'largeur des colonnes
    ListBox1.TextAlign = fmTextAlignCenter ' centre le texte dans la listbox
    ListBox2.ColumnCount = 10 'nombre de colonnes la colonne 9 contient le numéro de ligne
    ListBox2.ColumnWidths = "0;65;40;50;45;35;225;55;55;55" 'largeur des colonnes
    ListBox2.TextAlign = fmTextAlignCenter ' centre le texte dans la listbox
     
    'trie par ordre alphabétique le N° FTS
     ActiveWorkbook.Worksheets("Base de données").AutoFilter.Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Base de données").AutoFilter.Sort.SortFields.Add _
            Key:=Range("E1:E1048576"), SortOn:=xlSortOnValues, Order:=xlAscending, _
            DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Base de données").AutoFilter.Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
     
     Me.ListBox1.MultiSelect = fmMultiSelectSingle
    If RECHMOD.CheckBox1 = True Then
     
        'Filtre arrivé/départ 1
        Call triarriv1
        Call filtreadditem
     
        'Filtre arrivé/départ 2
        Call triarriv2
        Call filtreadditem
     
        'Filtre arrivé/départ 3
        Call triarriv3
        Call filtreadditem
     
        'Filtre arrivé/départ 4
        Call triarriv4
        Call filtreadditem
     
        'Filtre arrivé/départ 5
        Call triarriv5
        Call filtreadditem
     
    Else
        'Filtre tous
        Call filtreadditem
    End If
     
    With Sheets("Base de données") 'dans la feuille Base de données
     
    I = 1
      'ajoute les données dans la listBox2 titre listbox1
           If .Range("A" & I).EntireRow.Hidden = False Then 'si la cellule est visible alors faire les étapes suivante sinon end if
                ListBox2.AddItem .Range("A" & I).Value
                ListBox2.List(ListBox2.ListCount - 1, 1) = .Range("A" & I).Offset(0, 2) 'ajoute le type en colonne 1
                ListBox2.List(ListBox2.ListCount - 1, 2) = .Range("A" & I).Offset(0, 3) 'ajoute le Materiel en colonne 2
                ListBox2.List(ListBox2.ListCount - 1, 3) = .Range("A" & I).Offset(0, 4) 'ajoute le N° Organe en colonne 3
                ListBox2.List(ListBox2.ListCount - 1, 4) = .Range("A" & I).Offset(0, 5) 'ajoute la tache en colonne 4
                ListBox2.List(ListBox2.ListCount - 1, 5) = .Range("A" & I).Offset(0, 6) 'ajoute la Version en colonne 5
                ListBox2.List(ListBox2.ListCount - 1, 6) = .Range("A" & I).Offset(0, 7) 'ajoute le Observation en colonne 6
                ListBox2.List(ListBox2.ListCount - 1, 7) = .Range("A" & I).Offset(0, 8) 'ajoute le 1 ére Arrivé en colonne 7
                ListBox2.List(ListBox2.ListCount - 1, 8) = .Range("A" & I).Offset(0, 30) 'ajoute le Validée le en colonne 8
                ListBox2.List(ListBox2.ListCount - 1, 9) = .Range("A" & I).Offset(0, 31) 'ajoute le Départ en colonne 9
           End If
    End With 'fin du with
     
    'trie par ordre alphabétique le N° FTS
     ActiveWorkbook.Worksheets("Base de données").AutoFilter.Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Base de données").AutoFilter.Sort.SortFields.Add _
            Key:=Range("A1:A1048576"), SortOn:=xlSortOnValues, Order:=xlAscending, _
            DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Base de données").AutoFilter.Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    ListBox2.Enabled = False
    N = ListBox1.ListCount
    TextBoxNfiche.Value = N
    RECHMOD.Hide
     
    End Sub
     
    Private Sub UserForm_Click()
     
    End Sub
     
    Sub triarriv1()
    Selection.AutoFilter Field:=32, Criteria1:=""
        Selection.AutoFilter Field:=9, Criteria1:="<>"
        Selection.AutoFilter Field:=12, Criteria1:=""
    End Sub
    Sub triarriv2()
    Selection.AutoFilter Field:=32, Criteria1:=""
        Selection.AutoFilter Field:=13, Criteria1:="<>"
        Selection.AutoFilter Field:=16, Criteria1:=""
    End Sub
    Sub triarriv3()
        Selection.AutoFilter Field:=32, Criteria1:=""
        Selection.AutoFilter Field:=17, Criteria1:="<>"
        Selection.AutoFilter Field:=20, Criteria1:=""
    End Sub
    Sub triarriv4()
    Selection.AutoFilter Field:=32, Criteria1:=""
        Selection.AutoFilter Field:=21, Criteria1:="<>"
        Selection.AutoFilter Field:=24, Criteria1:=""
    End Sub
    Sub triarriv5()
       Selection.AutoFilter Field:=32, Criteria1:=""
        Selection.AutoFilter Field:=25, Criteria1:="<>"
        Selection.AutoFilter Field:=28, Criteria1:=""
    End Sub
     
    Sub filtreadditem()
       With Sheets("Base de données") 'dans la feuille Base de données
              If RECHMOD.CBoxUM.Value <> "" Then Selection.AutoFilter Field:=2, Criteria1:=RECHMOD.CBoxUM.Value
            If RECHMOD.CBoxType.Value <> "" Then Selection.AutoFilter Field:=3, Criteria1:=RECHMOD.CBoxType.Value
            If RECHMOD.CBoxMateriel.Value <> "" Then Selection.AutoFilter Field:=4, Criteria1:=RECHMOD.CBoxMateriel.Value
            If RECHMOD.CBoxNOrgane.Value <> "" Then Selection.AutoFilter Field:=5, Criteria1:=RECHMOD.CBoxNOrgane.Value
            If RECHMOD.CBoxTache.Value <> "" Then Selection.AutoFilter Field:=6, Criteria1:=RECHMOD.CBoxTache.Value
            If RECHMOD.CBoxVersion.Value <> "" Then Selection.AutoFilter Field:=7, Criteria1:=RECHMOD.CBoxVersion.Value
            If RECHMOD.CBoxDocValide.Value = "Oui" Then Selection.AutoFilter Field:=31, Criteria1:="<>"
            Derlig = .Range("A" & .Rows.Count).End(xlUp).Row 'Défini la place de celulle et la derniere ligne d'une colonne
     
            For I = 2 To Derlig 'pour I de 1 à la dernière ligne
     
            'ajoute les données dans la listBox1
                If .Range("A" & I).EntireRow.Hidden = False Then 'si la cellule est visible alors faire les étapes suivante sinon end if
                        ListBox1.AddItem .Range("A" & I).Value
                        ListBox1.List(ListBox1.ListCount - 1, 1) = .Range("A" & I).Offset(0, 2) 'ajoute le type en colonne 1
                        ListBox1.List(ListBox1.ListCount - 1, 2) = .Range("A" & I).Offset(0, 3) 'ajoute le Materiel en colonne 2
                        ListBox1.List(ListBox1.ListCount - 1, 3) = .Range("A" & I).Offset(0, 4) 'ajoute le N° Organe en colonne 3
                        ListBox1.List(ListBox1.ListCount - 1, 4) = .Range("A" & I).Offset(0, 5) 'ajoute la tache en colonne 4
                        ListBox1.List(ListBox1.ListCount - 1, 5) = .Range("A" & I).Offset(0, 6) 'ajoute la Version en colonne 5
                        ListBox1.List(ListBox1.ListCount - 1, 6) = .Range("A" & I).Offset(0, 7) 'ajoute le Observation en colonne 6
                        ListBox1.List(ListBox1.ListCount - 1, 7) = .Range("A" & I).Offset(0, 8) 'ajoute le 1 ére Arrivé en colonne 7
                        ListBox1.List(ListBox1.ListCount - 1, 8) = .Range("A" & I).Offset(0, 30) 'ajoute le Validée le en colonne 8
                        ListBox1.List(ListBox1.ListCount - 1, 9) = .Range("A" & I).Offset(0, 31) 'ajoute le Départ en colonne 9
                End If
            Next I
            .ShowAllData
        End With 'fin du with
    End Sub
    Je reste à votre disposition pour des conseils de méthode concernant l'optimisation du temps d'exécution d'une macro.
    Cordialement,
    Passepartout007

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    février 2007
    Messages
    1 554
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2007
    Messages : 1 554
    Points : 2 493
    Points
    2 493

    Par défaut

    Bonjour,

    tu lis tes cellules une par une, c'est très lent.
    Lit ta plage en un bloc dans une variable tableau, et après tu pioches dedans.
    Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim datas
    datas = Sheets("machin").[A2].Resize(derlig - 1, 30).Value
    For i = 1 To UBound(datas)
        ListBox1.List(ListBox1.ListCount - 1, 1) = datas(i, 2)
        ' etc
    Next i
    eric

  3. #3
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    avril 2002
    Messages
    3 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : avril 2002
    Messages : 3 232
    Points : 7 335
    Points
    7 335

    Par défaut

    Salut

    Pour le début

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    '## Thisworkbook plutôt que activeworkbook
    With ThisWorkbook.Worksheets("Base de données")
        .AutoFilter.Sort.SortFields.Clear
        .AutoFilter.Sort.SortFields.Add .Range("E1", .Cells(.Rows.Count, "E").End(xlUp)), xlSortOnValues, xlAscending, DataOption:=xlSortNormal
        With .AutoFilter.Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End With
    Pour la suite, en plus du très judicieux conseil d'eriiic, il faut retravailler ton code.


    • Il faut supprimer tout ces Selection. qu'il y a partout et les remplacer par ce à quoi il correspond.
    • Ensuite les 4 blocs de code qui se suivent sont quasi totalement identique, il faut que tu fasses une boucle avec à chaque boucle juste modifier les tris, toute la partie écriture dans le listbox est identique.
    • Faire des boucle pour le remplissage de tes colonne de listbox.


    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP - Dernier et Seul Tutoriel : VBA & Internet Explorer
    L'utilisation de l’éditeur de message

  4. #4
    Membre du Club
    Homme Profil pro
    Ingénieur maintenance industriel
    Inscrit en
    juin 2018
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur maintenance industriel
    Secteur : Transports

    Informations forums :
    Inscription : juin 2018
    Messages : 75
    Points : 42
    Points
    42

    Par défaut RE: Essaye des méthodes

    Bonjour eriiic,

    J'ai essayer d'incrémenter ta méthode à mon code mais je ne suis apparemment pas assez douer pour le comprendre. Effectivement quand je l'intègre cela mélange les lignes entre elle, il y a donc un mélange de ligne.

    voici le 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
    Sub filtreadditem()
    Dim datas
       With Sheets("Base de données") 'dans la feuille Base de données
              If RECHMOD.CBoxUM.Value <> "" Then Selection.AutoFilter Field:=2, Criteria1:=RECHMOD.CBoxUM.Value
            If RECHMOD.CBoxType.Value <> "" Then Selection.AutoFilter Field:=3, Criteria1:=RECHMOD.CBoxType.Value
            If RECHMOD.CBoxMateriel.Value <> "" Then Selection.AutoFilter Field:=4, Criteria1:=RECHMOD.CBoxMateriel.Value
            If RECHMOD.CBoxNOrgane.Value <> "" Then Selection.AutoFilter Field:=5, Criteria1:=RECHMOD.CBoxNOrgane.Value
            If RECHMOD.CBoxTache.Value <> "" Then Selection.AutoFilter Field:=6, Criteria1:=RECHMOD.CBoxTache.Value
            If RECHMOD.CBoxVersion.Value <> "" Then Selection.AutoFilter Field:=7, Criteria1:=RECHMOD.CBoxVersion.Value
            If RECHMOD.CBoxDocValide.Value = "Oui" Then Selection.AutoFilter Field:=31, Criteria1:="<>"
            derlig = .Range("A" & .Rows.Count).End(xlUp).Row 'Défini la place de celulle et la derniere ligne d'une colonne
     
            datas = Sheets("Base de données").[A2].Resize(derlig - 1, 31).Value
            For I = 1 To UBound(datas) 'pour I de 1 à la dernière ligne
     
            'ajoute les données dans la listBox1
     
     
                If .Range("A" & I).EntireRow.Hidden = False Then 'si la cellule est visible alors faire les étapes suivante sinon end if
     
                        ListBox1.AddItem .Range("A" & I).Value
                         ListBox1.List(ListBox1.ListCount - 1, 0) = datas(I, 1)
                        ListBox1.List(ListBox1.ListCount - 1, 1) = datas(I, 2)
                        ListBox1.List(ListBox1.ListCount - 1, 2) = datas(I, 3)
                        ListBox1.List(ListBox1.ListCount - 1, 3) = datas(I, 4)
                        ListBox1.List(ListBox1.ListCount - 1, 4) = datas(I, 5)
                        ListBox1.List(ListBox1.ListCount - 1, 5) = datas(I, 6)
                        ListBox1.List(ListBox1.ListCount - 1, 6) = datas(I, 7)
                        ListBox1.List(ListBox1.ListCount - 1, 7) = datas(I, 8)
                        ListBox1.List(ListBox1.ListCount - 1, 8) = datas(I, 30)
                        ListBox1.List(ListBox1.ListCount - 1, 9) = datas(I, 31)
     
                End If
            Next I
            .ShowAllData
        End With 'fin du with
    End Sub
    Je ne comprend pas ce qui ce passe, de plus la macro reste lente j'ai donc un problème de sélect.

    Bonjour a toi qwazerty, je comprend que tes filtres se font avec la fonction.Sort au lieux d'un sélect, pense tu que cela influe beaucoup la fluidité de ma macro ?
    Je ne comprend pas ton code ou ce que tu à écrit, je l'ai moi même dans mon code mais c'est une récup d'une autre discutions.
    Pourrais tu me commenté quelque ligne (si ce n'est pas trop de boulot pour toi bien sur).

    Je tiens quand même à vous remercier pour votre aide et m'avoir apporter des pistes d'améliorations.
    Cordialement,
    Passepartout007

  5. #5
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    avril 2002
    Messages
    3 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : avril 2002
    Messages : 3 232
    Points : 7 335
    Points
    7 335

    Par défaut

    Salut

    Mon code n'avais pas pour but d'accélérer ta macro mais de t'éviter de futurs éventuels problèmes.

    Pour améliorer le vélocité de ta macro, il te faut faire comme à dit eriiic et utiliser un tableau interne. Par contre pour travailler comme ça, tu ne pourra plus utiliser les filtre auto, il te faudra boucler sur le contenu du tableau interne et déterminer à chaque ligne si celles-ci doivent ou non apparaitre dans ListBox1.

    Si rien de confidentiel, peux-tu partager un fichier?

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP - Dernier et Seul Tutoriel : VBA & Internet Explorer
    L'utilisation de l’éditeur de message

  6. #6
    Membre du Club
    Homme Profil pro
    Ingénieur maintenance industriel
    Inscrit en
    juin 2018
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur maintenance industriel
    Secteur : Transports

    Informations forums :
    Inscription : juin 2018
    Messages : 75
    Points : 42
    Points
    42

    Par défaut Re

    Bonjour,

    Malheureusement je ne peux pas divulguer le fichier.
    Cependant je peux t'expliquer comment cela fonctionne.
    Dans une feuille Excel il y a la base de données ou l'on retrouve des données de la colonne A à BY il y a environs plus de 5000 ligne dans cette page.
    Les ligne les plus intéressent sont:
    - Colonne A, le n° de fiche ,
    - Colonne B, UM ( non des service),
    - Colonne C, le type (de fiche),
    - Colonne D, le Matériel,
    - Colonne E, le N°:d'organe,
    - Colonne F, La tache,
    - Colonne G, la Version (de la fiche),
    - Colonne H, l'observation,

    De la colonne I à la Colonne AB pour i = 1 à 5
    - Colonne I, i ere arrivé (date),
    - Colonne J, Acteur i,
    - Colonne K, Contrôleur i,
    - Colonne L, i er départ
    Puis
    - Colonne AE signature,
    - Colonne AF Départ.

    Je créer donc un userform pour ajouter modifier et supprimé des données de cette base de données.

    Dans un Userform appeler RECHMOD voir visuel :

    Nom : Image8.PNG
Affichages : 66
Taille : 25,1 Ko

    J'indique les différents paramètres Um, Type, ETC
    Si je coche En cours de validation cela signifie que la fiche est arrivé (colonne I, M, Q, U, Y) et que la fiche n'est pas partie en associer avec l'arrivé (L, P, T, X,AB) et que le départ final n'as pas été fais colonne AF.

    Si je coche Doc Validé alors il m'indique tout les docs ou dans la colonne AE on retrouve une value différent de "".
    Si on coche entre deux dates alors la list doit afficher que les fiche validé entre ses deux dates. colonne AE.

    Dans l'ensemble j'ai pas mal de critère et j'incrémente donc la liste box suivant l'intégralité de ses critère en en faisans des filtres dans le classeur excel et en incrémentant que les cellules visible.

    Visuel de l'userform AfficheRecherche :
    Nom : Image9.PNG
Affichages : 66
Taille : 27,2 Ko


    Tu me propose de créer une base de données externes qui incrémentera la listbox en choisissant les différente ligne par lui même, cela me permettra sans doute de réduire le temps d'exécution cependant sans les filtre je ne sais pas faire ca. Peux tu m'aider sur ce point.
    Je peux tout de même fournir un fichier vierge avec juste les userforms concerner mais sans la base de données la plus part des macro de combobox ne fonctionne pas.

    Je reste a votre disposition pour tout complément d'information.
    Pour les noms des combobox je vous en laisse le choix, mon but est de comprendre comment cela fonctionne afin que je puisse le reproduire dans mon fichier.
    Je rappel que je suis Débutant en VBA j'ai commencer a codé avec se formulaire, je vous demande d'être indulgent sur la qualité du codage.

    Cordialement,
    Passepartout007

  7. #7
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    avril 2002
    Messages
    3 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : avril 2002
    Messages : 3 232
    Points : 7 335
    Points
    7 335

    Par défaut

    Salut

    Peux-tu fournir ton fichier Excel avec en plus des UserForm au moins les entêtes de ta base de donnée

    Autre question, peux-tu transformer ta base de donnée en tableau structuré? (Menu Insertion, Tableau)

    Lorsque je regarde ton code, je pense lire qu'il fait 4 ou 5 tri les uns à la suite des autres et qu'il place l'intégralité des contenu de chaque tri, c'est bien ça?
    Ne cherches-tu pas plutôt à afficher les résultat qui correspondent à l'ensemble de tes critères?
    En gros ton code fait un "critère1 OU critère2 OU critère3" ne faudrait-il pas faire "Critère 1 ET Critère2 ET Critère3" ?

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP - Dernier et Seul Tutoriel : VBA & Internet Explorer
    L'utilisation de l’éditeur de message

  8. #8
    Membre du Club
    Homme Profil pro
    Ingénieur maintenance industriel
    Inscrit en
    juin 2018
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur maintenance industriel
    Secteur : Transports

    Informations forums :
    Inscription : juin 2018
    Messages : 75
    Points : 42
    Points
    42

    Par défaut Re

    Bonjour,

    Tu retrouvera le fichier vierge en page d'acceuil avec L'userform (Acceuil, RECHMOD, AffichRecheche)

    Formulaire_vierge.xlsm


    Bonjour, Effectivement je peux transformer mon tableau en tableau structuré mais ma base de données doit revenir à l'affichage initial en triant par numéro de fiche. (J'avais déjà tester cette utilisation, mais je n'avais pas réussi).

    Effectivement j'effectue plusieurs tri les uns a la suite des autres, cela n'efface pas les anciens tris et donc c'est biens un Critère 1 et un critère 2 et un critère 3.
    Effectivement c'est un résultat correspondant a l'ensemble des critères. Je t'assure que mon code initiale prend bien en compte l'ensemble des critères. Cependant l'affichage sur la liste box n'est quand à lui pas trié joliment.

    Si tu as des propositions concernant mon code, n'hésite pas. je voudrais également afficher la listebox en triant par N°d'organe?

    Je reste disponible pour tout renseignement complémentaire.
    Cordialement,
    Passepartout007

  9. #9
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    avril 2002
    Messages
    3 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : avril 2002
    Messages : 3 232
    Points : 7 335
    Points
    7 335

    Par défaut

    Salut

    Je regarde quand j'ai un moment.

    De ton coté je pense que cette discussion peut t'intéresser. Le fichier fourni contient une fonction de recherche.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP - Dernier et Seul Tutoriel : VBA & Internet Explorer
    L'utilisation de l’éditeur de message

  10. #10
    Membre du Club
    Homme Profil pro
    Ingénieur maintenance industriel
    Inscrit en
    juin 2018
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur maintenance industriel
    Secteur : Transports

    Informations forums :
    Inscription : juin 2018
    Messages : 75
    Points : 42
    Points
    42

    Par défaut Re

    Bonjour,

    Je te remercie je regarde cela de suite.

    Cordialement,
    Passeaprtout007

  11. #11
    Membre du Club
    Homme Profil pro
    Ingénieur maintenance industriel
    Inscrit en
    juin 2018
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur maintenance industriel
    Secteur : Transports

    Informations forums :
    Inscription : juin 2018
    Messages : 75
    Points : 42
    Points
    42

    Par défaut Re

    Bonjour,
    Qwazerty, j'ai pris le temps de regarder le codage du fichier de l'autre discutions, malheureusement je n'ais pas tout compris et n'est pas réussi mettre en application les macro qui m'intéressais, j'attend avec impatience ton retour et j'espère comprendre ce qui va en ressortir.

    Je suis disposé à toute autre solution proposé pas d'autre membre du forum. Je reste a disposition pour fournir des informations.Si vous n'avez pas le temps de m'aidez, n'hésité pas a m'envoyer sur d'autre piste cela me faire le plus grand plaisir.

    Merci encore,
    Passepartout007

  12. #12
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    avril 2002
    Messages
    3 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : avril 2002
    Messages : 3 232
    Points : 7 335
    Points
    7 335

    Par défaut

    Salut

    Je ne pourrais pas prendre le temps, il faudrait à mon avis repenser l'ensemble pour faire quelque chose de vraiment cohérent (sans jugement de valeur, je ne suis pas en train de te faire un procès, il est difficile d'organiser sont code et ses UserForm, d'autant plus quand on débute).

    Tu trouveras quand même quelques modifications dans le fichier joint. Faute de données, je n'ai pas pu faire de tests, j'espère que les modifications fonctionneront et te permettront de simplifier ton code. Logiquement les filtrations ont été simplifiées, ce qui, je l'espère, devrait accélérer un peu l'exécution du code.
    La gestion du screenupdating devrait également aider dans ce sens.

    Je pense avoir repérer un coquille sur le code ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        ElseIf .List(.ListIndex, 1) = "FTA" Then 'Sinon Si la deuxième colonne égale FTA alors
            FTSConsult.TextBoxNfiche.Value = Numero ' Le TextBoxNfiche de la page FTSConsult prend la valeur de la colonne 1
            AffichRecherche.Hide ' Réduit la fenêtre Affiche Recherche
    '##Erreur de UserForm ? FTAConsult
            FTSConsult.Show
            Exit Sub
    Un conseil, partout où tu utilises ActiveWorkbook, mets plutôt ThisWorkBook, ça t'évitera des déconvenues.

    Tu pourrais aussi utiliser un listview à la place du listbox1 ce qui te permettrait de faire tes tris plus facilement.
    Voila un tutoriel pour t'aider dans cette démarche si tu le souhaites.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP - Dernier et Seul Tutoriel : VBA & Internet Explorer
    L'utilisation de l’éditeur de message

  13. #13
    Membre du Club
    Homme Profil pro
    Ingénieur maintenance industriel
    Inscrit en
    juin 2018
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur maintenance industriel
    Secteur : Transports

    Informations forums :
    Inscription : juin 2018
    Messages : 75
    Points : 42
    Points
    42

    Par défaut Re : Merci pour ton aide

    Bonjour,

    Je comprend très bien ton manque de temps, et merci de m'avoir accorder déjà autant de temps.
    Dans l' ensemble je comprend ton code je le testerais demain pas à pas afin de vérifier que tout cela fonctionne.
    J'ai pris en compte tes commentaire concernant mon code merci d'avoir pris le temps de commenter ce que tu fessais.
    Je reviens vers toi pour toutes autres questions.
    La coquille que tu a repérées n'en est pas une, le FTA fais bien appel à FTSConsult.

    Je prend note pour le thisworkbook, merci du conseil.

    J'ai vu que tu a créé un tableau nommé "Tab_Base", qui est défini par une plage. Cette plage à l'ajout de ligne et suppression de ligne se met telle à jours automatiquement oui doit telle etre modifier a chaque fois ?
    J'ai un userform qui me copie des données de textbox a la suite du tableau. Seront t'elles prises en comptes dans le tableau nommé ?

    Merci de m'ouvrir les possibilités avec les listview je vais regarder ce que c'est et peux être m'en inspiré.

    Cordialement,
    Passepartout007

  14. #14
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    avril 2002
    Messages
    3 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : avril 2002
    Messages : 3 232
    Points : 7 335
    Points
    7 335

    Par défaut

    Salut

    Pour le tableau c'est un tableau structuré, il se cré simplement en allant dans le menu Insertion, Tableau. En effet celui-ci s'étend automatiquement lorsqu'on ajoute des données à la suite, il n'y a donc rien a faire pour étendre sa zone.
    Les tableaux structures offrent pas mal d'avantage dans le code, surtout lorsqu'il s'agit depointer une colonne par son nom ou bien encore d'ajouter ou supprimer des ligne.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP - Dernier et Seul Tutoriel : VBA & Internet Explorer
    L'utilisation de l’éditeur de message

  15. #15
    Membre du Club
    Homme Profil pro
    Ingénieur maintenance industriel
    Inscrit en
    juin 2018
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur maintenance industriel
    Secteur : Transports

    Informations forums :
    Inscription : juin 2018
    Messages : 75
    Points : 42
    Points
    42

    Par défaut re : Quelque petite erreurs

    bonjour,
    En utilisant ce code j'ai des message d'erreur en retour :
    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
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
     
     
    Private Sub CommandButton2_Click() ' Au clic sur le bouton
    Unload AffichRecherche 'Ferme AfficheRecherche
    RECHMOD.Show 'Affiche RECHMOD
    End Sub
     
     
     
     
     
     
    'Macro validation de la recherche
    Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) ' au double clic sur la lisbox1
    'Déclaration de variable
     
    Dim DOS As String
    Dim I As Long
    With ListBox1 'avec listbox 1
    N = TextBoxNfiche.Value
       For I = 0 To N 'Pour I de 1 à 9
     
    If ListBox1.Selected(I) = True Then 'Si Lisbox1 selectionnée est vrai
    Numero = .List(.ListIndex, 0) 'Numéro prend la valeur de la premiere colonne
    DOS = .List(.ListIndex, 1) ' Dos prend la valeur de la deuxieme colonne
     
        If .List(.ListIndex, 1) = "FTS" Then ' Si la deuxième colonne égale FTS alors
            FTSConsult.TextBoxNfiche.Value = Numero ' Le TextBoxNfiche de la page FTSConsult prend la valeur de la colonne 1
            AffichRecherche.Hide ' Réduit la fenêtre Affiche Recherche
            FTSConsult.Show ' Ouvre FTSConsult
            Exit Sub
     
        ElseIf .List(.ListIndex, 1) = "FTA" Then 'Sinon Si la deuxième colonne égale FTA alors
            FTSConsult.TextBoxNfiche.Value = Numero ' Le TextBoxNfiche de la page FTSConsult prend la valeur de la colonne 1
            AffichRecherche.Hide ' Réduit la fenêtre Affiche Recherche
    '##Erreur de UserForm
            FTSConsult.Show
            Exit Sub
     
     
        ElseIf .List(.ListIndex, 1) = "IT" Then 'Sinon Si la deuxième colonne égale IT alors
            ITConsult.TextBoxNfiche.Value = Numero ' Le TextBoxNfiche de la page ITConsult prend la valeur de la colonne 1
            AffichRecherche.Hide ' Réduit la fenêtre Affiche Recherche
            ITConsult.Show ' Ouvre ITConsult
            Exit Sub
     
     
        ElseIf InStr(1, .List(.ListIndex, 1), "DOS") <> 0 Then 'Sinon Si la deuxième colonne contient DOS dans sa celulle alors
            dosConsult.TextBoxNfiche.Value = Numero ' Le TextBoxNfiche de la page DOSConsult prend la valeur de la colonne 1
            AffichRecherche.Hide ' Réduit la fenêtre Affiche Recherche
            dosConsult.Show ' Ouvre DOSConsult
            Exit Sub
     
        End If
    End If
    Next I
    End With
    End Sub
    'Fin macro validation de la recherche
     
    Private Sub NVRECH_Click()
    Unload RECHMOD 'Ferme RECMOD
    Unload AffichRecherche 'Ferme AffichRecherche
    RECHMOD.Show ' Ouvre RECMOD
    End Sub
     
     
     
    Private Sub UserForm_Initialize()
    Dim N As Integer
    Dim I As Long
    Dim iRang As Byte
     
    ' Fait directement en mode édition dans les proprièté des listbox
    '    ListBox1.ColumnCount = 10 'nombre de colonnes la colonne 9 contient le numéro de ligne
    '    ListBox1.ColumnWidths = "0;65;40;50;45;35;225;55;55;55" 'largeur des colonnes
    '    ListBox1.TextAlign = fmTextAlignCenter ' centre le texte dans la listbox
    '    ListBox2.ColumnCount = 10 'nombre de colonnes la colonne 9 contient le numéro de ligne
    '    ListBox2.ColumnWidths = "0;65;40;50;45;35;225;55;55;55" 'largeur des colonnes
    '    ListBox2.TextAlign = fmTextAlignCenter ' centre le texte dans la listbox
     
        'On vide les listbox
        ListBox1.Clear
        ListBox2.Clear
     
     
        'trie par ordre alphabétique le N° FTS
        With F_BD.ListObjects("Tab_Base")
            'On vérifie que le tableau comporte des entrées sinon on quitte
            If .ListRows.Count = 0 Then Exit Sub
            With .DataBodyRange.AutoFilter.Sort
                .SortFields.Clear
                .SortFields.Add .Cells, xlSortOnValues, xlAscending, DataOption:=xlSortNormal
                .Header = xlYes
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
        End With
     
     
    'Me.ListBox1.MultiSelect = fmMultiSelectSingle 'Autant le paramètrer directement dans les propriété du ListBox en mode édition (ce qui était déjà fait)
     
        'On bloc la mise à jour de l'affichage
        Application.ScreenUpdating = False
     
        With F_BD.ListObjects("Tab_Base")
            'On procéde au filtrage de base
            If RECHMOD.CheckBox2.Value Then Macro2Date
            If RECHMOD.CBoxUM.Value <> "" Then .DataBodyRange.AutoFilter Field:=2, Criteria1:=RECHMOD.CBoxUM.Value
            If RECHMOD.CBoxType.Value <> "" Then .DataBodyRange.AutoFilter Field:=3, Criteria1:=RECHMOD.CBoxType.Value
            If RECHMOD.CBoxMateriel.Value <> "" Then .DataBodyRange.AutoFilter Field:=4, Criteria1:=RECHMOD.CBoxMateriel.Value
            If RECHMOD.CBoxNOrgane.Value <> "" Then .DataBodyRange.AutoFilter Field:=5, Criteria1:=RECHMOD.CBoxNOrgane.Value
            If RECHMOD.CBoxTache.Value <> "" Then .DataBodyRange.AutoFilter Field:=6, Criteria1:=RECHMOD.CBoxTache.Value
            If RECHMOD.CBoxVersion.Value <> "" Then .DataBodyRange.AutoFilter Field:=7, Criteria1:=RECHMOD.CBoxVersion.Value
            If RECHMOD.CBoxDocValide.Value = "Oui" Then .DataBodyRange.AutoFilter Field:=31, Criteria1:="<>"
     
            If RECHMOD.CheckBox1 Then
                .DataBodyRange.AutoFilter Field:=.ListColumns("Départ").Index, Criteria1:="" 'Départ vide
                'On boucle sur les champs "numéraires"
                For iRang = 1 To 5
                    'Ensuite on ajoute les filtres temporaires
                    .DataBodyRange.AutoFilter Field:=.ListColumns(CStr(iRang) & "ère arrivée").Index, Criteria1:="<>" '1ère arrivée non vide
                    .DataBodyRange.AutoFilter Field:=.ListColumns(CStr(iRang) & "er départ").Index, Criteria1:="" ' 1er départ vide
     
                    'On ajoute à la liste
                    AddItemList ListBox1, iRang
     
                    'On retire les filtres sur arrivée et départ
                    .DataBodyRange.AutoFilter Field:=.ListColumns(CStr(iRang) & "ère arrivée").Index, Criteria1:="*" '1ère arrivée non vide
                    .DataBodyRange.AutoFilter Field:=.ListColumns(CStr(iRang) & "er départ").Index, Criteria1:="*" ' 1er départ vide
                Next
            Else
                'On place uniquement les info concerant "1ère arrivée" et "1er départ"
                AddItemList ListBox1
            End If
        End With
     
     
    'Je ne comprends pas la suite, I n'évoluant pas, pourquoi ne pas simplement mettre "A1"?
    'Le but est de copier uniquement la 1ère ligne si elle est visible dans le listbox2 ?
     
    With Sheets("Base de données") 'dans la feuille Base de données
     
    I = 1
      'ajoute les données dans la listBox2 titre listbox1
           If .Range("A" & I).EntireRow.Hidden = False Then 'si la cellule est visible alors faire les étapes suivante sinon end if
                ListBox2.AddItem .Range("A" & I).Value
                ListBox2.List(ListBox2.ListCount - 1, 1) = .Range("A" & I).Offset(0, 2) 'ajoute le type en colonne 1
                ListBox2.List(ListBox2.ListCount - 1, 2) = .Range("A" & I).Offset(0, 3) 'ajoute le Materiel en colonne 2
                ListBox2.List(ListBox2.ListCount - 1, 3) = .Range("A" & I).Offset(0, 4) 'ajoute le N° Organe en colonne 3
                ListBox2.List(ListBox2.ListCount - 1, 4) = .Range("A" & I).Offset(0, 5) 'ajoute la tache en colonne 4
                ListBox2.List(ListBox2.ListCount - 1, 5) = .Range("A" & I).Offset(0, 6) 'ajoute la Version en colonne 5
                ListBox2.List(ListBox2.ListCount - 1, 6) = .Range("A" & I).Offset(0, 7) 'ajoute le Observation en colonne 6
                ListBox2.List(ListBox2.ListCount - 1, 7) = .Range("A" & I).Offset(0, 8) 'ajoute le 1 ére Arrivé en colonne 7
                ListBox2.List(ListBox2.ListCount - 1, 8) = .Range("A" & I).Offset(0, 30) 'ajoute le Validée le en colonne 8
                ListBox2.List(ListBox2.ListCount - 1, 9) = .Range("A" & I).Offset(0, 31) 'ajoute le Départ en colonne 9
           End If
    End With 'fin du with
     
    'trie par ordre alphabétique le N° FTS
     ActiveWorkbook.Worksheets("Base de données").AutoFilter.Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Base de données").AutoFilter.Sort.SortFields.Add _
            Key:=Range("A1:A1048576"), SortOn:=xlSortOnValues, Order:=xlAscending, _
            DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Base de données").AutoFilter.Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    ListBox2.Enabled = False
    N = ListBox1.ListCount
    TextBoxNfiche.Value = N
    RECHMOD.Hide
     
        'On bloc la mise à jour de l'affichage
        Application.ScreenUpdating = True
     
     
    End Sub
     
     
    Private Sub AddItemList(ListBoxCible As ListBox, Optional iRang As Byte = 1)
    Dim iOffset As Byte
    Dim rgA As Range
     
        'On boucle sur les cellules visibles de la 1ère colonne du tableau
        For Each rgA In .ListColumns(1).DataBodyRange.SpecialCells(xlCellTypeVisible)
            ListBoxCible.AddItem rgA.Value
            'On boucle sur les 6 champs suivants
            For iOffset = 1 To 6
                ListBoxCible.List(ListBoxCible.ListCount - 1, iOffset) = rgA.Offset(0, iOffset + 1)
            Next
            'On traite ensuite les champs "spéciaux"
            ListBoxCible.List(ListBoxCible.ListCount - 1, 7) = rgA.Offset(0, .listColums(CStr(iRang) & "ère arrivée").Index - 1) 'ajoute le 1 ére Arrivé en colonne 7
     
            ListBoxCible.List(ListBoxCible.ListCount - 1, 8) = rgA.Offset(0, 30) 'ajoute le Validée le en colonne 8
            ListBoxCible.List(ListBoxCible.ListCount - 1, 9) = rgA.Offset(0, 31) 'ajoute le Départ en colonne 9
        Next
     
    End Sub
     
    Private Sub Macro2Date() 'macro date
    'déclaration de variable
     Dim Datedebut As String
     Dim Datefin As String
     Dim a As Date
     Dim B As Date
     
     'Lance InputBox et attribu a datedebut la valeur rentrée
     Datedebut = InputBox("Entrer la date de debut au format JJ/MM/AAAA", _
          "Format jour/mois/année")
    'Lance InputBox et attribu a datefin la valeur rentrée
     Datefin = InputBox("Entrer la date de fin au format JJ/MM/AAAA", _
          "Format jour/mois/année")
     
    'Si Datedebut et date fin sont une date et qu'elles sont au format "##/##/####" alors
     If IsDate(Datedebut) And Datedebut Like "##/##/####" And IsDate(Datefin) And Datefin Like "##/##/####" Then
        a = CDate(Datedebut) ' A = DateDebut
        B = CDate(Datefin) 'B = DateDebut
        If B < a Then tmp = a: a = B: B = tmp 'Si B < A alors échnager les valeur de A et de B
        'Si A et B sont des dates alors
        If IsDate(a) And IsDate(B) Then
        ' Avec la feuille " Base de données"
           With Sheets("Base de données")
           'Faire un autofiltre colonne 31 entre la valeur A et la valeur B
             .[A1].AutoFilter Field:=31, Criteria1:=">=" & CDbl(a), Operator:=xlAnd, _
                Criteria2:="<=" & CDbl(B)
           End With
        End If
       ElseIf Datedebut = "" Or Datefin = "" Then Exit Property 'Sinon si  Datededebut ou datefin = vide alors exit sub
       Else
        MsgBox "Format date incorrect Format à utiliser est : jj/mm/aaaa " 'Sinon MSGbox "Format date incorrect
        Macro2Date 'Relance la macro2Date
     End If
     
    End Property
    alors dans la partie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    'trie par ordre alphabétique le N° FTS
        With F_BD.ListObjects("Tab_Base")
            'On vérifie que le tableau comporte des entrées sinon on quitte
            If .ListRows.Count = 0 Then Exit Sub
            With .DataBodyRange.AutoFilter.Sort
                .SortFields.Clear
                .SortFields.Add .Cells, xlSortOnValues, xlAscending, DataOption:=xlSortNormal
                .Header = xlYes
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
        End With
    Cette ligne fais un message d'erreur en disans Objet requis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With .DataBodyRange.AutoFilter.Sort
    Dans ce bloc de 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
     With F_BD.ListObjects("Tab_Base")
            'On procéde au filtrage de base
            If RECHMOD.CheckBox2.Value Then Macro2Date
            If RECHMOD.CBoxUM.Value <> "" Then .DataBodyRange.AutoFilter Field:=2, Criteria1:=RECHMOD.CBoxUM.Value
            If RECHMOD.CBoxType.Value <> "" Then .DataBodyRange.AutoFilter Field:=3, Criteria1:=RECHMOD.CBoxType.Value
            If RECHMOD.CBoxMateriel.Value <> "" Then .DataBodyRange.AutoFilter Field:=4, Criteria1:=RECHMOD.CBoxMateriel.Value
            If RECHMOD.CBoxNOrgane.Value <> "" Then .DataBodyRange.AutoFilter Field:=5, Criteria1:=RECHMOD.CBoxNOrgane.Value
            If RECHMOD.CBoxTache.Value <> "" Then .DataBodyRange.AutoFilter Field:=6, Criteria1:=RECHMOD.CBoxTache.Value
            If RECHMOD.CBoxVersion.Value <> "" Then .DataBodyRange.AutoFilter Field:=7, Criteria1:=RECHMOD.CBoxVersion.Value
            If RECHMOD.CBoxDocValide.Value = "Oui" Then .DataBodyRange.AutoFilter Field:=31, Criteria1:="<>"
     
            If RECHMOD.CheckBox1 Then
                .DataBodyRange.AutoFilter Field:=.ListColumns("Départ").Index, Criteria1:="" 'Départ vide
                'On boucle sur les champs "numéraires"
                For iRang = 1 To 5
                    'Ensuite on ajoute les filtres temporaires
                    .DataBodyRange.AutoFilter Field:=.ListColumns(CStr(iRang) & "ère arrivée").Index, Criteria1:="<>" '1ère arrivée non vide
                    .DataBodyRange.AutoFilter Field:=.ListColumns(CStr(iRang) & "er départ").Index, Criteria1:="" ' 1er départ vide
     
                    'On ajoute à la liste
                    AddItemList ListBox1, iRang
     
                    'On retire les filtres sur arrivée et départ
                    .DataBodyRange.AutoFilter Field:=.ListColumns(CStr(iRang) & "ère arrivée").Index, Criteria1:="*" '1ère arrivée non vide
                    .DataBodyRange.AutoFilter Field:=.ListColumns(CStr(iRang) & "er départ").Index, Criteria1:="*" ' 1er départ vide
                Next
            Else
                'On place uniquement les info concerant "1ère arrivée" et "1er départ"
                AddItemList ListBox1
            End If
        End With
    Cette ligne met un message d'erreur Incompatibilité de type :

    Je ne sais pas trop comment modifier cela, jespere quelqu'un pourras me répondre.

    Cordialement,
    Passepartout007

  16. #16
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    avril 2002
    Messages
    3 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : avril 2002
    Messages : 3 232
    Points : 7 335
    Points
    7 335

    Par défaut

    Salut

    Bon j'ai finalement prit le temps de regarder un peu plus sérieusement.

    Ça n'est pas terminé mais normalement ça affiche les résultats dans le listview.

    Il reste entre autre à traité le doubleclique sur le listview et la possibilité de trier les colonnes du listview.
    J'ai vu que tu voulais pouvoir mettre un test partiel dans Type, il faudra retravailler un peu le code pour pouvoir faire cela.

    Bonne soirée
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP - Dernier et Seul Tutoriel : VBA & Internet Explorer
    L'utilisation de l’éditeur de message

  17. #17
    Membre du Club
    Homme Profil pro
    Ingénieur maintenance industriel
    Inscrit en
    juin 2018
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur maintenance industriel
    Secteur : Transports

    Informations forums :
    Inscription : juin 2018
    Messages : 75
    Points : 42
    Points
    42

    Par défaut Re : Retour sur le fichier

    Bonjour,

    Qwazerty je te remercie de tout cas je vais devoirs me former sur les listview car je ne comprend rien à ton code malgré les commentaire. Tu as effectuer du bon travail, j'ai relever quelque bug, je fais donc un retour ici pour trouver de l'aide, ne te force pas à travailler en plus sur le dossier tu m'as déjà beaucoup apporté et je sais que tu n'as pas forcément du temps pour cela. N'hésite pas à me faire un retour quand tu en auras si l'envie t'en prend bien sûr.

    Je te remercie pour ton implication je fais des retours car il y a quelque disfonctionnement, si quelqu'un veux m'aider à les reprendre il est le bienvenu.
    J'ai vu que tu as pris le temps de mettre des données aléatoire, j'ai donc fais de même, en ajoutant 52 ligne avec des dates. Je joint le fichier.
    Ta méthode d'incrémentation des comboboxs est différente de la mienne et je ne comprend pas forcément ce que tu fais. D'après ce que j'ai vu tu a créé une list qui est dans un boucle, qui permet suivant le combobox d'aller chercher les valeur dans le tableau nommée "Tab_Base_Excel"
    Cependant, celui ne fonctionne pas pour tout les combobox.

    Dans l'userform RECHMOD :

    Combobox Um, Type, N°Organe, Doc Validé tous sont ok
    Combobox des acteurs il prend également en compte les différents vides, voir le fichier
    Et dans le Combobox Version, Tache, Matériel rien n'est présent.

    Je me suis permit de rajouter la boite de dialogue me permettant de relever le "entre deux date" cela filtre les case du tableau entre deux date.

    Au bouton Validé je voudrais que la listview s'affiche :

    En prenant en compte les paramètre suivant :

    Doc en cours de validation IPM : coché = la fiche est arrivé (x arrivé) (colonne I, M, Q, U, Y) et que la fiche n'est pas partie (x départ), en associer avec l'arrivé (L, P, T, X,AB) Et que le départ final n'as pas été fais colonne AF. Afficher les ligne correspondante dans la listview
    Combobox UM est rempli = Affiche dans la listview que les ligne avec le bon UM
    Combobox Type est rempli = Affiche dans la listview que les ligne avec le bon Type
    Combobox Matériel est rempli = Affiche dans la listview que les ligne avec le bon Matériel
    Combobox N°Organe est rempli = Affiche dans la listview que les ligne avec le bon N°Organe
    Combobox Tache est rempli = Affiche dans la listview que les ligne avec le bon Tache
    Combobox Version est rempli = Affiche dans la listview que les ligne avec le bon Version
    Combobox Doc Validé est rempli par oui = Affiche dans la listview que les ligne avec des case remplis en colonne AE de plus si la case "Option si oui : Entre deux dates" est coché afficher que les ligne entre ses deux dates
    Combobox Doc Validé est rempli par Non = Ignoré cette ligne
    Si quelque chose est rentré dans le Textbox Observation, titre (ou partie de titre) = Si ce qui est rentrer fais partie d'un d'une observation ligne H (partie de l'observation, Un mot de l'observation, ou l'observation complète) alors affichier la ligne dans la listview.
    Combobox Acteur n°x est rempli = Affiche dans la listview que les ligne avec le bon Acteur n°x (en fonctionne des colonne du tableau)

    Si rien n'est remplis dans l'un de ses champs alors ne pas le prendre en compte.
    Si plusieurs champs son remplis alors le ligne afficher doivent répondre à l'intégralité des critères.

    Un fois tout les critère pris en compte afficher la listview.

    Dans la listview au double-clic sur un ligne renvoi en msgbox la valeur de la colonne 0 associer a la sélection (NUM)
    Au clic sur un en-tête de colonne tris par ordre alphabétique la colonne en question (en gardant les même ligne mais trié.)

    Bon voila j'ai je pense avoir été claire.

    Ma méthode de travail change complètement et je doit retravailler un grosse partie de mon code, en comprenant l'actuel. Je tiens à encore remercier Qwazerty pour son aide et son partage de savoir. Le fichier est certes pas fonctionnel, mais il me met sur une bonne piste d'amélioration. Reste à moi de comprendre et de paramétrer tout cela. Je reste présent sur cette discutions pour tout conseil ou apport de solution à une partie de mon problème.

    Cordialement,
    Passepartout007
    Ps: Votre forum m'aide beaucoup et je vous en remercie, je suis désolé si j'amène des "moches" codes mais promis j'essaye de m'améliorer.


    Formulaire_listview_FT.xlsm

  18. #18
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    avril 2002
    Messages
    3 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : avril 2002
    Messages : 3 232
    Points : 7 335
    Points
    7 335

    Par défaut

    Salut

    J'ai vu que tu as pris le temps de mettre des données aléatoire, j'ai donc fais de même, en ajoutant 52 ligne avec des dates. Je joint le fichier.
    Bien, c'est important d'avoir des données pour faire des essais et c'est mieux quand elles sont proche de la réalité
    D'après ce que j'ai vu tu a créé une list qui est dans un boucle, qui permet suivant le combobox d'aller chercher les valeur dans le tableau nommée "Tab_Base_Excel"
    Tab_Base_Excel, c'est le tableau structuré qui est sur la feuille Base de Données, si tu cliques sur ce tableau tu verras apparaitre un menu supplémentaire dans le ruban nommé "Outils de tableau, CREATION", c'est ici que tu peux changer l'aspect du tableau structuré (et son nom)

    Combobox Um, Type, N°Organe, Doc Validé tous sont ok
    Combobox des acteurs il prend également en compte les différents vides, voir le fichier
    Et dans le Combobox Version, Tache, Matériel rien n'est présent.
    Pour Matériel, Tâche et Version, si j'ai bien compris le code de départ seules doivent être ajoutées les données des ligne ou type contient FTA ou FTS. Ton tableau n'en contient aucune, il est donc logique que ces lignes soient vides.
    Pour les lignes vides je regarderai mais essai comme ça
    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
    Sub FillList(Destination As ComboBox, Tab_Source As ListObject, Optional ConditionFTx As Boolean = False)
    Dim rgSource As Range
    Dim iList As Integer
    Dim MemoMatchRequired As Boolean
    Dim MemoStyle As fmStyle
    Dim FTtest As Boolean
     
        'On vide la destination
        Destination.Clear
     
        'On mémorise la politique utilisée avec ce combo
        MemoMatchRequired = Destination.MatchRequired
        MemoStyle = Destination.Style
     
        'On désactive le matchRequired
        Destination.MatchRequired = False
        'On utilise le combo en downcombo, ça permet de pouvoir faire des saisies
        Destination.Style = fmStyleDropDownCombo
        'On boucle sur le contenu de la colonne pointée par le tag du composant Destination (Tag est renseigné en mode design)
        For Each rgSource In Tab_Source.ListColumns(Destination.Tag).DataBodyRange
            'On ne tient pas compte des lignes vides
            If rgSource <> "" Then
                'On regarde la condition FT
                'La colonne Matériel n'existant pas dans tab_Organe, tester son contenu déclenche une erreur
                'On va donc tester son contenu en désactivant la surveillance des erreurs
                FTtest = False
                On Error Resume Next 'On passe à la ligne suivnate en cas d'erreur
                FTtest = UCase(Left(Tab_Source.ListColumns("Type").DataBodyRange.Cells(rgSource.Row - 1, 1).Value, 2)) = "FT"
                On Error GoTo 0 'On réactive la surveillance
                'Si La ligne à plantée, FTTest a gardé sa valeur de départ donc False
                'Si la ligne s'est éxécutée comme il faut (Matériel est présent) FTtest retourne la valeur du test
                If Not ConditionFTx Or (ConditionFTx And FTtest) Then
                    'On place le contenu de la cellule dans le Combo pour le forcer à séléctionner cette entrée si elle est déjà dans sa list
                    Destination.Value = rgSource.Value
                    'Si acune entrée n'est séléctionnée, c'est que ce mot n'existe pas dans la list
                    If Destination.ListIndex = -1 Then
                        'On en profite pour trier par liste alpha en plaçant ce nouvel item juste avant l'item contenant un texte "supérieur"
                        For iList = 0 To Destination.ListCount - 1
                            If Destination.List(iList) > rgSource.Value Then
                                'On insert le nouvel item à cette place
                                Destination.AddItem rgSource.Value, iList
                                'On quitte la boucle
                                Exit For
                            End If
                        Next
                        'On controle que l'item a été ajouté, si ça n'est pas le cas, on le place au bout de la list
                        'Ce sera vrai dans deux cas
                        'La liste est vide Destination.ListCount et iList vallent 0
                        'Le nouvelle item est "supérieur" à tous ceux déjà présent dans la liste
                        'On est donc arrivé au bout de la boucle For, iList vaut donc (Destination.ListCount - 1) + 1  car il s'appréter à faire une boucle en plus
                        '   mais puisque sa valeur dépasse la borne haute qu'on lui a fixé (Destination.ListCount - 1), il ne retourne pas au début du For
                        '   Donc iList = Destination.ListCount - 1 + 1 = Destination.ListCount
                        If iList = Destination.ListCount Then Destination.AddItem rgSource.Value
                    End If
                End If
            End If
        Next
     
        'On ajoute une entrée vide si elle n'existe pas
        'Destination.Value = ""
        'If Destination.ListIndex = -1 Then
        Destination.AddItem "", 0
     
        'On remet en place la politique
        Destination.MatchRequired = MemoMatchRequired
        Destination.Style = MemoStyle
     
    End Sub

    Citation Envoyé par Passepartout007 Voir le message
    En prenant en compte les paramètre suivant :

    Doc en cours de validation IPM : coché = la fiche est arrivé (x arrivé) (colonne I, M, Q, U, Y) et que la fiche n'est pas partie (x départ), en associer avec l'arrivé (L, P, T, X,AB) Et que le départ final n'as pas été fais colonne AF. Afficher les ligne correspondante dans la listview
    Combobox UM est rempli = Affiche dans la listview que les ligne avec le bon UM
    Combobox Type est rempli = Affiche dans la listview que les ligne avec le bon Type
    Combobox Matériel est rempli = Affiche dans la listview que les ligne avec le bon Matériel
    Combobox N°Organe est rempli = Affiche dans la listview que les ligne avec le bon N°Organe
    Combobox Tache est rempli = Affiche dans la listview que les ligne avec le bon Tache
    Combobox Version est rempli = Affiche dans la listview que les ligne avec le bon Version
    Combobox Doc Validé est rempli par oui = Affiche dans la listview que les ligne avec des case remplis en colonne AE de plus si la case "Option si oui : Entre deux dates" est coché afficher que les ligne entre ses deux dates
    Combobox Doc Validé est rempli par Non = Ignoré cette ligne
    Si quelque chose est rentré dans le Textbox Observation, titre (ou partie de titre) = Si ce qui est rentrer fais partie d'un d'une observation ligne H (partie de l'observation, Un mot de l'observation, ou l'observation complète) alors affichier la ligne dans la listview.
    Combobox Acteur n°x est rempli = Affiche dans la listview que les ligne avec le bon Acteur n°x (en fonctionne des colonne du tableau)

    Si rien n'est remplis dans l'un de ses champs alors ne pas le prendre en compte.
    Si plusieurs champs son remplis alors le ligne afficher doivent répondre à l'intégralité des critères.

    Un fois tout les critère pris en compte afficher la listview.
    Je n'avais pas tout ce détail, j'ai fait en fonction de l'interprétation du code, il est donc possible que ça ne colle pas parfaitement au besoin.
    Par contre attention avec les données qui sont dans la base test, certaine colonnes n'ont pas de doublon de valeur, donc si on met un critère de tri sur cette colonne, il n'y a qu'une seule ligne qui correspond. De ce fait, si on place un autre critère sur une autre colonne il y a de forte chance pour qu'il n'y est plus aucune ligne qui correspondent aux critères.


    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP - Dernier et Seul Tutoriel : VBA & Internet Explorer
    L'utilisation de l’éditeur de message

  19. #19
    Membre du Club
    Homme Profil pro
    Ingénieur maintenance industriel
    Inscrit en
    juin 2018
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur maintenance industriel
    Secteur : Transports

    Informations forums :
    Inscription : juin 2018
    Messages : 75
    Points : 42
    Points
    42

    Par défaut

    Bonjour,
    Citation Envoyé par Qwazerty Voir le message
    Pour Matériel, Tâche et Version, si j'ai bien compris le code de départ seules doivent être ajoutées les données des ligne ou type contient FTA ou FTS. Ton tableau n'en contient aucune, il est donc logique que ces lignes soient vides.
    Pour les lignes vides je regarderai mais essai comme ça
    Pour l'incrémentation dans les combobox je vais utiliser des tableau nommée. Pour cela j'utiliserais le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.CBoxUM.RowSource = ThisWorkbook.Worksheets("Non de la feuille").ListObjects("Nom_Tableau").ListColumns("Nom_Colonne").DataBodyRange.Address(External:=True)
    Il ne reste donc qu'à effectuer l'incrémentation dans le listview, ce qui simplifia le code.
    Pour incrémenter la Listview il fraudais répondre au critères suivants :
    Doc en cours de validation IPM : coché = la fiche est arrivé (x arrivé) (colonne I, M, Q, U, Y) et que la fiche n'est pas partie (x départ), en associer avec l'arrivé (L, P, T, X,AB) Et que le départ final n'as pas été fais colonne AF. Afficher les ligne correspondante dans la listview
    Combobox UM est rempli = Affiche dans la listview que les ligne avec le bon UM
    Combobox Type est rempli = Affiche dans la listview que les ligne avec le bon Type
    Combobox Matériel est rempli = Affiche dans la listview que les ligne avec le bon Matériel
    Combobox N°Organe est rempli = Affiche dans la listview que les ligne avec le bon N°Organe
    Combobox Tache est rempli = Affiche dans la listview que les ligne avec le bon Tache
    Combobox Version est rempli = Affiche dans la listview que les ligne avec le bon Version
    Combobox Doc Validé est rempli par oui = Affiche dans la listview que les ligne avec des case remplis en colonne AE de plus si la case "Option si oui : Entre deux dates" est coché afficher que les ligne entre ses deux dates
    Combobox Doc Validé est rempli par Non = Ignoré cette ligne
    Si quelque chose est rentré dans le Textbox Observation, titre (ou partie de titre) = Si ce qui est rentrer fais partie d'un d'une observation ligne H (partie de l'observation, Un mot de l'observation, ou l'observation complète) alors affichier la ligne dans la listview.
    Combobox Acteur n°x est rempli = Affiche dans la listview que les ligne avec le bon Acteur n°x (en fonctionne des colonne du tableau)

    Si rien n'est remplis dans l'un de ses champs alors ne pas le prendre en compte.
    Si plusieurs champs son remplis alors le ligne afficher doivent répondre à l'intégralité des critères.

    Un fois tout les critère pris en compte afficher la listview.
    Dans la listview au double-clic sur un ligne renvoi en msgbox la valeur de la colonne 0 associer à la sélection (NUM)
    Au clic sur une en-tête de colonne(nom de colonne), Cela tris par ordre alphabétique la colonne en question (en gardant les même ligne trié.)


    Citation Envoyé par Qwazerty Voir le message
    Je n'avais pas tout ce détail, j'ai fait en fonction de l'interprétation du code, il est donc possible que ça ne colle pas parfaitement au besoin.
    Par contre attention avec les données qui sont dans la base test, certaine colonnes n'ont pas de doublon de valeur, donc si on met un critère de tri sur cette colonne, il n'y a qu'une seule ligne qui correspond. De ce fait, si on place un autre critère sur une autre colonne il y a de forte chance pour qu'il n'y est plus aucune ligne qui correspondent aux critères.

    ++
    Qwaz
    Dans le colonne ou il n'y a pas de doublon si un autre critère s'effectue dans une autre colonne et que cette ligne ne s'affiche plus, alors ce n'est pas grave cela veux dire qu'elle ne correspondais pas au critère. (Si j'ai bien compris ce que tu voulais dire)
    Effectivement tu n'avais pas tout les détails excuse moi, je vais essayer de reprendre ton code afin de répondre à mes critère, pour l'instant je ne comprend pas tout ce que tu as fais je vais consulté le tutoriel que tu m'a indiqué pour comprendre tout cela.

    Ma plus grande difficultés est bien sur le tris entre deux date, et que le document soit en cours ou nom.
    Je te remercie encore pour tes retours n'hésite pas si tu a du temps à m'aidez , et n'hésite pas à commenter toutes tes lignes.

    Cordialement,
    Passepartout007

    PS: je n'ais pas encore eu le temps de regarder ton nouveau code je te fais un retour au plus vite.

  20. #20
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    avril 2002
    Messages
    3 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : avril 2002
    Messages : 3 232
    Points : 7 335
    Points
    7 335

    Par défaut

    Salut

    Avant de modifier le code essai de te l'approprier et de comprendre ce qu'il fait.

    Je suis repartie du dernier fichier que je t'avais envoyé, j'ai corrigé deux trois erreurs qui faisaient que le listview ne se remplissait pas (le code était déjà présent pour son remplissage).

    Je ne saisie pas trop ce que tu veux faire avec les intervalles de date mais il existe des fonctions pour manipuler et tester des dates, comme IsDate(), CDate(), ...

    As tu regardé pour la partie remplissage des combo Matériel, Tâche et version qui sont dépendant du contenu de Type (FTA ou FTS). Aussi que contient la colonne type mis à part FTA et FTS, y'a-t-il d'autres entrée qui sont susceptibles de commencer par "FT" ? (C'est important pour savoir si le teste que j'ai mis dans le code pour l'instant doit être modifié.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP - Dernier et Seul Tutoriel : VBA & Internet Explorer
    L'utilisation de l’éditeur de message

Discussions similaires

  1. Améliorer les performances d'Hibernate
    Par minimarch76 dans le forum Persistance
    Réponses: 4
    Dernier message: 22/08/2007, 10h01
  2. Optimisation de jsp pour améliorer les performances
    Par djuddju dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 01/12/2006, 05h50
  3. Réponses: 2
    Dernier message: 01/08/2006, 10h20
  4. [IW][D7] améliorer les performances
    Par Magnus dans le forum Bases de données
    Réponses: 19
    Dernier message: 11/10/2005, 20h46

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