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
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