Copier la plage d'une formule en VBA

Bonsoir,

J'ai passé plusieurs heures sur mon problème du week-end et impossible de trouver une solution, malgré quelques tentatives en VBA (novice aux commandes). Désolé si cela a déjà été posté, j'ai un peu de mal à mettre des mots sur le problème donc dur dur la recherche (de même que pour le titre). Bref le soucis en simplifiant:

J'ai une ligne disons de 10 cellules, dans lesquelles j'ai rentré dans chacune "=average(x1:x50)" mais avec un range totalement différent dans chaque cellule. Ex: premiere cellule: =average(A1:A20), deuxième cellule: average(D13:D35). Ect... Pas de soucis de ce côté.

Maintenant j'aimerai mettre dans la ligne du dessous l'écart-type de chaque plage.

Continuation de l'exemple: Sous la première cellule: =stdev(A1:A20), sous la deuxième cellule: stdev(D13:D35), Ect... Et là soucis.

Le faire manuellement prendrait des heures vu la quantité.

J'ai tenté en VBA de copier le range de la cellule du dessus, le problème c'est que soit je verrouille le range ($$) mais après il reste le même dans toutes les cellules ou j'applique la macro. Soit je ne verrouille pas et le range ne fait que glisser (deuxième cellule: =stdev(B2:B21)). J'ai essayé en cochant la case "relative reference" et sans, résultats différents mais rien ne marche.

N'hésitez pas à me dire si ce n'est pas très clair. Merci de votre aide.

Alex

PS: si il y a une méthode plus simple, je suis aussi preneur!

Bonjour,

une macro qui fait le remplacement de la fonction

mode d'emploi

mettre la nouvelle fonction sous les cellules contenant la fonction à remplacer

selectionner toutes ces cellules contenant la fonction à remplacer

lancer la macro

exemple

si A1 contient =SUM(D10:D20) et A2 contient=SUM(D15:D35)

pour remplace SUM par AVERAGE

mettre AVERAGE en B1 et en B2

selectionner A1 et A2

lancer la macro

cette macro devrait egalement fonctionner avec des versions non UK (à tester)

Sub remplacefonction()
' c cellule dans la plage selectionnée
For Each c In Selection

' f formule se trouvant dans la cellule c, dans la langue de la version excel installée
f = c.FormulaLocal

' g= contenu de la cellule située sous la cellule c (contient la nouvelle fonction)
g = c.Offset(1, 0)

' tor =fonction de la cellule c qu'il faut remplacer entre le signe "=" et "(" (exemple =SUM(A1:A10) tor=SUM 
tor = Mid(f, 2, InStr(f, "(") - 2)

' on remplace le contenu de tor par le contenu de g dans la formule
f = Replace(f, tor, g)

' on place la formule dans la cellule situe sous la cellule c
c.Offset(1, 0).FormulaLocal = f

Next
End Sub

Bonsoir

Sur qu'avec la fonction d'H2so4 cela sera plus facile

J'ai cherché une méthode manuelle

A voir (c'est juste pour le fun) : Utilisation du bloc-note

Superbe! Estomaqué quand j'ai vu le résultat! H2so4, rien compris à la macro mais elle fonctionne nickel merci beaucoup. Banzai64, méthode ingénieuse merci, ça va aussi me servir.

Bonne soirée à vous.

Rechercher des sujets similaires à "copier plage formule vba"