Pb boucle FOR et Paramétrage

jeanraoul65 Messages postés 11 Statut Membre -  
jeanraoul65 Messages postés 11 Statut Membre -
Bonjour,

J'ai un tableau de valeur
je souhaite afficher en colonne F le résultat du produit des colonne C par D , si D est non vide. Sinon laisser F vide

J'ai créé la macro suivante, mais cela me renvoie un message d'erreur, je pense à cause d'une erreur de syntaxe sur les "".

Sub Total()
Dim LastLigne As Long
Dim i As Integer
LastLigne = Range("b65535").End(xlUp).Row
For i = 4 To LastLigne
Cells(i, 6).FormulaLocal = "=SI(E "& i" <> """"; """" ; D "& i" * E "& i")"

Next i
End Sub

Merci d'avance pour votre aide
A voir également:

11 réponses

eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
Bonjour,

quand tu inscris une formule par vba il faut utiliser les fonctions en anglais, donc =IF...
Le plus simple pour avoir la traduction est de saisir la formule avec l'enregistreur de macro lancé.

eric
0
Polux31 Messages postés 7219 Statut Membre 1 204
 
Bonjour,

Essaie de faire ça

For i = 4 To LastLigne 
   If Cells(i, 4).Value <> "" Then
      Cells(i, 6).Value = Cells(i, 3).Value * Cells(i, 4).Value
  End If
Next i


;o)
0
jeanraoul65 Messages postés 11 Statut Membre
 
Ca marche nikel merci , c'est vrai que je me compliquais pour rien ...
DEux petites questions en supplément :
-comment faire pour que la macro se lance directement à chaque fois que je rentre ou modifie une valeur de la colonne D (ma colonne quantité).
-comment faire pour vérouiller le resultat de la cellule F ( resultat de la multiplication de Qté par le Prix unitaire donné par la macro précédente)

Merci encore
0
jeanraoul65 Messages postés 11 Statut Membre
 
Pour info j'ai construit ma macro sur la feuille excel , en private. est ce la bonne solution ??
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Polux31 Messages postés 7219 Statut Membre 1 204
 
re,

Pour info j'ai construit ma macro sur la feuille excel , en private. est ce la bonne solution ??

Non ce n'est pas la bonne solution ... si la feuille est supprimée, le code est perdu également.

Il est préférable de mettre le code dans un module indépendant (Alt + F11 ... Insertion -> Module)

-comment faire pour que la macro se lance directement à chaque fois que je rentre ou modifie une valeur de la colonne D (ma colonne quantité).
Pas très pratique : Il n'est pas commode d'intercepter un évènement d'une cellule particulière. Il est préférable de mettre un contrôle commandButton sur la feuille ou dans la barre de menu Excel.

-comment faire pour vérouiller le resultat de la cellule F ( resultat de la multiplication de Qté par le Prix unitaire donné par la macro précédente)
Que veux-tu dire par verrouiller ?
Tu peux verrouiller une ou des cellules par : Format -> Cellule ... -> Onglet protection.

;o)
0
jeanraoul65 Messages postés 11 Statut Membre
 
Re Polux,

Donc pour résumer j'ai mes 3 colonnes, Prix , quantité, total calculé

Par verouiller je veux dire qu'il ne soit pas possible de modifier les valeurs des celulles de la colonne "total calculé", les valeur sont issues de la macro précedente et on ne peux pas y toucher en cliquant dessus.

Pour ce qui est de l'automatisation de la macro cela serait quand meme pratique que mon total s'affiche dès que je rajoute une quantité , sans avoir besoin de cliquer sur un bouton.

Bien vu pour ce qui est de private , je n'avais pas du tout pensé à l'aspect suppression
0
Polux31 Messages postés 7219 Statut Membre 1 204
 
Pourquoi passer par une macro ???

Si dans la colonne F tu mets : = SI(D3 <> "";(C3 * D3);"") ... ça le fait pas ?

;o)
0
jeanraoul65 Messages postés 11 Statut Membre
 
Mon tableau est dynamique c'est pour cela que je passe par une macro , ta méthode utilisant = SI(D3 <> "";(C3 * D3);"") reprend mon tout premier post , c'est à dire copier cette formule à l'intérieur des cellules de la colonne C par l'intermediare d'une boucle for ,... ce que je n'arrive pas à faire
0
Polux31 Messages postés 7219 Statut Membre 1 204
 
Que veux tu dire par "tableau dynamique" ???

Tu dois saisir manuellement les données dans les cellules de colonne C ou D ? le calcul dans la colonne F avec la formule est dynamique ... je ne vois pas trop ce que tu cherches à faire.

;o)
0
jeanraoul65 Messages postés 11 Statut Membre
 
Ce que je veux dire c'est que mon nombre de ligne dans le tableau n'est pas fixe, ce que je veux faire c'est donc copier la formule jusqu'a la derniere ligne remplie du tableau , d'où mon utilisation de la boucle pour copier la formule jusqu'à cette derniere ligne
0
jeanraoul65 Messages postés 11 Statut Membre
 
Je crois avoir trouvé la solution grace à l'enregistreur nouvelle macro:

Sub Total()
Dim LastLigne As Long
Dim i As Integer
LastLigne = Range("b65535").End(xlUp).Row
For i = 4 To LastLigne

Range("F6").Select
ActiveCell.FormulaR1C1 = "= IF(RC[-1] <> """",(RC[-1] * RC[-2]),"""")"
Range("F6").Select
Selection.AutoFill Destination:=Range("F6:F" & LastLigne), Type:=xlFillDefault
Range("F6:F" & LastLigne).Select

Next i
End Sub

Je ne comprend pas bien la syntaxe du code mais cela à l'air de fonctionner...
Merci quand meme pour ton aide Polux
0