• Initiateur de la discussion Initiateur de la discussion pascal82
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

pascal82

XLDnaute Occasionnel
Bonjour à tous,

J’ai une question très simple concernant le VBA.
Je désire réaliser un calcul par VBA et je n’arrive pas à afficher la valeur. Le résultat est soit entre guillemets ou affiche «# nom ?»
Si quelqu’un connaît la solution ou alors me donner la référence d’un tuto pour débutant ce serait super.
Code:
Sub testKK()

Dim Str_1 As String, cell As Range

 Str_1 = "=moyenne(AC20:AC79)"
 Range("AC1").FormulaR1C1 = "=moyenne(AC20:AC79)"
Set cell = Range("AC1")

End Sub
 
Re : Question simple VBA

Bonjour Pierrot93,

Un grand merci pour la rapidité et la clarté de la réponse. Cependant si je comprends bien, la fonction moyenne Excel est remplacée par « Average ». Le problème c’est que j’ai plusieurs formules Excel à transcrire en VBA et si le vocabulaire des opérations est différent je risque de vous solliciter très souvent.

Merci
 
Re : Question simple VBA

Salut Pascal, Pierrot 🙂

Pour savoir quelle est la traduction anglaise de la formule, voici la manière la plus simple de fonctionner (selon moi !)

1) Tu dois t'assurer dans Excel 2007 que l'onglet "Développeur" est disponible dans le Ruban Excel.
2) Clique sur l'enregistreur de macro et enregistre une nouvelle macro
3) Va sur la formule que tu veux traduire
4) Enlève la dernière parenthèse et ensuite rajoute la. (simplement pour faire comprendre à VBA qu'il y a eu une modification faite à la formule)
5) Clique sur le petit bouton stop bleu.
6) Ouvre VBA (ALT+F11) et dans le module, tu auras la traduction anglaise de ta formule.

Bonne continuité,

Cordialement,

Étienne
 
Re : Question simple VBA

Re bonjour,

Je me retrouve avec ma petite formule qui ne marche pas parce que je ne sais pas où et combien mettre de guillemets, ou alors faut-il décomposer la formule ?

Merci

Sub testKK()

Range("AC1").Value = WorksheetFunction.Average(Range("AC20:AC79"))
Range("AC1").Value = WorksheetFunction.Average(Range((((30+30)-2)*(30*((average(C20:C49))-(average(C20:C79)))^2+30*((average(C50:C79))-(average(C20:C79)))^2))/((2-1)*((DEVSQ(C20:C49))+DEVSQ(C50:C79)))))

End Sub
 
Re : Question simple VBA

Re,

attention, l'utilisation des fonctions de feuilles de calcul dans vba à ses limites.... autre exemple pour renvoyer la moyenne des nombres contenus dans un tableau virtuel...
Code:
Dim t() As Variant
t = Array(4, 8, 12)
MsgBox WorksheetFunction.Average(t)

n'étant pas précisément un formuliste, je ne pourrais t'aider plus sur ce coup là...
 
Re : Question simple VBA

Re,
une autre possibilité pour y parvenir serait de séparer ton calcul en plusieurs petites sous-sections, beaucoup plus facile à gérer qu'une formule de 3 kilomètres.

Par exemple, avec un exemple bidon :
Code:
Option Explicit
Sub Test()
Dim P(1 To 2) As Single

P(1) = (10 + 10) ^ 2 'Première partie de mon calcul
P(2) = (30 ^ 2) / 2 '2e partie de mon calcul

Range("A1").Value = WorksheetFunction.Average(P)

End Sub

Cordialement,

Étienne
 
Re : Question simple VBA

Re,
Je suis arrivé au résultat mathématique désiré, par contre je suis obligé de passer par des cellules intermédiaires.
Comment passer par des variables.
Merci
VB:
 [Sub testKK()

Range("AC1").Value = WorksheetFunction.Average(Range("AC20:AC49"))
Range("AD1").Value = WorksheetFunction.Average(Range("AC50:AC79"))
Range("AE1").Value = WorksheetFunction.Average(Range("AC20:AC79"))
Range("AF1").Value = WorksheetFunction.DevSq(Range("AC20:AC49"))
Range("AG1").Value = WorksheetFunction.DevSq(Range("AC50:AC79"))
Range("AH1").Formula = "=58*((30*(ac1-ae1)^2)+(30*(ad1-ae1)^2))/(af1+ag1)"
Range("AH1").Value = Range("AH1").Value

End Sub /Highlight]
 
Re : Question simple VBA

Re,
et quelque chose comme ceci ? Je n'ai pas pu tester par contre. Est-ce que tu pourrais joindre un fichier pour qu'on puisse faire des tests sur quelque chose de tangible ? Merci !

Code:
Option Explicit

Sub test()

Dim Valeur(1 To 5) As Single

Valeur(1) = WorksheetFunction.Average(Range("AC20:AC49"))
Valeur(2) = WorksheetFunction.Average(Range("AC50:AC79"))
Valeur(3) = WorksheetFunction.Average(Range("AC20:AC79"))
Valeur(4) = WorksheetFunction.DevSq(Range("AC20:AC49"))
Valeur(5) = WorksheetFunction.DevSq(Range("AC50:AC79"))
Range("AH1").Formula = "=58*((30*(Valeur(1)-Valeur(3))^2)+(30*(Valeur(2)-Valeur(4))^2))/(Valeur(4)+Valeur(5))"

End Sub

Si ça ne fonctionne pas, remplace la ligne "Range("AH1").Formula par ceci :
Code:
Range("AH1").Formula = "=58*((30*(" & Valeur(1) & "-" & Valeur(3) & ")^2)+(30*(" & Valeur(2) & "-" & Valeur(4) & ")^2))/(" & Valeur(4) & "+" & Valeur(5) & ")"

Cordialement,

Étienne
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Réponses
6
Affichages
777
Réponses
12
Affichages
731
  • Question Question
Microsoft 365 Question code VBA
Réponses
2
Affichages
615
  • Question Question
Microsoft 365 VBA sur outlook
Réponses
14
Affichages
1 K
Réponses
7
Affichages
1 K
Retour