XL 2013 Tri automatique en VBA et exportation sur plusieurs fichiers

Lhomheureux

XLDnaute Nouveau
Bonsoir à tous.
J'ai besoin de votre aide pour effectuer le tri et l'importation en VBA des données d'un tableau pour que se soit automatique.
le fichier excel est fourni en annexe avec un détail du rendu attendu se trouvant dans la feuille "SOCIETE". j'avoue que là c'est un peu un casse-tête pour moi.

Je vous remercie de prendre du temps pour y apporter de votre "code".
 

Pièces jointes

  • TRI PARTICIPANTS.xlsx
    68.1 KB · Affichages: 11
Solution
VB:
    wsSource.[i3].FormulaLocal = "=NON(ESTNA(EQUIV(F3;'" & wsRep.Name & "'!" & rSearch.Address & ";0)))"
    rSource.AdvancedFilter Action:=xlFilterInPlace, criteriarange:=wsSource.[i2:i3]
Dans cette partie de code :
  • j'initialise la cellule I3 avec la formule =NON(ESTNA(EQUIV(F3;'" & wsRep.Name & "'!" & rSearch.Address & ";0))) qui vérifie si le nom de quartier existe dans la table spécifiée par wsRep et nomZone (voir plus haut initialisation wsRep et rSearch ). La cellule I2 reste vide (nom de critère facultatif)
  • Puis j'applique la méthode AdvancedFilter avec comme paramètre la zone de critère (I2:I3) initialisée par la ligne précédente. AdvancedFilter affiche toutes les lignes pour lesquelles la formule en I3 est VRAI...

laurent3372

XLDnaute Impliqué
Supporter XLD
Bonjour,

Voici une solution en VBA, facilement adaptable à l'ajout de nouvelles feuilles de répartition.
NB: la feuille Localisation par zone est inutile, elle fait double emploi avec lla (les) feuille(s) de répartition.
J'espère que ça vous conviendra.

Cordialement,
- LR
 

Pièces jointes

  • TRI PARTICIPANTS (1).xlsm
    94.9 KB · Affichages: 10

Lhomheureux

XLDnaute Nouveau
Bonjour,

Voici une solution en VBA, facilement adaptable à l'ajout de nouvelles feuilles de répartition.
NB: la feuille Localisation par zone est inutile, elle fait double emploi avec lla (les) feuille(s) de répartition.
J'espère que ça vous conviendra.

Cordialement,
- LR

Merci beaucoup pour ce point de départ qui est génial.
Néanmoins, il y a quelques erreurs au niveau du tri. Des éléments d'autres zones se retrouvent dans la "zone PK". J'aimerais que tu puisses un peu mieux m'expliquer ce que tu as fais dans la partie "INIT.CRITERES". Je crois que c'est à ce niveau que tu détermines les critères de tri, mais je ne comprends pas très bien les (i3).

Concernant la feuille "localisation par zone" je l'ai mis parce que c'est sur l'ensemble de ses zones que doivent se faire le tri. J'ai mis le tri final de la "zone PK" afin que je puisse moi même étendre la procédure aux autres localisations après.
 

laurent3372

XLDnaute Impliqué
Supporter XLD
VB:
    wsSource.[i3].FormulaLocal = "=NON(ESTNA(EQUIV(F3;'" & wsRep.Name & "'!" & rSearch.Address & ";0)))"
    rSource.AdvancedFilter Action:=xlFilterInPlace, criteriarange:=wsSource.[i2:i3]
Dans cette partie de code :
  • j'initialise la cellule I3 avec la formule =NON(ESTNA(EQUIV(F3;'" & wsRep.Name & "'!" & rSearch.Address & ";0))) qui vérifie si le nom de quartier existe dans la table spécifiée par wsRep et nomZone (voir plus haut initialisation wsRep et rSearch ). La cellule I2 reste vide (nom de critère facultatif)
  • Puis j'applique la méthode AdvancedFilter avec comme paramètre la zone de critère (I2:I3) initialisée par la ligne précédente. AdvancedFilter affiche toutes les lignes pour lesquelles la formule en I3 est VRAI, c'es-à-dire toutes celles dont la localisation figure dans la table spécifiée par wsRep/rSearch.

Comme tu vois, je ne recherche jamais dans la feuille LOCALISATION PAR ZONE. C'est uniquement d'après les feuilles REPARTITION xx que je fais le tri. S'il y a des erreurs de tri, c'est à cause du contenu des tables figurant dans LOCALISATION PK.

Cordialement,
--
LR
 

Lhomheureux

XLDnaute Nouveau
VB:
    wsSource.[i3].FormulaLocal = "=NON(ESTNA(EQUIV(F3;'" & wsRep.Name & "'!" & rSearch.Address & ";0)))"
    rSource.AdvancedFilter Action:=xlFilterInPlace, criteriarange:=wsSource.[i2:i3]
Dans cette partie de code :
  • j'initialise la cellule I3 avec la formule =NON(ESTNA(EQUIV(F3;'" & wsRep.Name & "'!" & rSearch.Address & ";0))) qui vérifie si le nom de quartier existe dans la table spécifiée par wsRep et nomZone (voir plus haut initialisation wsRep et rSearch ). La cellule I2 reste vide (nom de critère facultatif)
  • Puis j'applique la méthode AdvancedFilter avec comme paramètre la zone de critère (I2:I3) initialisée par la ligne précédente. AdvancedFilter affiche toutes les lignes pour lesquelles la formule en I3 est VRAI, c'es-à-dire toutes celles dont la localisation figure dans la table spécifiée par wsRep/rSearch.

Comme tu vois, je ne recherche jamais dans la feuille LOCALISATION PAR ZONE. C'est uniquement d'après les feuilles REPARTITION xx que je fais le tri. S'il y a des erreurs de tri, c'est à cause du contenu des tables figurant dans LOCALISATION PK.

Cordialement,
--
LR

Merci Laurent pour ton aide et tes explications.
 

Discussions similaires

Statistiques des forums

Discussions
311 733
Messages
2 082 019
Membres
101 872
dernier inscrit
Colin T