Microsoft 365 Copier des données par VBA dans différentes feuilles

Aloha

XLDnaute Accro
Bonjour,

Dans une situation réelle, représentée par l'exemple ci-joint, un administrateur distribue des avances à des agents (P1 à P3).
Il inscrit les avances distribuées dans la feuille "Avances".

Ce que je recherche:
un bout de code VBA qui copie, chronologiquement dans les feuilles P1 à P3, les avances distribuées, comme je l'ai fait manuellement, de préférence automatiquement, càd que dès que l'administrateur saisit une avance dans la feuille "Avances" elle est copiée de suite dans la feuille respective..

Merci d'avance pour toute aide
Aloha
 

Pièces jointes

  • Distribution avances.xlsx
    11.6 KB · Affichages: 7

Aloha

XLDnaute Accro
Bonsoir,

et merci!
Je m'étais aussi mis à essayer d'adapter le code à la nouvelle situation où des colonnes sont déplacées, mais je n'y suis pas parvenu à 100%.

Ce que je ne comprends d'ailleurs pas au niveau des formules: Dans la feuille MODELE il y a en A2 la formule qui va chercher les initiales de l'agent pour qu'elles soient jointes à ses inscriptions, afin de voir dans TOUT qui a fait quelle dépense:
=RECHERCHEV(E2;LISTES!F3:H26;3;0)
qui ne fonctionne pas parce que chaque fois qu'un agent es ajouté dans la liste la formule se transforme en
=RECHERCHEV(E2;LISTES!F4:H26;3;0).

Aurais-tu une idée à quoi cela pourrait tenir? L'alternative serait que pour chaque inscription les initiales seraient "importées" par la même formule RECHERCHEV(), ce qui serait bien plus onéreux en puissance de calcul.

Bien que, je viens de faire un nouvel essai: j'ai re-corrigé la formule dans MODELE, j'ai ajouté un agent et la formule est correcte cette fois-ci. Je ne comprends pas ce qui se passe.

Je vais étudier le fichier que tu as joint.
A+

Bonne soirée
 
Dernière édition:

Jacky67

XLDnaute Barbatruc
Bonsoir,

et merci!
Je m'étais aussi mis à essayer d'adapter le code à la nouvelle situation où des colonnes sont déplacées, mais je n'y suis pas parvenu à 100%.

Ce que je ne comprends d'ailleurs pas au niveau des formules: Dans la feuille MODELE il y a en A2 la formule qui va chercher les initiales de l'agent pour qu'elles soient jointes à ses inscriptions, afin de voir dans TOUT qui a fait quelle dépense:
=RECHERCHEV(E2;LISTES!F3:H26;3;0)
qui ne fonctionne pas parce que chaque fois qu'un agent es ajouté dans la liste la formule se transforme en
=RECHERCHEV(E2;LISTES!F4:H26;3;0).

Aurais-tu une idée à quoi cela pourrait tenir? L'alternative serait que pour chaque inscription les initiales seraient "importées" par la même formule RECHERCHEV(), ce qui serait bien plus onéreux en puissance de calcul.

Bien que, je viens de faire un nouvel essai: j'ai re-corrigé la formule dans MODELE, j'ai ajouté un agent et la formule est correcte cette fois-ci. Je ne comprends pas ce qui se passe.

Je vais étudier le fichier que tu as joint.
A+

Bonne soirée
Re….
qui ne fonctionne pas parce que chaque fois qu'un agent es ajouté dans la liste la formule se transforme en
=RECHERCHEV(E2;LISTES!F4:H26;3;0).

Un des inconvénients de ne pas utiliser des tableaux structurés sans BD
Contournement

Utiliser
=INDEX(LISTES!H:H;EQUIV($E$2;Agents;0)+2)
 

Pièces jointes

  • Compta 17.12.2019.xlsm
    182.2 KB · Affichages: 6
Dernière édition:

Jacky67

XLDnaute Barbatruc
Re,
Merci, mais comment est-ce possible qu'une formule se "falsifie" "toute seule"?
Bonne nuit
Aloha
Re...
Elle ne se falsifie pas, elle s'adapte
Le tableau des noms est de longueur modifiable, si l'on ajoute/supprime un nom, elle adapte la plage, contrairement à une plage structurée qui adapte la plage selon son entête. Dans un tableau structuré on peut appeler une plage de cellules par son nom d'entête. Dans un tableau non structuré il faut nommer des plages, ce qui est fait pour "AGENTS"
Dans la formule que j'ai proposé, je fais référence à ce nom (AGENTS) parce qu'il existe déjà pour d'autres raisons et qu'il est nommée dynamiquement.
 
Dernière édition:

Aloha

