Simplifer macro2
Bonjour à tous,
Je reviens vers vous car je n'arrive pas à simplifier ma macro comme je le souhaite.
Dans le fichier joins, il y a plusieurs feuilles mais seules les feuilles ("base de saisie"), ("feuill1") et ("feuill2")m'intéresse pour ce problème.
La feuille ("base de saisie") collecte toute la saisie du travail effectué.
Les 2 autres feuilles (Feuil1") et ("Feuil2") sont des feuilles dans lesquelles chaque feuille est une équipe et dans chaque équipe (c'est à dire chaque feuille) il y a 5 agents.
J'essaie de créer une macro qui fonctionnerait sur plusieurs feuilles et qui s'activerait via un bouton en haut à gauche mais qui en fonction de la feuille choisie ira chercher les bonnes informations.
je me suis aidé d'une ancienne macro faite par Ddetp88.
j'aimerais remplir au fur et à mesure des mois passés les tableaux situé dans chaque feuille pour chaque agents.
Les problèmes que j'ai rencontrés sont le fait d'aller chercher des valeurs dans des cellules qui ne sont pas côte à côte et de les restituées sur une seule et ligne de ces tableaux.
De plus pour des raisons que j'ignore, lorsque je souhaite, dans la macro, mettre un trait d'union dans le nom de l'agent, Excel me met automatiquement un espace de chaque coté du trait d'union et donc forcement, l'agent n'existe pas.
les cellules (AF17, G6, H6, Z19, AC19 et AB11) sont des nombres entier
Les cellules (I11, M13, N13, O13, Q13, R13) sont des nombres à virgule et plus précisément des pourcentage.
Si vous pouvez m'aider merci
Bonjour,
Si j'ai bien compris la chose ...
- l'on choisit une feuille 1 ou 2 (pour l'instant) ...
- l'on choisit le mois ...
- l'on clique sur "Tous les agents" ou l'un en particulier ...
- le filtre s'applique sur la feuille "BASE DE SAISIE" ...
- l'on extrait les données dans les cellules concernées ...
- tout cela selon la feuille active ...
Mais quelle est la différence entre les différentes feuilles dans la base de saisie > ce bout-là > je n'ai pas encore capté ...
ric
Bonjour Ric,
Les autres feuilles sont des anciens projet.
Il est vrai que j'aurai du les enlever pour ne pas embrouiller.
je remets le fichier en enlevant les feuilles inutiles.
Si j'ai bien compris la chose ...
- l'on choisit une feuille 1 ou 2 (pour l'instant) ...
- l'on choisit le mois ...
- l'on clique sur "Tous les agents" ou l'un en particulier ...
- le filtre s'applique sur la feuille "BASE DE SAISIE" ...
- l'on extrait les données dans les cellules concernées ...
- tout cela selon la feuille active ...
oui à un détail près,
concernant le choix du mois il s'effectue grâce au menu déroulant qui dépend de la feuille ("macro") et à la fin, toutes les données qui ont été extraites remplissent les tableaux de chaque agent.
l'idée c'est :
- l'on choisit une feuille 1 ou 2 (pour l'instant) ...
- l'on choisit le mois ...
- l'on clique sur "Tous les agents" ou l'un en particulier ... (pas d'agent en particulier car j'essaie de diminuer les macros pour que le fichier soit le moins lourd possible. 1 macro pour tous les agents)
- le filtre s'applique sur la feuille "BASE DE SAISIE" ...
- l'on extrait les données dans les cellules concernées ...
- tout cela selon la feuille active ...
- on rempli les tableaux
il s'agit des macros essai2 et essai3 dans lesquels j'ai oublié d'y mettre cette partie de code pour le menu déroulant reconnaissant le mois
Sheets("MACRO").Select
If (Range("B7")) = 1 Then (pour janvier)
""""""""""""""""""""""""" = 2 Then ( pour février)
etc....
En fait j'ai déjà des macros pour chaque agents mais ça fait lourd en terme de quantité donc j'aimerai 1 macro pour tous les agents de la feuille et filtré par mois
pour la feuille 1 ce serait agent 1, 2, 3, 4 et 5
et feuille 2 ce serait agent 6, 7, 8, 9, 10
Merci pour l'aide
Bonjour,
Où doit-on trouver les numéros d'agent pour les discriminer ?
ric
le code VBA ira chercher le nom de l'agent par rapport au filtre1 de la base de saisie.
il faut 2 conditions pour aller chercher les données.
1 -La cellule B7 de la feuille macro qui déterminera le mois rechercher
2 - la feuille active sur laquelle on a appuyer sur le bouton "tous les agents"
une fois ces infos,
- on copie /colle les données filtrées du 1er agent de la feuille active,
- on supprime les filtres de la base de saisie,
- on copie colle les données filtrées du 2ème agent de la même feuille active,
- on supprime les filtre,
- ECT....
l'idée du code est le suivant
Merci ric
Sub Essai3()
Dim nf$, Cellule, Dest1, Dest2, Menu
Set wb = Sheets("BASE DE SAISIE") '..................................................Instanciation
nf = ActiveSheet.Name: Set wf = Sheets(nf) '.........................................Instanciation
Cellule = [AF17,G6,H6,I11,M13:O13,Q13,R13,Z19,AC19,AB11].Address '.......................................................cellules à copier
Dest1 = [B14:M14].Address '.............................................plage de cellule de destination pour coller les données de Janvier
Dest2 = [B15:M15].Address '.............................................plage de cellule de destination pour coller les données de Février
Menu = Sheets("MACRO;B7") '............................................ Adresse pour connaître le mois rechercher
Application.ScreenUpdating = False '.................................................désactive les màj écran
If wb.FilterMode = True Then wb.ShowAllData '........................................suppression des filtres s'ils existent
If Menu = 1 And nf = "Feuil1" Then '.............................................................si la case B7 de la feuille "MACRO" est égal à 1 soit janvier et si la "Feuil1" est la feuille active
With wf '.........................................................................avec wf
wb.Range("$A$23:$AP$5475").AutoFilter Field:=1, Criteria1:=7 '................1er filtre en colonne 1
wb.Range("$A$23:$AP$5475").AutoFilter Field:=3, Operator:= _
xlFilterValues, Criteria2:=Array(1, "1/31/2018") '............2ème filtre sur les date du mois
End With
Plage = wb.[AF17,G6,H6,I11,M13:O13,Q13,R13,Z19,AC19,AB11].Value '.........................................................copie de la plage
wf.[B14:M14] = Cellule '.........................colle les valeurs
If wb.FilterMode = True Then wb.ShowAllData '........................................suppression des filtres
With wf '.........................................................................avec wf
wb.Range("$A$23:$AP$5475").AutoFilter Field:=1, Criteria1:=8 '................1er filtre en colonne 1 qui concerne le numéro d'agent
wb.Range("$A$23:$AP$5475").AutoFilter Field:=3, Operator:= _
xlFilterValues, Criteria2:=Array(1, "1/31/2018") '............2ème filtre sur les date du mois
End With
Plage = wb.[AF17,G6,H6,I11,M13:O13,Q13,R13,Z19,AC19,AB11].Value '.........................................................copie de la plage
wf.[B33:M33] = Cellule
ElseIf Menu = 2 And nf = "Feuil1" Then '..........................................................si la case B7 de la feuille "MACRO" est égal à 2 soit Février et si la "Feuil1" est la feuille active
With wf '.........................................................................avec wf
wb.Range("$A$23:$AP$5475").AutoFilter Field:=1, Criteria1:=LO - C1 '................1er filtre en colonne 1 qui concnerne le numéro d'agent
wb.Range("$A$23:$AP$5475").AutoFilter Field:=3, Operator:= _
xlFilterValues, Criteria2:=Array(1, "2/29/2018") '............2ème filtre sur les date du mois
End With
End IfBonjour,
Désolé > mais je ne comprends toujours pas quels sont les numéros d'agent et où je peux les trouver pour les changer afin de faire une boucle sur le filtre ...
pour la feuille 1 ce serait agent 1, 2, 3, 4 et 5
et feuille 2 ce serait agent 6, 7, 8, 9, 10
Si la colonne A de la feuille "BASE DE SAISIE" réfère au numéro d'agent > dans le fichier exemple > je n'aurais accès qu'aux agents 7, 8 et 9 (ref. > Feuil2) ?????
Tous les autres numéros d'agent 11 à 24 > seraient pour les Feuill3 et + > est-ce bien cela ?
Autre chose > si je suis sur la Feuil2 > le Criteria1:=LO - C1 > que sont LO et C1 ????
ric
Alors les numéros d'agents sont créés dans la colonne A par une macro qui n'est pas présente dans le fichier.
je ne vois pas la méthode que tu souhaites mettre en place par rapport à la boucle
Est-il impossible de faire un exemple de macro que je puisse adapter ?
lo-c1 est un agent mais je n'arrive pas à enlever les espaces entre le trait d'union.
dès que j'enlève les espaces et que je passe à une autre ligne, Excel remet l'espace de chaque côté du trait d'union.
Bonjour,
Je crois que je commence à comprendre ...
Je le dis souvent > "Je comprends vite, mais il faut m'expliquer longtemps avant."
Pour LO-C1 > étant donné que c'est un nom > donc du texte > il faut écrire "LO-C1"
ric
Bonjour,
Le code avance bien ...
J'ai pris pour principe que la colonne A de la feuille "BASE DE SAISIE" était la liste des Agents ...
Malgré qu'il n'y a pas d'Agents 1,2,3,4,5,6 ...
L'on travaillera ce bout-là plus tard ...
J'ai ajouté des "sierreur" sur les formules au haut de la feuille ainsi que dans les Feuil1 et 2 afin d'éliminer l'affichage des erreurs et des divisés par 0 quand les données sont absentes ...
Je suis rendu à l'étape de l'écriture dans les lignes du mois dans les plages Agent.
A+
ric
Merci beaucoup ric.
est ce que tu penses que je peux t'aider ?
Bonjour,
Pas pour l'instant > c'est un peu long > je suis constamment sollicité pour autre chose ...
Confinement oblige ...
ric
Bonjour,
Voici une version préliminaire ...
Tu remarqueras Feuil1 et 2 > en A1 > j'ai ajouté l'année > une information essentielle pour le critère date du filtre ...
L'année pourrait être à un seul endroit plus convivial > à revoir > tapée à la main ou liste de choix selon ce qui est détecté en colonne date de la base de saisie...
Les champs nommés > Feuil1 et 2 > premières cellules de chacun des blocs Agent > A12, 32, 52, etc. > pour facilité le saut de bloc agent ...
Je vois poindre les Agents et leur verre de bourbon > pour l'instant j'ai codé sur des chiffres > mais il y a une odeur de "string" qui s'amène ...
Les fichiers démos sont rarement 100 % représentatifs de la réalité > m'enfin > l'on adaptera ...
Un fichier avec un peu plus de données est souhaité afin de voir ce qui est transcrit dans Feuil1 et 2 est pertinent ...
Pour l'instant, la Feuil1 est inutile puisque le premier chiffre dans la colonne A de la base de saisie est le 7...
Les deux listes de choix du mois > Feuil1 et 2 > j'ai remarqué que tu as mis MACRO!$B$13 en référence à Cellule liée ...
Cela a pour effet de changer dans les 2 feuilles en même temps > au besoin l'on pourra les séparer ...
J'attends tes observations ...
ric
Bonjour ric,
je pourrais voir ça dans l'après-midi car pour moi, pas de confinement.
je te tiens informée dès que possible et je te remercie pour ton aide.
Bonsoir Ric,
Désolé pour cette réponse tardive. N'ayant pas ton niveau sur les macros je mets plus de temps pour les comprendre .
donc:
Tu remarqueras Feuil1 et 2 > en A1 > j'ai ajouté l'année > une information essentielle pour le critère date du filtre ...
Ce n'est pas obligatoire car le fichier représentera 1 année.
je pense qu'on peut d'office mettre dans la macro
LAnnee = 2020
Les champs nommés > Feuil1 et 2 > premières cellules de chacun des blocs Agent > A12, 32, 52, etc. > pour facilité le saut de bloc agent ...
Là je pense qu'il va y avoir 2 hic.
1- Dans le fichier exemple j'ai mis des chiffres dans les champs nommés afin de comprendre la liaison entre les blocs agents et agents mais dans le vrai fichier il y a des noms et prénoms. Ce n'est que dans la base de saisie qu'il y a des numéros tel que 1 ou LO-C1 associer à des agents.
2- Dans le vrai fichier il existe des blocs agents qui se situe côte à côte
Je vois poindre les Agents et leur verre de bourbon > pour l'instant j'ai codé sur des chiffres > mais il y a une odeur de "string" qui s'amène ...
Les fichiers démos sont rarement 100 % représentatifs de la réalité > m'enfin > l'on adaptera ...
entièrement raison sur le terme "String" et l'adaptation.
Un fichier avec un peu plus de données est souhaité afin de voir ce qui est transcrit dans Feuil1 et 2 est pertinent ...
En effet , je constate que c'est nécessaire d'y mettre plus de données.... je prépare ça. Pour le moment j'ai fait un test avec plus de données et le code rempli mais on dirait qui copie AF17 et qu'il le colle sur toute la ligne de "B" à "M" et sur les cellules où le résultat est en pourcentage, la valeur est multipliée par 1000.
Les deux listes de choix du mois > Feuil1 et 2 > j'ai remarqué que tu as mis MACRO!$B$13 en référence à Cellule liée ...
Cela a pour effet de changer dans les 2 feuilles en même temps > au besoin l'on pourra les séparer ...
Ce n'est pas nécessaire.
Je vais remettre un fichier exemple dans lequel il y aura plus de données, les noms et prénoms sur les blocs agents avec 2 blocs agent côte à côte et 2 macros qui te permettront de comprendre ce que j'avais mis en place et la raison pour laquelle je souhaite simplifier.
Merci encore
je prépare ça
Bonjour Ric,
Voilà j'ai fait le fichier exemple.
donc il y avait quelques erreurs.
tout d'abord le menu déroulant dépendait de la cellule B7 dans la feuille "MACRO" mais ça encore ce n'est qu'un détail (enfin je pense)
les blocs agents n'étaient pas au bon endroit à 1 ligne près.
voici ce que j'ai mis:
- rajout d'un bloc dans la "feuil1" à coté du premier bloc "O13"
- J'ai mis la Macro "numéquipe" qui permet d'attribuer un numéro d'agent en colonne "A" en fonction d'une adresse mail présente en colonne "AL"
- j'ai mis 2 macros E1 et E2 qui te permettront de savoir comment la macro que je souhaite faire doit réagir.
En les regardant , je suis sûr que tu comprendras les raisons qui me poussent à vouloir simplifier.
alors l'avantage d'avoir 1 macro /agent permet de voir quels sont les filtres qui ont été utilisés pour cet agent car c'est au début de la macro que je supprime les filtre mais pas à la fin, de ce fait une fois la macro terminée, je retourne sur la feuille "base de saisie" et je peux constater ce qui a été filtré de manière à corriger si il y a des erreurs.
- Si toutes les macros ont été bien configurer dans ce cas là je lance la macro "toutes les equipes" qui appel toutes les macros et que j'ai également mis dans le fichier.
Les fichier a légerement merder car je travail sous excel qui est installé une OS windows le tout sur un MAC
le fichier a normalement été récupérer et lorsque je le test, il fonctionne bien mais je constate qu'il manque 700Ko au fichier donc si il y a un soucis dit le moi.
Merci encore pour ton aide
Bonjour,
propos non pertinent ...
ric
???
j'ai dit une bêtise ?
Bonjour,
Désolé de mon propos non suffisamment significatif > c'est moi qui a posé une question à laquelle j'avais la réponse > mon cerveau a tilté quelques instants ...
J'ai donc supprimé cette question ...
Mais là > j'en ai une autre > si la Feuil1 est active > ce sont les agents 1 à 5 qui sont traités > Feuil2 > agents 6 à 10 ...
Étant donné que tu cherches à minimiser le code > il n'y a pas de petit gain > que penser de l'idée de traiter tous les agents d'un coup ?
ric
Bonjour,
Encore une question > E1 et E2 > ce que tu cherches à faire > c'est transféré un agent pour les 12 mois > contrairement à l'autre macro qui transfert tous les agents concernés pour un mois > est-ce bien cela ?
ric
alors non les macros E1 et e2 transfère les données en fonction de la cellule"B7" de la feuille "MACRO" c'est à dire en fonction du menu déroulant et ce sur 1 mois et non 12.
fais un essai avec tu verras.
utilse la macro "numequipe" qui va créer le numéro d'agentppuis la macro "E1", "E2" ou" toute les équipes"
concernant une macro qui transfert les données de tous les agents.....ok