Macro pour recopier le contenu d'une cellule au bon endroit dans tableau
Bonjour,
Dans le cadre de l'automatisation du process de facturation de mon entreprise, je rencontre de nouveau un petit souci ; est-ce que l'un d'entre vous accepterait de m'aider
Au sein de mon fichier pour éditer les factures, dans la première feuille de calcul ("feuille 1"), j'ai un tableau de suivi qui se présente de la manière suivante (le tableau n'est pas à jour, mais normalement les colonnes I, K,L, M, L et P seront remplies) :
Et, lorsque je choisis un numéro de devis (en C2), cela m'édite ma facture dans une autre feuille de calcul (nommée "Facture"). La facture est ensuite enregistré en PDF à l'aide d'une macro.
DU COUP, mon objectif c'est de trouver un moyen de remplir automatiquement la colonne J (n° de facture), dès qu'une facture est éditée.
Le numéro de facture se trouve sur la facture (feuille de calcul "facture"), en C9 :
Pour récapituler, j'aimerais intégrer dans ma macro qui enregistre la facture en PDF un moyen de reporter le n° de facture (feuille : "Facture" en C9), dans le fichier de suivi (feuille "feuille 1")
Merci par avance à tout ceux qui accepteront de me donner un coup de main !
Lauriane
Lauriane,
Et, lorsque je choisis un numéro de devis (en C2),
as-tu le bout de code adhoc, j'aimerais voir quand tu choisis le devis en C2 comment est définie la ligne concernée de la feuille 1;
il suffira alors de faire après édition du pdf
var classeur = SpreadsheetApp.getActiveSpreadsheet();
var facture = classeur.getSheetByName('Facture');
var feuille1 = classeur.getSheetByName('Feuille 1');
feuille1.getRange('J' + ici_la_ligne).setValue(facture.getRange('C9').getValue())à optimiser avec ton code
Comme toujours, vous répondez présent pour m'aider, MERCI ! C'est vraiment incroyablement gentil de votre part.
En fait, je n'ai pas fait de macro pour récupérer la facture lorsque l'on choisi le n° de devis dans la liste déroulante (je me suis bien pris la tête lol !). J'ai tout de même fait une macro, mais beaucoup plus en amont dans le processus ; je vous explique. En gros, lorsque je lance la macro pour enregistrer un devis, dans mon fichier pour éditer les devis, cela fait également tourner le code suivant :
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Ne-pas-toucher'), true);
//supprimer les anciens liens
spreadsheet.getRange('A500:E500').activate();
var currentCell = spreadsheet.getCurrentCell();
spreadsheet.getSelection().getNextDataRange(SpreadsheetApp.Direction.DOWN).activate();
currentCell.activateAsCurrentCell();
currentCell = spreadsheet.getCurrentCell();
spreadsheet.getSelection().getNextDataRange(SpreadsheetApp.Direction.DOWN).activate();
currentCell.activateAsCurrentCell();
currentCell = spreadsheet.getCurrentCell();
spreadsheet.getSelection().getNextDataRange(SpreadsheetApp.Direction.DOWN).activate();
currentCell.activateAsCurrentCell();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
// réimporter les liens
var files = DriveApp.searchFiles("title contains 'Fac_'");
while (files.hasNext()) {
var file = files.next();
var data = [
file.getName(),
file.getUrl(),
file.getMimeType()
];
spreadsheet.appendRow(data);
}
Ce morceau de la macro me permet de récupérer dans mon drive le lien de tous les fichiers dont le nom contient "Fac_". Pour que vous comprenez la finalité, je vous explique rapidement la situation : nous recevons des devis en format PDF (impossible de l'obtenir dans un format excel) de la part de notre partenaire, au nom de notre client (nous sommes apporteur d'affaires). Je convertis donc systématiquement le devis dans un format excel, à l'aide d'un site gratuit, puis je le colle dans la première feuille de mon fichier. Cela m'édite le devis, avec notre commission. Puis je lance une macro pour enregistrer mon devis en format PDF dans le drive. Le problème se posait donc pour la facture : comment récupérer les données alors que le devis a été enregistré en PDF ? Du coup, lorsque j'édite un devis, j'édite en même temps une facture en format Google Sheet (grâce à vous !), mais cette facture comprend forcément des champs manquant (date de règlement du client /n° de facture...). J'ai donc un fichier "ressource" dans mon drive dans lequel est rangé toutes ces potentielles futures factures qu'il faudra par la suite compléter.
On en revient donc à mon fichier pour éditer les factures : l'objectif est de reprendre la facture 'ressource' pour la compléter. Pour ce faire, je ne voulais pas que l'utilisateur du fichier ait à lancer une macro (pour ensuite en relancer une pour l'enregistrement), donc je me suis dit que le meilleur moyen c'était de passer par une fonction 'importrange', mais il me manquait le lien des factures 'ressources'. D'où le bout de code ci-dessus pour récupérer le lien + le nom des fichiers qui s'appellent 'Fac_" (les factures 'ressources' s'enregistrent sous le nom : 'Fac-'n° du devis') => j'ai pas réussi à écrire une macro pour importer tous les liens directement à partir du dossier "ressources" du drive, donc je suis passé par le nom des factures ). Aussi, j'ai été obligée d'écraser les anciens liens à chaque fois que la macro est lancée, sinon cela me rajoutait les liens juste en dessous de ceux qui avaient été ajoutés lors du précédent lancement de la macro. Le faire directement lors de la macro d'enregistrement du devis me permet d'avoir toujours la liste des liens à jour.
Pour finir (et désolée pour la longueur de mon explication), j'importe donc les liens qui se trouvent dans mon fichier pour éditer les devis => dans mon fichier pour éditer les factures, et pour faire court, avec un recherchev je les relie au bon devis dans mon tableau de suivi. Ensuite, avec un autre recherchev connecté cette fois à la liste déroulante, je peux récupérer le lien de la facture 'ressource' qui correspond au n° de devis que je souhaite, puis l'utiliser dans une autre feuille de calcul avec la fonction importrange pour importer la bonne facture 'ressource' => il ne reste plus qu'à la compléter.
Je ne sais pas si ma méthode est astucieuse ou complètement stupide, mais c'est la meilleure idée que j'ai eu.
Pour le coup, je ne vois pas trop comment adapter votre code pour mettre le n° de facture sur la bonne ligne (feuille1.getRange('J' + ici_la_ligne).setValue(facture.getRange('C9').getValue())
Mais ce script est-il vraiment en relation avec cette action ?
lorsque je choisis un numéro de devis (en C2), cela m'édite ma facture dans une autre feuille de calcul (nommée "Facture")
Non il n'y a aucun script pour cette action. Juste un recherchev mixé à un importrange.
J'ai réussi à trouvé une solution ! Je vous remercie tout de même pour votre aide ! ^^