XLDnaute Accro
Re,
Tout semble fonctionner à la merveille.
Je suis encore à la recherche d'une solution pour que toute la liste soit visible dans la fenêtre de validation et pour des mots contenus dans la liste Type de dépense soient proposés à la saisie de la ou des premières lettres.
J'ai créé un nouveau thème à cet effet:
A toutes fins utiles, afin de prévenir de travailler sur deux fichiers différents, je joins le dernier fichier. Il base sur ton dernier fichier.
A+
Aloha
 

Pièces jointes

  • Compta 20.12.2019.xlsm
    90.9 KB · Affichages: 9
Dernière édition:

Jacky67

XLDnaute Barbatruc
Re,
Tout semble fonctionner à la merveille.
Je suis encore à la recherche d'une solution pour que toute la liste soit visible dans la fenêtre de validation et pour des mots contenus dans la liste Type de dépense soient proposés à la saisie de la ou des premières lettres.
J'ai créé un nouveau thème à cet effet:
A toutes fins utiles, afin de prévenir de travailler sur deux fichiers différents, je joins le dernier fichier. Il base sur ton dernier fichier.
A+
Aloha
Comme il est dit/écrit ==> utiliser un Combobox
Et ce sera pareil pour la liste de validation de la distribution des avances si plus de 8 noms
Perso, je me refuse de faire cela sur cette structure, il faudra se contenter du scroll sur les listes présentes
Fait un nouveau post pour cette demande, peut-être que quelqu'un sera prêt à monter une usine à gaz.
Comme tout fonctionne, je mets fin de mon intervention sur ce fil.

Bon courage
Bonne fête de fin d'année
 

Aloha

XLDnaute Accro
Merci beaucoup pour ton aide. Je ne peux pas demander plus!
Je me permettrai juste de reposter si quelque chose clochait malgré les apparences.

Si je comprends bien tu veux dire que je poste le fichier actuel dans ce nouveau fil?
Si tu es d'accord (c'est ton oeuvre; je n'ai été que maneuvre), je pourrai le faire.

Bonnes fêtes à toi aussi

A l'un de ces jours
Aloha
 

Jacky67

XLDnaute Barbatruc
Merci beaucoup pour ton aide. Je ne peux pas demander plus!
Je me permettrai juste de reposter si quelque chose clochait malgré les apparences.

Si je comprends bien tu veux dire que je poste le fichier actuel dans ce nouveau fil?
Si tu es d'accord (c'est ton oeuvre; je n'ai été que maneuvre), je pourrai le faire.

Bonnes fêtes à toi aussi

A l'un de ces jours
Aloha
Re..
Après test de ta dernière version, je constate que les colonnes R:Z de la feuille modèle ont été masquées.
Or la feuille TOUT à besoin de ces colonnes
Si cela doit être effectif sur les fiches individuelles, il faut modifier le code de la feuille TOUT .
Version modifiée en pj

***Pj modifiée
 

Pièces jointes

  • Compta 20.12.2019.xlsm
    95.7 KB · Affichages: 14
Dernière édition:

Aloha

XLDnaute Accro
Bonjour,
Je n'ai pas encore étudié les modifications dans le code.
Je pensais qu'Excel VBA pouvait lire des données dans des colonnes masquées puisqu'elles sont tout de même présentes et pas effacées.

Et d'ailleurs, malgré ces colonnes cachées, les données étaient bien inscrites dans TOUT! Je viens d'en ajouter une dans PAGNOL Panisse et elle s'inscrit bien dans TOUT!

J'expérimente à présent avec les Comboboxes, dans le but d'amener Excel à proposer une inscription (ou plusieurs s'il y en a plus d'une qui commence par cette lettre) de la liste dès qu'on saisit la première lettre.
Et là je rejoins un peu l'idée que tu as lancée dans ton message 21.

Joyeux Noël et merci encore pour tout ce merveilleux travail!
Aloha
 
Dernière édition:

Aloha

XLDnaute Accro
Bonjour,

Permets-moi de te déranger encore une fois concernant le fichier sur lequel tu as travaillé
J'ai constaté deux choses qui ne sont pas optimales:

* il y a une colonne qui ne doit pas être imprimée dans les feuilles individuelles, la colonne T. Y a-t-il moyen de spécifier des colonnes non-adjacentes, donc R à S et U à Z comme zone d'impression?

Si je l'efface, alors les initiales de l'agent ne sont pas ajoutées à l'inscription dans TOUT. Par VBA il y a sûrement moyen de procéder autrement pour adjoindre les initiales, rendant la colonne T superflue, mais je n'ai aucune idée comment faire.

* et puis, je l'avais déjà mentionné (mon message #27; ta réponse dans ton message #28), comme les feuilles ne se mettent à jour qu'en les sélectionnant, le tableau Avances ne se met à jour qu'en sélectionnant toutes les fiches (jusqu'à une douzaine); y a-t-il moyen de mettre à jour le tableau sans devoir passer en revue toutes les fiches?

Bon Réveillon et Bonne Année 2020!
Aloha
 

Jacky67

