AutoFilter, Areas et Tableau

J

Jeff

Guest
Bonjour à tous,

Pour accélérer du code, je souhaiterais utiliser une plage autofiltrée sans la copier et placer ses valeurs dans un tableau pour travailler dessus.

Je me trouve bloquer avec les areas (mon tableau ne voit que la 1° ligne visible). Comment prendre en compte tous les areas de la plage filtrée afin que toutes les valeurs de la plage filtrée (sauf les valeurs de champs) soit récupérable dans un unique tableau.

Merci de me répondre et bonne journée
 
J

Jeff

Guest
Bonjour Zon,

Merci de me répondre (je n'y croyais plus) mais la réponse n'est pas bonne car je me suis mal exprimé:

Je sais récupérer par VBA une plage autofiltrée à l'aide de specialcells(xlcelltypevisible) pour la recopier sur une feuille du classeur et travailler avec ses données.

Mais je pense que l'on peut accélérer le code si au lieu de copier la plage autofiltrée on place cette plage dans un tableau variant.

Comme à l'issue du filtre j'ai plusieurs lignes visibles avec chacune un n° de ligne différent pour pouvoir placer l'ensemble de la plage filtrée dans un tableau variant il faut passer par les Areas de la plage et redimensionner et préserver à chaque fois le tableau variant.

Ben c'est là que je m'embrouille un peu et que je souhaite de l'aide.

Merci d'avance.
 
Z

Zon

Guest
Salut,

Il me semble que c'est ce que tu voulais, je passe bien par un tableau variant.


Quand j'écris:
With Plage
T = .Offset(1, 0).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Value
End With

'T est bien variant auquel j'affecte la plage filtrée mais sans la 1 ère ligne

ensuite j'écris le résultat

.[A65536].End(xlUp)(2).Resize(UBound(T), UBound(T, 2)) = T


Mets un exemple avec ton début de code sinon car je vois pas ce que tu cherches à faire

A+++
 
J

Jeff

Guest
Hello,

J'avais fait ce que tu écris et je viens de le refaire: le pb reste entier

Si la plage filtrée comporte plusieurs lignes non adjacentes, T ne récupère que la 1° ligne visible (area(1)) pas les autres. Fais l'essai moi ça ne marche pas.

En plus ça me semble normal puisque plagefiltrée.Address donne bien les adresses de chaque ligne filtrée (séparées par ;) et pas une adresse range globale
A+
 
S

Sylvain

Guest
bonjour,

pourquoi ne pas faire d'entrée un filtre élaboré, ce serait bien plus simple me semble-il.

Ci joint une démo trouvée il y a un certain temps sur ce forum.

A+
 

Pièces jointes

  • filtreselabores.zip
    27.7 KB · Affichages: 19
  • filtreselabores.zip
    27.7 KB · Affichages: 15
  • filtreselabores.zip
    27.7 KB · Affichages: 22
J

Jeff

Guest
Re

Je répond à Sylvain: je cherche à faire cela pour accélérer le code (mais peut-être me trompe-je)

J'ai un formulaire de consultation qui me permet pour un projet donné et par nom de salarié d'afficher la charge de travail par mois concerné.

donc visualise:
Janv Février mars etc...
nom1 20% 100%
nom2 50%
nom3 100%

La base de données elle est construite normalement:
champ1 champ2 champ3 champ4
nom1 Janv 20 projet1
nom1 mars 100 projet1
nom2 Février 50 projet1
etc..

Donc à chaque appel du bouton de commande consultation
Base de données. Autofilter avec les critères choisis
copie sur une feuille cachée
extraction sans doublon du champ1 filtrée pour avoir les salariés concernés et copie dans le formulaire de consultation
extraction de la charge correspondante et copie visà vis du mois et du salarié concerné

Ben cette procédure est lente
et c'est pourquoi je pensais passer par un tableau variant

A+ (pas c't'aprèm j'ai RTT cadeau de Noël)
 
S

Sylvain

Guest
bonjour,

essaie de m'envoyer directement par mail comme ça je verrai la différence. Il y a peut-être encore plus rapide, si tu n'as besoin que d'un résultat calculé pourquoi ne pas essayer les formules de base de données. Tu auras un résultat immédiat sans macro.
Ou alors utilise un tableaux croisé.

A+
 
J

Jeff

Guest
Bonjour,

Sorry pour cette absence de contact:

Voilà le code VBA avec descriptif que j'utilise qui fonctionne mais qui est trop lent et donc à l'origine de mon interrogation.

Merci d'avance
 

Pièces jointes

  • Consult.zip
    2.3 KB · Affichages: 17
Z

Zon

Guest
Salut,

Je veux bien t'aider mais de là à reconstruire un fichier....
A premiere vue trop de worksheetfunction, tu boucles en plus directement sur une plage de cellule pour modifier une à une les cellules
=>IL faut passer par des tableaux VBA...

=> regardes Lien supprimé mais postes ou envoies moi ton fichier.

A+++
 
J

Jeff

Guest
Bonjour Zon,

Non, non je ne veux pas que tu reconstruises mon fichier. Tu as fait le même diagnostif que moi mais toi tu sais faire: il faut que je passe par des tableaux VBA.

Avant d'envoyer mon fichier, je cherche encore un peu à l'aide du lien que tu m'as fourni (très bien!).

Si je ne m'en sors pas je te recontacte. Merci encore.

PS: Je souhaite éclaircir encore ma demande car pour le moment les enregistrements récupérés par mon formulaire se retrouvent sur une feuille Excel (qui va exploser!)alors que dans l'idéal je souhaite réaliser un modèle Excel distribuable qui renseigne par l'utilisation d'une feuille formulaire une bdd Access (donc nourrit par les différents contributeurs)

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 770
Messages
2 091 950
Membres
105 122
dernier inscrit
zedmooh