Excel VB VBA multiplier des colonnes selon condition d'une autre colonne

Résolu
xeeel Messages postés 25 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 6 mars 2009 - 15 janv. 2008 à 12:01
xeeel Messages postés 25 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 6 mars 2009 - 15 janv. 2008 à 16:05
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

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
15 janv. 2008 à 15:51
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
3
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
15 janv. 2008 à 12:23
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
0
xeeel Messages postés 25 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 6 mars 2009
15 janv. 2008 à 12:36
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
0
xeeel Messages postés 25 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 6 mars 2009
15 janv. 2008 à 12:56
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...
0

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

Posez votre question
xeeel Messages postés 25 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 6 mars 2009
15 janv. 2008 à 12:57
Genre déclarer les variables?
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
15 janv. 2008 à 14:12
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
0
xeeel Messages postés 25 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 6 mars 2009
15 janv. 2008 à 15:11
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?
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
15 janv. 2008 à 15:29
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
0
xeeel Messages postés 25 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 6 mars 2009
15 janv. 2008 à 15:33
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
0
xeeel Messages postés 25 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 6 mars 2009
15 janv. 2008 à 16:05
J'étais en train de chercher le offset bien cadencé pour mes besoins et c'est cool que tu sois intervenu..

Merci..
0
Rejoignez-nous