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

xeeel 25 Messages postés mardi 3 avril 2007Date d'inscription 6 mars 2009 Dernière intervention - 15 janv. 2008 à 12:01 - Dernière réponse : xeeel 25 Messages postés mardi 3 avril 2007Date d'inscription 6 mars 2009 Dernière intervention
- 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
Afficher la suite 

10 réponses

Répondre au sujet
NHenry 14128 Messages postés vendredi 14 mars 2003Date d'inscription 16 avril 2018 Dernière intervention - 15 janv. 2008 à 15:51
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de NHenry
NHenry 14128 Messages postés vendredi 14 mars 2003Date d'inscription 16 avril 2018 Dernière intervention - 15 janv. 2008 à 12:23
0
Utile
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
Commenter la réponse de NHenry
xeeel 25 Messages postés mardi 3 avril 2007Date d'inscription 6 mars 2009 Dernière intervention - 15 janv. 2008 à 12:36
0
Utile
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
Commenter la réponse de xeeel
xeeel 25 Messages postés mardi 3 avril 2007Date d'inscription 6 mars 2009 Dernière intervention - 15 janv. 2008 à 12:56
0
Utile
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...
Commenter la réponse de xeeel
xeeel 25 Messages postés mardi 3 avril 2007Date d'inscription 6 mars 2009 Dernière intervention - 15 janv. 2008 à 12:57
0
Utile
Genre déclarer les variables?
Commenter la réponse de xeeel
NHenry 14128 Messages postés vendredi 14 mars 2003Date d'inscription 16 avril 2018 Dernière intervention - 15 janv. 2008 à 14:12
0
Utile
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
Commenter la réponse de NHenry
xeeel 25 Messages postés mardi 3 avril 2007Date d'inscription 6 mars 2009 Dernière intervention - 15 janv. 2008 à 15:11
0
Utile
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?
Commenter la réponse de xeeel
NHenry 14128 Messages postés vendredi 14 mars 2003Date d'inscription 16 avril 2018 Dernière intervention - 15 janv. 2008 à 15:29
0
Utile
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
Commenter la réponse de NHenry
xeeel 25 Messages postés mardi 3 avril 2007Date d'inscription 6 mars 2009 Dernière intervention - 15 janv. 2008 à 15:33
0
Utile
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
Commenter la réponse de xeeel
xeeel 25 Messages postés mardi 3 avril 2007Date d'inscription 6 mars 2009 Dernière intervention - 15 janv. 2008 à 16:05
0
Utile
J'étais en train de chercher le offset bien cadencé pour mes besoins et c'est cool que tu sois intervenu..

Merci..
Commenter la réponse de xeeel

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.