problème formule vba

cj welch

XLDnaute Occasionnel
Bonjour,

Je n 'arrives pas a corriger la formule suivante
Code:
.Range("L" & lig + 2).Formula = "=Round((G" & lig + 2 & ("+H" & lig + 2) & "* 10 / 100,2))"

Pour trouver le résulat suivant : ARRONDI((G+H)*10/100;2)

Merci pour votre aide

Cordialement
 

vgendron

XLDnaute Barbatruc
Hello

avec cette ligne
.Range("L" & lig + 2).Formula = "=Round((G" & lig + 2 & "+H" & lig + 2 & ")* 10 / 100,2)"

en général, pour détecter plus facilement les problèmes de syntaxe, je passe toujours par
formule="=Round((G" & lig + 2 & "+H" & lig + 2 & ")* 10 / 100,2)"
range("XXXX").formula=formule
 

vgendron

XLDnaute Barbatruc
Hello

il faut que tu remplaces ta formule
VB:
.Range("L" & lig + 2).Formula = "=Round((G" & lig + 2 & ("+H" & lig + 2) & "* 10 / 100,2))"

par cette ligne
VB:
.Range("L" & lig + 2).Formula = "=Round((G" & lig + 2 & "+H" & lig + 2 & ")* 10 / 100,2)"

et si tu me dis que ca ne marche pas non plus. alors..
vu que ta ligne de code commence par un point ".", j'ai présumé que tu utilises with... end with..
mais sans fichier exemple, impossible pour nous d'en etre sur.

pour ma préférence d'écriture: (strictement personnelle)
j'utilise toujours une variable "formule" qui est une chaine de caractères facile à contrôler pour voir ce qu'elle contient
puis j'applique cette formule à la range souhaitée: range("L5").formula=formule

tu dis avoir copié collé mon code.. j'ose espérer que tu n'as pas laissé Range ("XXX") :-D
 

herve62

XLDnaute Barbatruc
Supporter XLD
Bonjour tous , Slt Dranreb, vgendron
Vu le contexte je pense comprendre ( ce que je pratique aussi ) est que le fait de séparer le contenant du contenu
avec formule = xxxxx etc, va faire apparaitre si c'est le cas , directement l'erreur de syntaxe
et de plus en mode debug > "pas à pas" va permettre en passant la souris lors de l'arrêt sur la ligne de voir s'afficher
la valeur de la variable
D'ailleurs cette méthode très simple , devrait permettre à nombre d'ici de résoudre par eux mêmes les petits soucis
De même lorsque je cherche pour debugger , j'insère pas mal de msgbox intermédiaires pour afficher les résultats
ce n'est que mon avis , mais on avance plus vite et surtout à la fin on comprend mieux
 

cj welch

XLDnaute Occasionnel
bonjour vgendron et herver62,
vgendron, la formule que tu as corrigé marche super bien,

je te demandais d'expliciter ton conseil pour arriver a appliquer ta méthode et à trouver les erreurs moi même car je suis débutant en vba et je passe un temps fou a chercher ou mettre les parenthèses.
Regarde, j 'essai de modifier ce code qui fonctionne, en insérant la fonction si
Code:
. Range("O" & lig + 2).Formula = "=Round(Commande!" & [B3].Address & "*20/100,2)"
j' ai modifé comme cela:
Code:
.Range("O" & lig + 2).Formula = "=Round((IF("=L" & lig + 2 =["oui"],Commande!" & [B3].Address & "*20/100,0,2))"
je passe trop de temps a chercher les erreurs.
c'est pour cela que ta méthode m'interesse mais je n 'arrives pas a l'appliquer
cordialement
 

cj welch

