Appliquer une formule sur une plage de cellule grâce à une macro

Kaltral Messages postés 2 Date d'inscription samedi 24 novembre 2007 Statut Membre Dernière intervention 19 avril 2008 - 19 avril 2008 à 09:05
Kaltral Messages postés 2 Date d'inscription samedi 24 novembre 2007 Statut Membre Dernière intervention 19 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

2 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
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
0
Kaltral Messages postés 2 Date d'inscription samedi 24 novembre 2007 Statut Membre Dernière intervention 19 avril 2008
19 avril 2008 à 12:30
Oui et c'est normal  et en plus j'aime pas trop le tout cuit

Bon je vais voir comment je peux appliquer ce que tu viens de me dire

Merci de ta réponse

Je reviendrai si j'ai un problème
0
Rejoignez-nous