> Tous les forums > Forum Bureautique
 une aide sur les macro
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
bisounours11
  Posté le 28/03/2014 @ 20:51 
Aller en bas de la page 
Petite astucienne

Bonsoir à tous et toutes

Voila j'ai 2 fichiers

le premier qui est ma base (sourcenet) et le second (1a30net) dans lequel je créé un ongle qui correspond à l'ordre de visite du fichier et dans j'ai mis des formules qui vont chercher des données dans la source.

mon probleme est que à chaque onglet il faut que je corrige dans la formule la ligne.

je pensais qu'avec une macro je pourrais ces onglet automatiquement mais je ne sais pas faire de macro.

merci de m'aider ou de me donner des sites qui pourraient me renseigner

je vous joindrez bien mes fichiers mais je sais pas le faire

Publicité
bisounours11
 Posté le 28/03/2014 à 20:58 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

voici mes liens pour les fichiers

http://cjoint.com/?DCCu2z2oSgr

http://cjoint.com/?DCCu43ieLyZ

merci

ferrand
 Posté le 29/03/2014 à 00:51 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Salut,

Dans l'état actuel de tes fichiers des macros ne seraient pas une solution rationnelle...

Il faut rendre ta fiche d'ordre de visite "générique" de façon qu'elle puisse afficher n'importe quel enregistrement de ta base à partir du numéro d'ordre de visite. Tu pourras alors n'en avoir qu'une pour consultation ou tu pourras la dupliquer autant que nécessaire si tu dois ajouter des commentaires ou des résultats sur chaque fiche...

Voilà une première version que tu pourras améliorer. Je ne mets pas d'explication dans le classeur, elles sont ci-dessous.

Le numéro de visite est ce qui conditionnera la recherche par tes formules, donc tu ne l'appelles pas par formule, tu le mets à la main, en F2.

Tu réserves les colonnes G à L pour des paramètres qui permettront de rendre tes formules recopiables.

Et tu réserves aussi les colonnes M et N pour traiter tes 3 concaténations qu'on est obligé de traiter à part.

Une fois au point et les formules fonctionnelles, tu masqueras les colonnes G à N.

Premier point - tu as inscrit ton numéro d'ordre de visite en F2, ce numéro figure en colonne B dans ta base, il convient d'abord d'indentifier sur quelle ligne se trouve celui que tu inscrit en F2.

En K2 tu mets la formule suivante : =EQUIV(F2;'[_source_net.xlsx]PUBLI CONTRATS'!$B:$B)

