Pb boucle FOR et Paramétrage

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
Configuration: Windows 2000
Internet Explorer 6.0

11 réponses

  1. Contributeur
    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
    1. 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
      1. 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
        1. Pour info j'ai construit ma macro sur la feuille excel , en private. est ce la bonne solution ??
          0
          1. 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
            1. 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
              1. Pourquoi passer par une macro ???

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

                ;o)
                0
                1. 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
                  1. 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
                    1. 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
                      1. 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