VBA - Autofilter + array se remplissant automatiquement selon les valeurs d'1 plage.

Vingolato

XLDnaute Nouveau
Bonjour à tous les passionés d'Excel et de VBA en particulier,

Je rencontre en ce moment une difficulté dans un classeur X,

La page un contient une tableau base de données en ("A:C")
La seconde page une sélection de valeurs selon lesquelles le tri doit se faire dans la database.
La 3° page reçoit par copier-coller le résultat de la database après filtrage.(Visualisation)


La macro utilise un filtre auto. , un seul critère et un array (nommé T)
Je souhaiterais remplir dynamiquement l'Array par les valeurs qui apparaissent cochés d'une croix sur ma page 2.

Tant que maintenant la macro que j'ai faite fonctionne fort bien, mais les valeurs contenues dans mon Array sont fixes,
il faut les adapter manuellement.
le problèmes est que dans ce classeur, ils changent en fonction d'autres macros s'exécutant préalablement ...

Je me suis inspiré de ceci pour remplir mon array de façon automatique, sans succès ...
(où Tblo = T)

Sub ex1feuilleversarray()
Dim Tblo()
Dim a As Integer, b As Integer

With ActiveSheet.Range("a1").CurrentRegion
ReDim Tblo(.Rows.Count, .Columns.Count)
Tblo = .Value
End With



Je joins en annexe le classeur en question.
Merci déjà à tous ceux qui voudront consacrer quelque temps pour éclairer ma lanterne !
François
 

Pièces jointes

  • Filtre copie.xlsm
    21 KB · Affichages: 107

Vingolato

XLDnaute Nouveau
Re : VBA - Autofilter + array se remplissant automatiquement selon les valeurs d'1 pl

Un petit UP, svp
Deux jours que je cherche sans résultat ...
Ci-dessous une vue de ladite Macro.

Je veux donc définir dynamiquement un array MyCombinaisons () contenant toutes les valeurs reprises dans la plage de cellules comprise entre I2 et I73 de la page "Sequences".
cette liste est générée dynamiquement et peut compter entre 1 et 73 valeurs différentes. (pas de doublons)

je m'inspire d'un code trouvé là : ICI
Cela ne fonctionne pas ...

Code:
Sub Application_filtre()
'DEFINIT UN ARRAY DYNAMIQUE
'Les données à intégrer dans l'array sont en: Sheets("Sequences").Columns("I2:I") jusque max I73 en ignorant les vides " "
' Stores all combinaisons in the workbook in the array variable MyCombinaisons()
Dim MyCombinaisons() As String ' declares a dynamic array variable
Dim iCount As Integer
Dim Max As Integer
    Max = ThisWorkbook.Names.Count ' finds the maximum array size
    'Max = Sheets("Sequences").Range("I2:I73").Names.Count ' finds the maximum array size
    ReDim MyCombinaisons(1 To Max) ' declares the array variable with the necessary size
    For iCount = 1 To Max
        MyCombinaisons(iCount) = ThisWorkbook.Names(iCount)
        'MyCombinaisons(iCount) = Sheets("Sequences").Columns("I:I").Names(iCount)
    Next iCount
    Erase MyCombinaisons() ' deletes the varible contents, free some memory


'Dim MyCombinaisons
'MyCombinaisons = Array("3.1.4", "3.1.5", "3.1.6")
'Applique le filtre
Sheets("Visualisateur").Activate
ActiveSheet.Range("$A$23:$AI$467").AutoFilter Field:=1, Criteria1:=MyCombinaisons, Operator:=xlFilterValues
'ActiveSheet.Range("$A$23:$AI$467").AutoFilter Field:=1, Criteria1:=Array( _
        "3.1.4", "3.1.5", "3.1.6"), Operator:=xlFilterValues

End Sub


Quand je définis mon Array manuellement ca marche ...
Merci d'avance à qui pourra me renseigner,
 

sousou

XLDnaute Barbatruc
Re : VBA - Autofilter + array se remplissant automatiquement selon les valeurs d'1 pl

Bonjour à tous cela faisait un moment que je n'étais pas venu!

Sans pouvoir ouvrir ton fichier (excel 2033) et en espérant avoir compris ton besoin voici un code
Qui rempli un tableau de la taille de la région courante, et reverse les données ici dans la feuille 2.
A voir si c'est ce que tu cherches

Sub ex1feuilleversarray()
Dim Tblo()
Dim a As Integer, b As Integer

With ActiveSheet.Range("a1").CurrentRegion
ReDim Tblo(.Rows.Count, .Columns.Count)
indexl = 0
indexc = 0
For Each lg In .Rows
For Each col In .Columns

Tblo(indexl, indexc) = .Parent.Cells(lg.Row, col.Column)
indexc = indexc + 1
Next
indexl = indexl + 1
indexc = 0
Next

lg = .Rows.Count
col = .Columns.Count
End With
' exemple d'Ecriture du tableau
Set Destination = Sheets(2).Range("a1")
For l = 0 To lg - 1
For c = 0 To col - 1
Destination.Offset(l, c) = Tblo(l, c)
Next
Next

End Sub
 

Vingolato

XLDnaute Nouveau
Re : VBA - Autofilter + array se remplissant automatiquement selon les valeurs d'1 pl

Sousou,
Tout d'abord un grand merci pour avoir pris le temps de répondre à ma demande !

J'ai utilisé ton code et l'ai adapté à mon cas,
Premier grand pas pour moi, la définition de l'Array ne plante plus !

En fait l'Array sert pour utiliser le filtre automatique sur une plage contenant un grand nombre de données.
En fait je ne veux afficher que quelques-unes d'où le filtre, et la liste de ces quelques-unes se trouve en I2:I73 de la page "Sequences".
Cette liste que je veux envoyer dans l'array Tblo est de longeur variable.
Entre 0 et 73 valeurs différentes selon le cas.

Ton code que j'ai modifié à l'air de bien fonctionner dans le sens où il ne plante pas,
J'ai supprimé la dernière partie car elle ne sert pas dans mon cas,
Le filtrage des données se fait dans mon tableau mais ne s'exécute sur aucune valeur, comme si l'Array Tblo était vide ...
Tout apparait et finalement rien n'est filtré.

Les valeurs que doit contenir l'Array sont de ce type 1.2, 1.3, 1.4, 2.1, 2.2, 3.0, 3.1.0, 3.1.2, etc etc
Je ne sais pas si cela de l'importance, ce n'est pas du texte en tout cas.
Est-ce qu'envoyer une copie du classeur en version XLS 2003 te serais utile?

François
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 675
Messages
2 090 799
Membres
104 667
dernier inscrit
gwtr