[Les noms des classeurs sont tels qu'ils sont chez moi, tu les ajusteras éventuellement.]

Cette formule te renvoie le numéro de ligne de ton ordre de visite.

En L2 tu mets cette autre formule : "'[_source_net.xlsx]PUBLI CONTRATS'!$B$"&K2

Cette formule te produit une chaîne de caractères correspondant à l'adresse de la cellule de la base qui contient ton numéro d'ordre de visite. Cette adresse est utilisable avec la fonction INDIRECT pour pointer sur cette cellule.

INDIRECT($L$2) dans une formule revient à taper la référence de cellule de ton numéro d'ordre dans la base.

Tous les contenus que tu veux appeler se trouvent sur la même ligne dans la base, on peut ainsi tous les atteindre au moyen d'une décalage colonne à partir de cette référence initiale.

Supposons que tu aies mis 2 en F2, si tapes la formule =DECALER(INDIRECT($L$2);;2), tu obtiendras le contenu de la cellule D3 de la base car le numéro 2 est en B3 et 2 colonnes plus loin se trouve D3.

Si tu comprends le principe on va pouvoir passer au 2e point. Je poursuis sur un post suivant car ça devient difficile quand ça s'allonge.

ferrand
 Posté le 29/03/2014 à 01:27 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Avant de passer au 2e point, je te signales que j'ai mis cellules K2 et L2 en gris foncé pour bien les repérer car elles contiennent les formules vues au 1er point qui définissent la référence que tu vas utiliser dans toutes tes autres formules.

Les colonnes G à L comme je l'ai dit sont réservées pour y mettre des paramètres qui faciliteront la recopie des formules. Elles font pendant à tes colonnes A à F utilisées pour la fiche.

Deuxième point - on va l'illustrer par un exemple avec la formule en cellule A2

En A2 tu veux obtenir le nom qui dans la base se trouve en colonne H. H étant la colonne 8 en les numérotant à partir de A, son décalage avec la colonne B (numéro) qui est la colonne 2 est donc de 6.

En G2, donc 1re colonne de la zone réservée que tu fais correspondre à A 1re colonne de la fiche, sur la même ligne, tu portes la valeur 6, soit le décalage colonne dans la base avec la colonne numéro.

Puis en A2 tu mets la formule suivante : =DECALER(INDIRECT($L$2);;G2)
[Edit: rectif, c'est en A2 bien sûr la formule !]

Dans les cellules B3, B4, D4, F4, etc. où tu recherches une valeur de la base, si tu as pris soin de porter la valeur des décalages respectivement en H3, H4, J4, L4, etc. tu peux y recopier la formule ci-dessus de A2 et elle fournira le résultat.

Comme tu affiches des zéros quand la cellule source est vide, j'ai fait une autre version de la formule : =T(DECALER(INDIRECT($L$2);;G2))

La fonction T force l'affichage texte et évite ainsi l'affichage de 0 quand on pointe sur une cellule vide, seulement quand il y a des nombres, elle n'affiche rien, donc à n'utiliser que s'il s'agit de valeurs type texte.

Dans ton classeur, j'ai utilisé la formule normale quand il s'agissait de nombres et la formule avec T pour du texte, mais si la cellule vide doit contenir des nombres, il faut enlever le T avec les parenthèses correspondantes.

J'ai coloré en jaune et orange les cellules de la zone G:L dans lesquelles j'ai porté les décalages (l'orange signale les cas où la formule est utilisée pour des nombres et le jaune pour du texte)

Je repasse sur un autre post pour le 3e point.



Modifié par ferrand le 29/03/2014 12:49
ferrand
 Posté le 29/03/2014 à 01:53 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Troisième point - ça va être plus court car le principe est semblable au 2e mais on ne peut l'appliquer de la même façon.

On va aussi l'illustrer par un exemple pour ta formule en D3.

En D3 tu veux concaténer les contenus des cellules de la base qui sont en décalage par rapport à la colonne numéro d'ordre de 11, 9 et 12 en les séparan par des virgules.

On va donc procéder en 2 temps : d'abord en M2, M3 et M4 je porte les décalages successifs constatés des cellules sources, respectivement 11, 9 et 12.

En N2, je mets la formule : =DECALER(INDIRECT($L$2);;M2)&","

Puis je la tire pour la recopier jusqu'en N4.

Dans la formule N4 (la dernière) je supprime la virgule, mais je laisse les "" qui empêcheront l'affichage d'un 0 si la cellule est vide.

Pour concaténer, en D3, je n'ai plus qu'à mettre : =N2&N3&N4

Pour les formules de B5 et D5, j'ai fait la même chose en M6:N11 et en M13:N17.

J'ai coloré ça en gris clair, de même que les cellules de la "zone réservée" où on aurait porté le décalage si les formules ne concernait qu'une seule cellule. Et dans ces cellules j'ai indiqué à titre de repérage la première cellule où se faisait le calcul, soit : N2, N6 et N13.

Tes classeurs regroupés, je n'ai touché qu'à la fiche 1.

http://cjoint.com/?DCDbZ6CfULB

bisounours11
 Posté le 29/03/2014 à 15:11 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

merci pour ta reponse je vais essayer de mettre tout cela en pratique car ca a l'air un peu compliquer je te tiendrais au courant en tout cas merci beaucoup

bisounours11
 Posté le 29/03/2014 à 17:23 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

Merci cela marche super bien par contre j'ai aussi le retour à faire c'est à dire qu'apres avoir fait toutes les fiches dans un onglet différent j'ai des information à mettre dans le tableau source

j'ai mis en violet de part et d'autre les données qui remonte est il possible de faire le meme systeme

je vais essayer de le faire mais si tu pouvais me donner un petit coup de main c'est pas de refus

merci beaucoup pour ton aide tres precieuse

bisounours11
 Posté le 29/03/2014 à 17:28 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne
ferrand
 Posté le 30/03/2014 à 13:43 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Ce qui fonctionne dans un sens n'est pas forcément adapté pour fonctionner pareillement en sens inverse !

Je vais aller directement sur le problème que pose ton "système de gestion" : ce que tu fais maintenant, en 2014, pourras-tu le réutiliser sans aucun changement en 2015 ? Non ! Or, hormis des ajouts ou autres nouveautés à introduire, ce que tu bâtis pour 2014 doit pouvoir tourner ad-eternam dans les mêmes conditions en 2015, dans 10 ans, dans un siècle et même au-delà ! Si ce n'est pas le cas, c'est que cela n'a pas été rationnellement conçu au départ.

Excel est parfaitement capable de te permettre de réaliser la gestion que tu sembles vouloir mettre en place (à l'examen de tes classeurs et de tes demandes), à condition d'organiser tes données pour exploiter au mieux ses fonctionnalités.

Résumons le schéma que tu projettes :

• Tu as un tableau-source qui rassemble une masse de données (colonnes ou champs de ton tableau) organisées par 'client' (lignes de ton tableau), ce qui constitue ta base de données source.

• Tu extrais de cette base un certain nombre d'informations qui vont t'être utiles pour accomplir une tâche annuelle pré-définie.

• Au cours de l'accomplissement de cette tâche, tu ajoutes des informations.

• En fin de tâche, tu veux que les informations ajoutées soient insérées (ajoutées) dans la base afin de la mettre à jour.

Alors, dans ce contexte, un système d'appel par formules peut fort bien te permettre d'extraire les données dont tu as besoin, mais pas de renvoyer dans la base les nouvelles données ajoutées. Il faudrait mettre des formules dans la base, ce qui n'est pas compatible avec le rôle qu'elle doit jouer et le statut de données permanentes de son contenu. Au stade actuel donc, une macro est nécessaire pour entrer "en dur" les données nouvelles dans la base. Cela est bien sûr faisable, cependant il reste que tant que tu ne repenses pas l'ensemble de ton système, on travaille sur du sable. Ce qu'on fait est purement ponctuel et sera à recommencer la prochaine fois !


Problèmes liés à la base source -

—› Enorme tableau, pas ou peu lisible [ça ce n'est pas très gênant pour une base de données, à condition de la 'lire' ailleurs que sur le tableau-source], mais qui semble appelé à se gonfler chaque année de nouveaux champs conjoncturels car relatifs à l'année considérée [ça c'est plus gênant car ce 'gonflement' est illimité et donc non maîtrisé].

—› Mélange de données 'permanentes' [ce qui ne signifie pas qu'elles ne doivent jamais être mises à jour !] (identification 'client', identification et caractéristiques de l''objet' géré, etc.) et de données annuelles (constats et mesures propres à une année, résultats annuels...) [là ce sont effectivement des données permanentes au sens strict, pas de mises à jour, elles doivent demeurer telles, on ne modifie pas un historique...]

Il est clair qu'il faut séparer ces données de nature diférente et d'utilisation non identique.

Les données que j'ai qualifiées de 'permanentes' doivent constituer une base principale distincte. Chaque enregistrement ('client') doit avoir un champ "identificateur" unique [je ne suis pas sûr du tout que le numéro d'ordre de visite qui a été utilisé puisse constituer un tel champ !] permettant de le relier sans ambiguïté aux autres données le concernant (en la circonstance les données annuelles). Une procédure de mise à jour doit être définie pour cette base principale (l'utilisation d'un formulaire est souvent le mode le plus adapté...)

Les données annuelles : en principe, quelle que soit l'année, on a les mêmes champs pour recueillir des données (comparables d'une année à l'autre). On peut donc contruire une base secondaire annuelle par année sur le même modèle. [Si on ajoute des champs à partir d'une année donnée, cela ne pose aucun problème, ce sont simplement des nouveautés introduites qui n'existaient pas les années précédentes...]

Au cas particulier, on peut fort bien imaginer que si la base source est constituée par un classeur Excel, on a une feuille pour les données 'permanentes' et des feuilles par année pour les données annuelles. [On voit tout de suite le gain qu'on peut tirer de cette organisation, ne serait-ce que pour extraire des données annuelles : au lieu d'avoir à farfouiller pour trouver dans quelle colonne on a bien pu placer telle donnée de telle année, on sait immédiatement dans quelle colonne qui ne variera pas se trouve la donnée et l'année indique immédiatement dans quelle feuille la trouver.]

Problèmes de consultation :

—› La fiche sur laquelle on a travaillé constitue clairement un outil de consultation, jusque là pas de remarque, mais pour appeler un enregistrement on se base sur un élément (le numéro d'ordre de visite) dont on n'est pas sûr qu'il soit un identificateur unique de l'enregistrement.

—› La consultation simultanée de données annuelles n'est pas à proscrire, loin de là ! Mais elles devraient pouvoir être appelées indépendamment (bien qu'en lien naturellement avec l'identificateur 'client'), l'utilisateur pouvant sélectionner les années à consulter...

—› On veut utiliser cette fiche de consultation pour en faire en quelque sorte un formulaire de saisie permettant d'introduire des données nouvelles dans la base.

Lorsqu'on construit un formulaire de saisie sous Excel, on utilise souvent un Userform, qu'on peut sans doute plus facilement adapter (avec un code VBA adéquat) à cette tâche. Pour la consultation, dans la foulée, on fait souvent de même, mais il est vrai que l'utilisation d'une feuille de calcul à cette fin peut permettre plus de souplesse et une meilleure présentation des données. Il n'est pas interdit de l'utiliser pour la saisie, ou d'en avoir un usage mixte consultation-saisie, mais il faut clairement séparer ces deux fonctions. Et dans ce cas du code VBA est nécessaire pour finaliser l'opération de saisie.

Il n'échappera à personne que les nouvelles données saisies, une fois insérées dans la base, doivent pouvoir être immédiatement rappelées en consultation. Sur une feuille de calcul cela implique des emplacements distincts (alors que dans un Userform on utilisera sans difficultés les mêmes contrôles pour un affichage en consultation ou pour valider une saisie).


En espérant t'amener à approfondir un peu plus ton 'système de gestion' pour le rendre viable, avec des fonctionnalités pérennes.

Je ne te cache pas par ailleurs que je considère comme une hérésie de dupliquer ta fiche en autant de 'clients' à visiter ! Une fiche devrait suffire !

En l'état actuel, recomposer totalement ta base-source est un travail qui demandera un certain temps ! Dans l'immédiat, je veux bien comprendre que tu puisses souhaiter introduire les données saisies relatives à la visite dans la base...

Je veux bien t'écrire une petite macro pour le faire, sachant que ce n'est qu'une solution ponctuelle, mais il faut me fournir les éléments pour cela : pour chaque élément à saisir (indiquer la cellule concernée de la fiche) indiquer dans quelle colonne de la base cela devra être inscrit.

Cordialement,

Publicité
bisounours11
 Posté le 30/03/2014 à 18:40 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

Je reconnais que c'est tres mais alors tres confus. Pour le moment c'est quelque chose de ponctuel pour cette année qui est fait dans l'urgence. En fait, j'ai besoin d'une fiche par client d'ou mes feuilles à répétition car je veux garder une trace de se qui est fait sur le terrain pour pouvoir les imprimer par la suite.

A partir des feuilles qu'on utilisent donc sur le terrain, d'autre données complémentaires sont remontées et qu'on note dans la source.

Par contre j'ai constaté que l'un ne va pas sans l'autre c'est dire que mes feuilles se mettrons à jours que si la source est ouvertes.

Ce que je crains aussi c'est qu'en fait pour 2015 on ne puisse pas récupérer les donnéees qui seront transmise à partir des feuilles que se soit avec mon systeme ou un autre.

Par contre pour mon urgence je veux bien que tu me fasse une macro pour récupérer mes données et on verra plus tard pour 2015

je te joins fichiers et dans la feuille 1 je je te marque la colonne correspondante à la source (le tout étant sur la meme ligne)

Je te remercie par avance de ton aide

Par curiosité je suppose que tu es informaticien programmeur.

Peux tu aussi m'indiquer des sites si tu connais sur lequel on peut apprendre à faire une macro par soit meme ou des livres clairs

encore merci

bisounours11
 Posté le 30/03/2014 à 18:53 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne
ferrand
 Posté le 31/03/2014 à 14:45 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Trop fatigant de dresser une liste .
Et de signaler que ton classeur source était modifié (avec une colonne en plus) .
Et de me renvoyer les éléments sur ton ancienne fiche (désormais caduque) .

Pas bien grave mais ça fait pas gagner du temps .


http://cjoint.com/?DCFow4RsOLy

Les 2 classeurs regroupés. Tu décompresses le zip et place les 2 classeurs dans le même dossier.

Et pour tester tu lances immédiatement le classeur .xlsm [extension changée car maintenant il contient des macros].

Seul ce classeur est à prendre en considération, j'ai mis les 2 pour que tu puisses tester immédiatement sans manipulations supplémentaires.

A l'ouverture, il te sera demandé si tu veux activer les macros, tu réponds affirmativement, sinon il ne se passera rien. Une première macro va se lancer automatiquement pour ouvrir le classeur source. Son ouverture est indispensable pour travailler avec l'autre. C'est pourquoi il convient que les deux classeurs soient dans le même dossier, de façon que la macro puisse le trouver...

Une fois la fiche ouverte, tu constateras quelques aménagements : les colonnes destinées à être masquées l'ont été, il y a 2 boutons et quelques autres indications.

Tu as défini 18 cellules dont le contenu est destiné à être transféré pour mettre à jour la base-source. En Q2, j'ai placé une formule qui comptabilise le nombre de ces 18 cellules qui ont été servies. C'est juste une indication qui peut t'être utile, si elle ne l'est tu peux effacer ce qui a trait à cette information, c'est sans incidence sur le reste.

[erreur de manipulation : le post est parti incomplet ! je poursuis sur le suivant pour plus de commodité]



Modifié par ferrand le 31/03/2014 14:46
ferrand
 Posté le 31/03/2014 à 15:41 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

[suite]

En T2 et T3 figurent le nom du classeur et celui de la feuille-source : c'est là que les macros viendront récupérer ces noms dont elles ont besoin. Et donc là que tu peux les modifier autant que nécessaire sans avoir à aller chercher où le faire dans le code. Il faut donc t'assurer qu'ils soient exacts pour que tout fonctionne normalement.

Si à l'ouverture du classeur, la première macro déjà indiquée ne trouve pas le classeur source (soit parce qu'il n'est pas dans le même dossier, soit parce que le nom indiqué en T2 n'est pas le bon), un message t'indique de l'ouvrir manuellement car il n'a pu l'être, et par la même occasion tu devras en profiter pour faire en sorte que la cause de l'incident soit éliminée.

Une fois servies tes cellules (en tout ou partie, tu fais comme tu le décides), le bouton "Tranférer saisies" lance la macro qui va recopier les données indiquées dans la feuille-source. Tu peux lancer autant de fois que tu veux, elle copiera le contenu de l'ensemble des cellules répertoriées tel qu'il est au moment où elle réalise l'opération dans la feuille-source (autrement dit si tu effaces des donnée ou si tu les modifies sur la fiche, l'action sur le bouton les effacera ou les modifiera sur la feuille-source).

Si une erreur se produit (toujours à cause des noms !) un message t'en informe et l'opération s'arrête (avant de copier puisqu'elle ne le peut pas).

Un message t'informe de la réalisation de l'opération (lorsqu'elle aboutit normalement) en t'informant du numéro de ligne dans la source concernée par la copie (au cas où tu aurais un doute sur ta fiche, tu peux aller vérifier... !)

J'ai ajouté un bouton : "Effacer données à transférer". Comme j'ai cru comprendre que tu vas dupliquer cette fiche un certain nombre de fois, il pourrait t'arriver d'en dupliquer une déjà servie pour un autre 'client'. Aucune importance pour les cellules dotées de formules, le changement de numéro de visite actualisera leur contenu. Mais les cellules contenant des données brutes ne seront pas mises à jour. Ce bouton te permet donc d'effacer si besoin les 18 cellules répertoriées (attention, il n'efface que celles-là et ne touche pas au reste). Si tu actionnais le bouton par mégarde, un message te demande confirmation de ta volonté d'effacer, et n'efface que si tu réponds oui.

Pour accéder aux macros, il te faut aller dans l'éditeur VBA [onglet Développeur ou Alt+F11 pour aller plus vite].

Dans l'éditeur, le volet supérieur gauche de l'éditeur, intitulé "Projet - VBA Project", dans l'arborescence du projet portant le nom de ton classeur-macro t'en liste tous les éléments. A la suite de la liste de feuille du classeur, tu verras un élément nommé ThisWorkbook, tu peux double-cliquer dessus pour ouvrir ce module qui contient la macro évènementielle se déclenchant à l'ouverture du classeur.

Sous le répertoire de composant intitulé Modules, tu trouveras Module1, qui contient les 2 macros attachées aux boutons.

Si tu dois déplacer les macros dans un autre classeur (dans lequel tu auras déplacé la fiche, sans quoi les macros ne servent à rien), il te suffira de copier la macro de ThisWorkbook et la coller dans le module ThisWorkbook du nouveau classeur. Tu peux faire la même chose pour Module1, après avoir inséré un module dans ton nouveau classeur (menu Insertion de l'éditeur > Module).

La duplication de la fiche à l'intérieur du classeur se fera avec tout son contenu, y compris les boutons qui continueront à pointer sur les mêmes macros.


Par curiosité je suppose que tu es informaticien programmeur.

Perdu ! Mais si cela t'intéresse, j'ai commencé à travailler avec des tableurs en 1986. Et si tu cherches des explications à la formulation de mes posts précédents, ce n'est pas dans le domaine informatique que tu les trouveras mais peut-être dans les fonctions d'auditeur que j'ai exercées quelques années (encore que mes formulations étaient plus "libres" que celles plus normées utilisées en matière d'audit...)

Peux tu aussi m'indiquer des sites si tu connais sur lequel on peut apprendre à faire une macro par soit meme ou des livres clairs

Tu n'as pas bien lu mes posts précédents ! Le problème actuel de ton système est conceptuel, ce qui n'a rien à voir avec l'informatique (ou disons très indirectement). C'est à partir d'un conception redéfinie dans son organisation tant générale que détaillée que le problème de sa matérialisation sur un support de nature informatique se posera... Apprendre à matérialiser une organisation confuse n'apporterait rien, sauf ajouter de la confusion.

bisounours11
 Posté le 31/03/2014 à 18:29 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

merci pour tout se que tu as fait pour moi

par contre je voulais savoir mais je crois que j'ai eu ma réponse, si je copie mes fichier de la première partie (avant les macro) sur une clé que j'enregistre cette clé sur un autre disque dur est ce que mes formules seront toujours valable ou devrais réajuster le nom de ma source sur mes fiche

sinon les sites c'est pour apprendre a faire des macro pas pour ce fichier la

en tout cas merci pour tout

ferrand
 Posté le 31/03/2014 à 19:58 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Pour les formules, si tu as suivi le début, la composition de l'adressage est faite en L2. Remplace la formule existante en L2 par celle-ci :

="'["&T2&"]"&T3&"'!$B$"&K2

Les noms du classeur et de la feuille proviendront ainsi de façon homogène de T2 et T3. Tu n'auras donc que ces 2 cellules à surveiller.

bisounours11
 Posté le 31/03/2014 à 20:28 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

si je change le nom de fichier source exemple à la place je met origine.xls est ce qu'en change le nom en T2 cela marchera

merci

ferrand
 Posté le 31/03/2014 à 20:51 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

OUI !! Me semblait être clair depuis le début !

La fiche réaménagée, avec formules et macros dans le classeur fonctionnera sans problème si en T2 et T3 figure les noms du fichier base Source et celui de la feuille.

Mais les noms exacts ! Si tu mets xls pour un fichier xslx...

Publicité
bisounours11
 Posté le 31/03/2014 à 20:55 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

ok merci pour tout

bisounours11
 Posté le 03/04/2014 à 12:24 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

Bonjour FERRAND

J'aurais encore besoin de ton aide pour une formule

dans la colonne F ligne 13 j'aurais besoin de la colonne U du dossier source

je sais que c'est un décaler de 19 colonne donc j'ai fait comme les autres mais le probleme c'est que dans cette colonne source c'est le résultat d'un calcul et il ne me le ramene pas

Pourrais tu encore une foi m'aider

merci par avance

bisounours11
 Posté le 03/04/2014 à 12:38 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

non c'est bon j'ai trouvé il faut que j'enlève le T

merci encore pour tout ce que tu as fait

ferrand
 Posté le 03/04/2014 à 12:56 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

bisounours11 a écrit :

non c'est bon j'ai trouvé il faut que j'enlève le T

La fonction T ne sert qu'à empêcher l'affichage de 0 si la cellule est vide, elle transforme les nombres en "", donc à n'utiliser que si le résultat attendu est du texte... (voir explication fournie dès le départ).

[C'est le pendant de la fonction N qui, elle, renvoie 0 pour toute valeur texte, ce qui permet parfois d'éviter qu'une formule affiche une erreur...]

ferrand
 Posté le 13/04/2014 à 16:24 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Suite MP -

Tu remplaces la macro de transfert des saisies par celle ci-dessous (ou tu modifies la précédente : les ajouts-modifs sont en rouge ; les 2 lignes en violet sont à supprimer) :

Sub TransférerSaisies()
Dim sce, cib, i%, n%, clasce$, fsce$, fiche As Worksheet

sce = Split("E11 F17 F8 D34 F34 E14 F13 B19 E19 F23 F24 F27 F30 F31 D21 D36 C30 C31")
cib = Array(74, 94, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113)

Set fiche = ActiveSheet
With fiche
clasce = .Range("T2").Value
fsce = .Range("T3").Value
n = .Range("K2").Value
End With
On Error GoTo nosce
With Workbooks(clasce).Worksheets(fsce)
On Error GoTo 0
'.Cells(n, 74).Value = fiche.Range("E11").Value
'.Cells(n, 94).Value = fiche.Range("F17").Value
For i = 0 To UBound(sce)
.Cells(n, cib(i)).Value = fiche.Range(sce(i)).Value
Next i
End With
MsgBox "Les données saisies sur la Fiche " & fiche.Name & " ont été reportées dans " _
& "la base Source, ligne " & n & ".", vbInformation, "Opération réalisée"
Exit Sub
nosce:
MsgBox "Le classeur Source doit avoir été ouvert et son nom exact ainsi que celui " _
& "de la feuille Source doivent figurer aux emplacements prévus dans la feuille " _
& "active.", vbCritical, "Erreur Source"
End Sub

Une fois ce remplacement fait, tu t'intéresses particulièrement aux 2 lignes que j'ai isolées et qui sont en caractères gras.

Il s'agit de 2 variables sce et cib qui stockent les listes de tranferts :

sce est la liste des cellules de la fiche dont le contenu doit être transféré sur ta base,

cib est la liste correspondante des colonnes de la base accueillant les valeurs transférées.

Ces deux listes se correspondent exactement, c'est à dire que E11 de la fiche va dans la colonne 74 (BV) de la base, F17 dans la colonne 94 (CP), etc. C31 dans la colonne 113 (DI). Il s'agit des listes des 18 cellules initialement concernées.

Si tu dois apporter des modifs ou faire des ajouts, tu le fais dans ces 2 listes, en veillant particulièrement à respecter la correspondance.

Dans sce, la liste est constituée par une chaîne (entre guillemets) à l'intérieur de laquelle les références (au format A1) des cellules de la fiche sont séparées par une espace. Tu veilles bien à ce qu'il n'y ait à l'intérieur de cette chaîne que les références de cellules dans ce format séparées par une seule espace (et aucun autre signe, et pas d'espace au début ou à la fin).

Dans cib, la liste des colonnes correspondantes de la base est constituée par une liste de numéros de colonnes séparés par des virgules. Pour en ajouter tu fais de même, après avoir converti les lettres de colonnes en numéros (les colonnes d'une feuille vont de 1 [A] à 16384 [XFD]).

Pour le reste, toutes les indications utiles figurent dans mes posts précédents. Tu t'y reportes. Utilement en ce qui concerne les conseils lors du déplacement de la macro. Elle ne fonctionnera pas sans la fiche modèle que j'ai aménégée, car elle y puise les paramètres dont elle a besoin, notamment les noms de classeur et de feuille de la base, ainsi que la ligne où doit s'opérer le tranfert.

Si tu modifies la variable sce, opère également la même modification (par recopie) de la même variable dans la macro d'effacement, si tu veux conserver son usage.

PS- Si tu rencontres des difficultés, cela ne fait que confirmer que ton système est à revoir entièrement...

bisounours11
 Posté le 13/04/2014 à 20:25 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

je te remercie pour ta réponse qui est très rapide et je reconnais que notre système est très mais alors très merdique

Publicité
Page : [1] 
Page 1 sur 1

Vous devez être connecté pour participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
59 €Disque dur Seagate BarraCuda 2 To à 59 €
Valable jusqu'au 25 Janvier

Amazon propose actuellement le disque dur Seagate BarraCuda - 2 To (ST2000DM008) à 59 € livré gratuitement. On le trouve ailleurs autour de 69 €. Ce disque dur 3.5 pouces SATA III tourne à 7200tr/min et possède 64Mo de cache. 


> Voir l'offre
-40%-40% sur le coin des affaires chez LDLC avec le code SOLD10
Valable jusqu'au 22 Janvier

LDLC propose actuellement 40% de réduction sur son coin des affaires qui regroupe des produits neufs en fin de série ou des produits reconditionnés. N'hésitez à parcourir les différentes rubriques, il y a vraiment des choses intéressantes. Saisissez le code SOLD10 dans votre panier pour profiter de l'offre.


> Voir l'offre
64,99 €Alimentation PC Corsair CV650 650W à 64,99 €
Valable jusqu'au 25 Janvier

Boulanger fait une promotion sur l'alimentation PC Corsair CV650 650W à 64,99 € au lieu de 80 € ailleurs. Cette alimentation certifiée 80+ Bronze dispose d'un ventilateur thermorégulé de 120 mm qui assure le refroidissement silencieux de votre système, tandis que son format compact s’adapte facilement à presque tous les boîtiers PC modernes avec une longueur de seulement 125mm.


> Voir l'offre

Sujets relatifs
Aide macro calculatrice
Suppression de lignes à l'aide d'une macro
Aide pour macro
Aide écriture macro
Besoin d'aide pour bug dans macro calc
aide pour une macro
Excel 2007 imprimer à l'aide d'une macro
aide pour une macro
aide macro excel 2000
Besoin d'aide pour faire une Macro
Plus de sujets relatifs à une aide sur les macro
 > Tous les forums > Forum Bureautique