Insérer des données dans un fichier dynamique
Bonjour,
J'aurais besoin d'aide pour créer une macro qui permet d'insérer des données dans une ligne au-dessus d'une plage(nommée: "MaPlage"). Cette ligne change à chaque mois et il n'est donc pas possible de prendre en compte une cellule précise (ex:C11). En plus, les données à insérer je vais les chercher dans un autre classeur. Je cherche à récuppérer le total des produits mais chaque mois le nombre de ligne du dossier change aussi. Pour finir je fais la somme.
Voilà le code que j'ai commencé à faire mais je n'arrive pas à le faire fonctionner.
\\sélectionne MaPlage
Range("MaPlage").Select
\\Sélectionne la ligne d'avant
Range.Offset(-1, 0).Select
\\Sélectionne la cellule C11
Range.("C11").Select
ActiveCell.FormulaR1C1 = "=[Classeur2]Feuil1!R11C3"
Range.Offset("C11").Select
Selection.AutoFill Destination:=Range("C11:H11"), Type:=xlFillDefault
Range("C11:H11").Select
Range("I11").Select
ActiveCell.FormulaR1C1 = "=SUM(RC[-6]:RC[-1])"
Range("C11").Select
End Sub
Pouvez-vous m'aider?
Oups il manque un fichier
Salut gmb,
Merci pour ta réponse.
Saurais-tu comment on fait pour que ma macro prennent les données du total indépendamment de la ligne. C'est à dire que des mois ma données sera dans la case C11 mais des fois elle sera dans une autre case comme D11
Merci encore
Amdora
Bonjour
Amdora a écrit :comment on fait pour que ma macro prennent les données du total indépendamment de la ligne. C'est à dire que des mois ma données sera dans la case C11 mais des fois elle sera dans une autre case comme D11
Déjà, l'exemple que tu donnes n'est pas bon puisque les cellules C11 et D11 sont sur une même ligne.
Cela n'éclaire pas beaucoup ma lanterne.
Si les données peuvent être n'importe où, il faut bien que la macro ait une indication pour les retrouver. Elle ne peut pas deviner. Moi non plus d'ailleurs !
Bye !
En effet, tu as raison...
Chaque mois une ligne est masquée dans mon tableau et donc chaque mois le numéro de la ligne change. C'est pour ça que j'ai nommé une plage pour avoir un point de repère pour ma macro. Cette plage, elle ne bouge pas car j'insère une ligne pour le nouveau mois juste au-dessus. Cela est valable pour le fichier ou j'insère les données (fichier: Test3_Copie). Pour le fichier où je prends les données, la ligne du total change car des mois on vends plus de produits que d'autres. C'est un tableau croisé dynamique. C'est ça qui est compliqué...
Qu'en penses-tu?
Merci encore
C'est cool merci beaucoup.
Mais pour que ce soit parfait, il faudrait que quand j'ajoute des lignes dans le document Test2.1 et que j'active une macro, la valeur dans la plage soit toujours celle de 'Total produit livré'. Penses-tu que ce serait possible?
Amdora
Tu écris :
il faudrait que quand j'ajoute des lignes dans le document Test2.1 et que j'active une macro, la valeur dans la plage soit toujours celle de 'Total produit livré'.
Mais c'est bien ce que doit faire la macro puisqu'elle repère la ligne à copier en recherchant dans la colonne A le texte ‘’ Total produit livré’’
Mais je remarque que l’un fichiers que tu me retournes a changé de nom :
De ‘’ Test2.1.xlsx’’ ce fichier est passé à ‘’ Test2.1 (4).xlsx’’
Attention :
Lle nom de ce fichier intervient 2 fois dans la macro. Si tu le changes, il te faut le changer aussi dans la macro.
Autre remarque :
Il faut éviter de mettre des points (‘’.’’) dans le nom des fichiers. Excel le proscrit. Cela peut occasionner des surprises car, dans un fichier, le point est réservé à marquer le début de l’extention comme .xls ou .xlsm ou encore .xlsm
Bye !
Merci pour tes conseilles. J 'en prendrais bonne note.
ça marche super bien!
Etant débutante, je me demandais si je pouvais encore te demander, la signification de:
\\ signification de -6 et -1:
ActiveCell.FormulaR1C1 = "=SUM(RC[-6]:RC[-1])
\\ signification de R et C qui se trouve entre les guillemets:
ActiveCell.FormulaR1C1 = "=[Test2_1.xlsx]Feuil1!R" & ln & "C"
En tous cas merci beaucoup!
Bonjour
Amdora a écrit :signification de -6 et -1:ActiveCell.FormulaR1C1 = "=SUM(RC[-6]:RC[-1])
Je me sers de ce type d’instruction quand je veux mettre une formule dans une cellule avec une macro.
Mais comme je ne suis pas un génie, je me sers de l’enregistreur de macro. C’est très simple :
• J’écris la formule désirée dans la cellule désirée
• Je sélectionne cette cellule
• Je lance l’enregistreur de macro
• Je clique dans la barre de formule
• Je valide
• J’arrête l’enregistreur de macro
Après, c’est parfois un peu plus délicat car il faut bricoler le résultat obtenu, en particulier quand la formule doit être écrite à plusieurs endroits par la macro.
Il faut remplacer les références des lignes et des colonnes par des variables.
Dans l’instruction ci-dessus, on va écrire dans la cellule active la somme de la plage de cellule qui va de la cellule située sur la même ligne (que la cellule active) et sur la 6° colonne à gauche jusqu’à la cellule située sur la même ligne mais une seule colonne avant.
OK ?
Signification de R et C qui se trouve entre les guillemets:
ActiveCell.FormulaR1C1 = "=[Test2_1.xlsx]Feuil1!R" & ln & "C"
C’est du même tonneau.
On écrit que la cellule active est égale à une cellule qui est dans un autre classeur.
R veut dire row c’est-à-dire ligne. Et C veut dire column c’est-à-dire colonne
ActiveCell.FormulaR1C1 = "=R[4]C[1]" Cela signifie que l’on écrit dans la cellule active une formule qui dit : = la cellule dont la ligne est 4 lignes plus loin et sa colonne est une colonne plus loin.
ActiveCell.FormulaR1C1 = "=R14C5" Cela signifie que l’on écrit dans la cellule active une formule qui dit : = $E$14 , c’est-à-dire = la cellule qui est à la colonne 5 et à la ligne 14
Cette façon d’opérer, en mettant des valeurs absolues , c'est à dire des dollars dans les formules avant de les enregistrer est plus facile ensuite à bricoler.
Il suffit de sortir les numéros de lignes et de colonnes pour les remplacer par les noms de variables (ex ln et col) qui représentent les numéros de lign et de colonnes
Ex "=R14C5" deviendra : "=R" & ln & "C" & col
OK ?
Bye !
Yes merci beaucoup pour tes explications et ton temps!
Amdora