XLDnaute Barbatruc
Bonjour,

Permets-moi de te déranger encore une fois concernant le fichier sur lequel tu as travaillé
J'ai constaté deux choses qui ne sont pas optimales:

* il y a une colonne qui ne doit pas être imprimée dans les feuilles individuelles, la colonne T. Y a-t-il moyen de spécifier des colonnes non-adjacentes, donc R à S et U à Z comme zone d'impression?

Si je l'efface, alors les initiales de l'agent ne sont pas ajoutées à l'inscription dans TOUT. Par VBA il y a sûrement moyen de procéder autrement pour adjoindre les initiales, rendant la colonne T superflue, mais je n'ai aucune idée comment faire.

* et puis, je l'avais déjà mentionné (mon message #27; ta réponse dans ton message #28), comme les feuilles ne se mettent à jour qu'en les sélectionnant, le tableau Avances ne se met à jour qu'en sélectionnant toutes les fiches (jusqu'à une douzaine); y a-t-il moyen de mettre à jour le tableau sans devoir passer en revue toutes les fiches?

Bon Réveillon et Bonne Année 2020!
Aloha
Re..
Si la colonne (T) ne doit pas être imprimée, il suffit de la masquer à la commande "Imprimer"
Sub Imprimer_fiche()
ActiveSheet.Columns("R:Z").EntireColumn.Hidden = False
ActiveSheet.Columns("T").EntireColumn.Hidden = True '******ajouter ceci******

''''''''
'''''''''
End Sub

Pour le reste , je n'ai pas compris>>"le tableau Avances"
Sur la feuille "avances", il n'y a que les noms d'agent qui se mettent à jour par VBA, les avances sont saisies manuellement sur cette feuille, non?
Mettre aussi la version du classeur utilisé.

Meilleurs vœux pour la nouvelle année.
 
Dernière édition:

Aloha

XLDnaute Accro
je n'ai pas compris>>"le tableau Avances"
Sorry, je me suis trompé!
Je parlais du tableau "Soldes des agents".
La question est donc: y a-t-il moyen de mettre ce tableau à jour sans passer par toutes les fiches?

En ce qui concerne de ne pas imprimer la colonne T, le bout de code que tu viens de me donner fait l'affaire!
La version du classeur est celle en annexe, "ton" avant-dernière version, avec laquelle j'ai expérimenté pour remplacer la saisie directe dans la feuille par une saisie par masque de saisie.
Je suis d'ailleurs sur le point de le joindre au nouveau fil que j'ai créé à cet effet.
 

Pièces jointes

  • Compta 31.12.2019 avec masque de saisie.xlsm
    90.9 KB · Affichages: 7
Dernière édition:

Jacky67

XLDnaute Barbatruc
Sorry, je me suis trompé!
Je parlais du tableau dont tu parles est saisie"Soldes des agents".
La question est donc: y a-t-il moyen de mettre ce tableau à jour sans passer par toutes les fiches?

En ce qui concerne de ne pas imprimer la colonne T, le bout de code que tu viens de me donner fait l'affaire!
La version du classeur est celle en annexe, "ton" avant-dernière version, avec laquelle j'ai expérimenté pour remplacer la saisie directe dans la feuille par une saisie par masque de saisie.
Je suis d'ailleurs sur le point de le joindre au nouveau fil que j'ai créé à cet effet.
Re..
Je conseillerais d'utiliser cette version
-J'avais fait des contrôles supplémentaires
-Supprimer le formatage sur la colonne A:A des feuilles individuelles
-Supprimer les formules en Z12-Z25 des feuilles individuelles
etc.....

Si le solde dont tu parles est le solde Initiale et que celui-ci est saisie dans les feuilles individuelles, la formule appliquée est à l'identique que celle déjà employée pour les dépenses.
La dernière pj que j'avais faite plus les modifications du jour

Peut-être à l'année prochaine:)
 

Pièces jointes

  • Compta 20.12.2019.xlsm
    106.5 KB · Affichages: 17

Aloha

XLDnaute Accro
Bonjour et Bonne Année!

Merci

Le solde final dans le tableau Soldes des agents dans la feuille AVANCES ne se met pas à jour lorsque je distribue une avance, parce que la formule va chercher les avances dans la feuille individuelle. Si je vais la chercher dans le tableau des avances, alors tout est ok, puisque, de toute façon, lorsque d'autres valeurs du tableau changent, elles sont changées dans la feuille individuelle, qui est donc mise à jour pour ces valeurs; seules les avances font exception, parce qu'elles ne nécessitent pas un passage par la feuille.
Donc, si en M4 je remplace la formule =SI(I5="";0;SI(INDIRECT("'"&$I5&"'!O7")>0;INDIRECT("'"&$I5&"'!O7");0)) par la simple formule =J5+K5-L5, tout est ok!

Bonne journée
Aloha
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 187
dernier inscrit
ebenhamel