Excel VB VBA multiplier des colonnes selon condition d'une autre colonne [Résolu]

Signaler
Messages postés
25
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
6 mars 2009
-
Messages postés
25
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
6 mars 2009
-
Bonjour,

Je souhaite faire ceci:

excelqy0.png http://img50.imageshack.us/my.php?image=excelqy0.png

Explication:

J'ai plusieurs colonnes disons A B C D E F... , A = Acte,  B= Coeff, C = Une valeur, D= Acte associé à valeur C, E = Une autre valeur F= un autre acte associé à valeur E

je souhaite que si ( A ) = "acte1" alors multiplier valeur(C) par Coeff(B)  et mettre le résultat dans D

et que si

(A)= "acte2" alors multiplier valeur( D ) par Coeff(B)  et mettre le résultat dans F

Ceci sur un grand nombre de colonnes et une colonne supplémentaire pour faire le total de la ligne:

Pour le moment je n'arrive pas à associer les valeurs à un acte mais j'ai rempli une colonne complète selon mon principe, voivi le code:

Public Sub Calcul()



    Application.Calculation = xlCalculationAutomatic
       
    Range("L5").FormulaR1C1 = "=RC[-2]*RC[-1]"
    Range("L5").AutoFill Destination:=Range("L5", Range("J5").End(xlDown).Offset(0, 2)), Type:=xlFillDefault
           
End Sub


La résultante est que ca multiplie valeur(C) par Coeff(B)  et met le résultat dans D mais pas selon les conditions souhaitées.

Si je me suis mal expliqué dites le moi je ferai le nécessaire pour mieux me faire comprendre.

Vous allez me dire qu'il existe la fonction SI(), mais je veux ceci pour une énorme quantité de données et je ne souhaite pas que les utilisateurs puissent modifier quoi que ce soit.

Merci pour votre aide,

Alexis

10 réponses

Messages postés
14769
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 février 2021
151
Bonjour

Dim i as long
For i=5 to 1000
    If Range("A5").Offset(i-1,0).Value="Acte1" Then
        Range("D5").Offset(i-1,0).Value=Range("C5").Offset(i-1,0).Value*Range("B5").Offset(i-1,0).Value
        Range("F5").Offset(i-1,0).Value=0
    ...
Next i

Cette boucle risque de prendre un peu de temps, mais elle fonctionne.

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Messages postés
14769
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 février 2021
151
Bonjour

Et un simple If :
If A="Acte1" Then
    D=C*B
elseif A="Acte2" Then
    F=C*B

End if

Ne te convient pas, remplace A, B, C, D et F par les cases correspondantes.

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Messages postés
25
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
6 mars 2009

Bonjour NHenry,

A chaque fois que j'ai un souci c'est toi qui me répond. Je suis persuadé que venant de ta part c'est la bonne solution. Je test avec ta manière et je te tiens au courant
Messages postés
25
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
6 mars 2009

ca ne marche pas.

La syntaxe complète serait dans mon cas:

Public Sub Calcul()



   
       
    If I  = "K" Then
    L = K * J
ElseIf  I = "CS" Then
    N = M * J



End If



End Sub


Mais étant donné que je ne me sers jamais de IF, j'ai du rater un truc...
Messages postés
25
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
6 mars 2009

Genre déclarer les variables?
Messages postés
14769
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 février 2021
151
Bonjour

Sur Excel, je voulais dire Remplacer A, B, C, ... par l'utilisation de l'objet Range ou Cells :

If Range("A2").Value="Acte1" Then
    Range("D2").Value=Range("C2").Value*Range("B2").Value
    Range("F2").Value=0
elseIf Range("A2").Value="Acte2" Then
    Range("F2").Value=Range("C2").Value*Range("B2").Value

    Range("D2").Value=0

end if

Bon, tu as aussi :
Range("...").Offset(...)
Cells(y,x) : x et y de base 1

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Messages postés
25
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
6 mars 2009

Ton code marche pour la première ligne pas pour toutes les colonnes..

Je vais test un truc, sinon si tu sais selectionner les colonnes pour que les cellules se multiplient entre elles?
Messages postés
14769
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 février 2021
151
Bonjour

Comme je te l'ais dis, utilise Range("...").Offset(...) pour changer de cellule par rapport à une autre (regarde dans l'aide VBA).

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Messages postés
25
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
6 mars 2009

tu peux m'expliquer le .offset

car je l'ai testé mais bon...

Désolé de t'importuner de la sorte mais quand ca veut pas ca veut pas.

Je veux juste qui me fasse le calcul de ligne 5 a 1000 :

If Range("A5:1000").Value="Acte1" Then
    Range("D5:1000").Value=Range("C5:1000").Value*Range("B5:1000").Value
    Range("F5:1000").Value=0

Pour sélectionner ce n'est pas comme ca? plutot rows ou colomns("D")....?

Merci
Messages postés
25
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
6 mars 2009

J'étais en train de chercher le offset bien cadencé pour mes besoins et c'est cool que tu sois intervenu..

Merci..