XLDnaute Occasionnel
bonjour hervé62,
je te prie de trouver ci-joint un extrait du code
Code:
Set ShComm = Sheets("Commande")
With Sheets("Reversement")
  .Range("A11:X40").ClearContents 'pour supprimer les lignes de 11 à 40 et les colonnes de A à X
  Dim lig As Long
  For lig = 9 To ShComm.[A8].End(xlDown).Row
    .[O3].Value = ["POUR LE MOIS DE "] & [B1].Value
    .[V43].Value = [B2].Value
    .Range("A" & lig + 2).Value = ShComm.Range("A" & lig).Valu
    .Range("B" & lig + 2).Value = ShComm.Range("B" & lig).Value
    .Range("C" & lig + 2).Value = ShComm.Range("C" & lig).Value
    .Range("D" & lig + 2).Value = ShComm.Range("E" & lig).Value
    .Range("E" & lig + 2).Value = ShComm.Range("G" & lig).Value
    .Range("F" & lig + 2).Value = ShComm.Range("H" & lig).Value
    .Range("G" & lig + 2).Value = ShComm.Range("I" & lig).Value
    .Range("H" & lig + 2).Value = ShComm.Range("K" & lig).Value
    .Range("J" & lig + 2).Formula = "=F" & lig + 2 & ("+G" & lig + 2) & ("+H" & lig + 2) & ("+I" & lig + 2)
    .Range("K" & lig + 2).Formula = "=Round(F" & lig + 2 & "* 1 / 3,2)"
    .Range("L" & lig + 2).Formula = "=Round((G" & lig + 2 & "+H" & lig + 2 & ")* 10 / 100,2)"
    .Range("M" & lig + 2).Formula = "=Round(IF((sum(RC[-2]:RC[-1]))>(Commande!R3C2*0.5),0,((Commande!R3C2*0.5)-(sum(RC[-2]:RC[-1])))),2)"
    .Range("O" & lig + 2).Formula = "=Round(IF(=L" & lig + 2 =["oui"],Commande!" & [B3].Address & "*20/100,0,2))"
    .Range("P" & lig + 2).Formula = "=K" & lig + 2 & ("+L" & lig + 2) & ("+M" & lig + 2) & ("+N" & lig + 2) & ("+O" & lig + 2)
    .Range("Q" & lig + 2).Value = ShComm.Range("Y" & lig).Value
    .Range("R" & lig + 2).Value = ShComm.Range("W" & lig).Value
    .Range("S" & lig + 2).Value = ShComm.Range("R" & lig).Value

en rouge la formule qui me bloque
cordialement
 

Dranreb

XLDnaute Barbatruc
Elle est tellement incorrecte que je ne comprends pas ce qu'elle est censée faire.
Je vous conseille de la mettre au point dans une cellule, avec des $ pour les références fixes, pendant que vous enregistrez une nouvelle macro afin de pouvoir récupérer les FormulaR1C1 appliqués dans le code engendré.
 

vgendron

XLDnaute Barbatruc
Hello,
je doude que celle ci fonctionne également...
VB:
 .Range("J" & lig + 2).Formula = "=F" & lig + 2 & ("+G" & lig + 2) & ("+H" & lig + 2) & ("+I" & lig + 2)
comme expliqué plus haut, la formule doit etre une chaine de caractère
quand dans excel tu tapes:
=F2+(F3+F5)*2
en vba tu dois écrire
formule="=F2+(F3+F5)*2"
mais, comme tu souhaites visiblement rendre les indices (2 3 et 5) variables, tu dois décomposer la chaine de caractères pour remplacer les indices par ta variable Lig

formule ="="F" &lig &"+(F" &lig +1 &"+F" &lig+3 &")*2"
comme je te le disais.. le fait d'utiliser une variable fomule, tu peux facilement voir en mode Pas à pas (touche F8) la chaine qui sera affectée
 

Discussions similaires

Réponses
15
Affichages
393
Réponses
3
Affichages
242

Membres actuellement en ligne

Statistiques des forums

Discussions
312 294
Messages
2 086 895
Membres
103 404
dernier inscrit
sultan87