Appliquer une formule sur une plage de cellule grâce à une macro
Kaltral
Messages postés2Date d'inscriptionsamedi 24 novembre 2007StatutMembreDernière intervention19 avril 2008
-
19 avril 2008 à 09:05
Kaltral
Messages postés2Date d'inscriptionsamedi 24 novembre 2007StatutMembreDernière intervention19 avril 2008
-
19 avril 2008 à 12:30
Bonjour
Je vous explique mon cas:
Dans un fichier excel, je récupère des données dans d'autres fichiers et selon plusieurs variables (Nom de la personne, Mois de l'année, Type de produit, etc.)
Je vous donne l'exemple d'une formule :
SOMMEPROD((MOIS('[Suivi taux de transformation banque.xls]Suivi'!$I$5:$I$20000)MOIS($A$1))*(ANNEE('[Suivi taux de transformation banque.xls]Suivi'!$I$5:$I$20000)=ANNEE($A$1))*('[Suivi taux de transformation banque.xls]Suivi'!$A$5:$A$20000=B5)*(NON(ESTVIDE('[Suivi taux de transformation banque.xls]Suivi'!$E$5:$E$20000))))
Cette formule est appliquée sur plusiers plages de cellules (exemple : E5:E12, E14:E25, etc.) et plusieurs onglets (Janvier à Décembre)
Ma question : Une macro pourrait-elle appliquer cette formule sur les différentes plages de cellules et les différents onglets où elle doit être appliqué ? Si oui quelle est cette macro
A voir également:
Appliquer une formule sur une plage de cellule grâce à une macro
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 19 avril 2008 à 11:55
Bienvenue sur le site.
Comme stipulé dans les règlements, je ne te ferai pas le travail, mais je peux te donner le principe. Si tu bloques sur quelque chose, tu peux toujours revenir avec le bout de code qui ne fonctionne pas et on se fera un plaisir de t'aider si on peut...
Si te feuilles sont contiguës, tu pourrais utiliser leur Index pour créer une boucleFor i 1 to 12 ou For i 3 to 15
Sheets(i) .Range("E" & LigneDébut & ":E" & LigneFin).Formula = "= Sumprod....Month...Year...Not(IsEmpty..."
En utilisant Formula, ça deviendra portable d'une machine à l'autre même si elles ne sont pas du même langage. Mais les formules doivent être écrites en anglais avec la virgule comme séparateur. Si ce n'est pas nécessaire, tu peux utiliser FormulaLocal et mettre la formule en français.
LigneDébut et LigneFin sont des variables qui doivent être définies. Ça peut être fait par code, éventuellement...
Pour inscrire la formule, tu peux, comme dans l'exemple, définir toute la plage.
Tu inscris comme formule ce que tu inscrirais sur la première ligne de cette plage.
ex:
tu veux inscrire une formule dans la plage C5:C10
Range("C5:C10").Formula = "=SUM(A5:B5)"
Cette formule sera alors incrémentée d'une ligne à l'autre (A6:B6, A7:B7, ...)
Finalement, pour simplifier ta tâche d'inscription de formules, plutôt que d'y aller section par section pour chaque feuille, tu pourrais définir la dernière ligne de la feuille et inscrire ta formule d'un coup, même sur les lignes non nécessaires. Par après tu pourrais effacer, si nécessaire, les cellules qui n'ont pas besoin de formule.
Pour déterminer la dernière ligne de données de la colonne "A" d'une feuille, utilise ceci
DerniereLigne = Sheets(i).Cells(Rows.Count, "A").End(xlUp).Row
Bonne chance !
MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI