excel - macro a executer sur chaque ligne d'une feuille - VB/VBA/VBS - Programmation
Marsh Posté le 14-06-2006 à 12:07:22
bonjour,
Bien sur, c'est même pour ça qu'on enregistre des macros !
Mais ça nécessite parfois (souvent) quelques modifications.
Il faut être plus précis dans ton questionnement et nous montrer la macro enregistrée pour avoir une réponse plus pertinente.
A+
Marsh Posté le 14-06-2006 à 12:21:17
voici mon code :
sub Macro1()
Dim onglet As Integer
For onglet = 2 To Sheets.Count
Sheets("Synthese" ).Select
'opération faite pour la ligne 8
Range("AC8" ).Select
ActiveCell.FormulaR1C1 = "='1'!R[36]C[-24]"
Range("AD8" ).Select
ActiveCell.FormulaR1C1 = "='1'!R[23]C[-22]"
Range("AE8" ).Select
ActiveCell.FormulaR1C1 = "='1'!R[31]C[-23]"
Range("AF8" ).Select
ActiveCell.FormulaR1C1 = "='1'!R[34]C[-24]"
Range("AG8" ).Select
ActiveCell.FormulaR1C1 = "='1'!R[36]C[-25]"
Range("AG9" ).Select
'j'aimerai refaire pareil pour les autres ligne de ma page
'synthese et que le nom de la feuille '1' soit incrémenté
End Sub
Marsh Posté le 14-06-2006 à 13:28:58
Ouch !
Euh... Là je me sens une petite faiblesse d'un seul coup !
ça doit être faisable mais je n'ai pas le truc en tête.
Les données sont modifiables donc tu ne peux pas pas coller directement la valeur, donc tu es obligé de passer par une liaison c'est ça ?
ça serait beaucoup plus simple si on pouvait mettre directement la valeur de chaque cellule de chaque feuille au lieu de faire un = ...
Sinon, va falloir attendre les grosses têtes !
A+
Marsh Posté le 14-06-2006 à 14:00:51
oui , mais j'ai besoin de liaisons ... c'est pour eviter de saisir 2 fois les données !
en fait , le coeur de la question est : peut on utiliser dans une fonction ... index par exemple, une variable "i" ....
ex : =index(A1:D5;i;8)
et que le "i" varie en fonction de la feuille ou je me trouve ...
merci
Marsh Posté le 14-06-2006 à 14:26:49
Juste pour essayer de d'aider....
tu veux faire quoi en clair, à part "Reproduire ce que je fais sur une ligne aux autres lignes et autres feuilles..."
Merci d'être un peu plus explicite
Marsh Posté le 14-06-2006 à 14:42:07
voila :
La première page est une cartographie d'ascenseur (par lignes : Lieu, no id, site, ...)
les pages suivantes sont des feuilles similaires qui font office de facture pour chaque équipement
donc autant de feuilles que de lignes sur la premiere page donc d'ascenseurs
il y a 2 étapes :
1 . Sur cette première feuille a droite ; j'ai un tableau synthèse dont les
infos doivent être "liés" avec une formule "=" avec les feuilles suivantes du classeur que j'ai nommé (1,2,3,4,5 ...)
donc 1er appareil (1ere ligne, doit récupérer infos de feuille 1
2eme appareil de feuille 2 ...
donc l'ideal serait comme j'ai essayé de le faire au dessus d'enregistrer l'opération sur une ligne et d'executer la macro sur la ligne d'apres et de se référer a la feuille d'apres ... etc
2. à l'inverse :
sur ces fameuses feuilles "factures" , il y a un petit tableau
(caractéristiques de l'appareil)
j'aimerai pouvoir récupérer les donnés de la "cartographie" et l'injecter dans ce tableau la pour chacune des feuilles ...
feuille 1 ; Caractéristiques de l'équipement 1 (lieu, no id, site, ...)
feuille 2 ; Caractéristiques de l'équipement 2 ...
j'ai essayé de faire une macro avec une inconnue "i" a laquelle j'injecte la valeur "activesheet.index" pour que je puisse utiliser le no de la feuille... et utiliser la fonction Index pour chercher les infos.
et donc d'exécuter la macro pour chacune des feuilles... mais ...
En gros j'aimerai pour l'exécution de la macro sur la feuille "i" qu'elle transmette les infos de la ligne "j" de la cartographie
"i+1" ==> "j+1" ...
voici mon mail perso si tu veu ke je t'envoi le document ...
merci
Marsh Posté le 14-06-2006 à 14:48:51
Entre temps j'ai vu ton autre post sur le même sujet.
Si ton problème c'est de passer en paramètre le nom de la feuille. Ca devrait t'aider
Sheets("Synthese" ).Select
feuille = 1
For i = 8 To 9
CelAc = "AC" & i
Sheets(feuille).Range(CelAc).Select
ActiveCell.FormulaR1C1 = "='" & feuille & "'" & "!R[36]C[-24]"
Next
Reste à modifier la formule "!R[36]C[-24]" en fonction de ce que tu veux récupérer
Ca t'aide ?
Marsh Posté le 14-06-2006 à 16:15:04
j'ai essayé de faire ca :
Sub Macro3()
Dim i As Integer, j As Integer
Sheets("CARTO" ).Select
For i = 8 To 52
feuille = i - 7
j = 44 - i
CelAc = "AC" & i
Range(CelAc).Select
ActiveCell.FormulaR1C1 = "='" & feuille & "'" & "!R[j]C[-24]"
Next
End Sub
mais dans la formule il ne veut pas reconnaitre le "j" ... c'est l'incrémentation de "j" qu'il me faut
Marsh Posté le 14-06-2006 à 16:18:58
Remplace
ActiveCell.FormulaR1C1 = "='" & feuille & "'" & "!R[j]C[-24]"
par
ActiveCell.FormulaR1C1 = "='" & feuille & "'" & "!R[" & j & "]C[-24]"
ca devrait aller mieux
Marsh Posté le 14-06-2006 à 11:48:14
bonjour, est ce qu'il est possible d'enregistrer un macro sur une ligne, et de la réexecuter sur les autres lignes que je veux ?