Mettre une valeur à droite d'une cellule en fonction de sa valeur

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

gvives

XLDnaute Occasionnel
Bonjour à tous,

Je suis en train de réaliser un petit fichier avec du VBA que j'ai presque fini mais il me manque malheureusement un code... Je ne connaît pas encore le VBA pour le déplacement et les multiplications...

Le principe est simple...

Cellule de gauche : "" --> Mettre dans la cellule de droite --> 0
Cellule de gauche : Faible --> Mettre dans la cellule de droite --> 1
Cellule de gauche : Moyen --> Mettre dans la cellule de droite --> 2
Cellule de gauche : Elevé --> Mettre dans la cellule de droite --> 3

Et aussi une petite multiplication à faire...

Mon fichier est en pièce jointe...

Merci beaucoup par avance...
 

Pièces jointes

Re : Mettre une valeur à droite d'une cellule en fonction de sa valeur

Bonsoir gvives,

Formule à mettre en D4 et à recopier en D5😀7; F4:F7; H4:H7.
Code:
=SIERREUR(EQUIV(C4;{"";"Faible";"Moyen";"Elevé"};0)-1;0)

Formule à mettre en I4 et à tirer vers le bas.
Code:
=D4*F4*H4

A+
 
Re : Mettre une valeur à droite d'une cellule en fonction de sa valeur

Re-bonsoir,

Voici donc unr solution par macro :
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Cancel = True
    If Target.Column = 3 Or Target.Column = 5 Or Target.Column = 7 Then
        Select Case Target
            Case ""
                Target = "Faible"
                Target.Offset(0, 1) = 1
            Case "Faible"
                Target = "Moyen"
                Target.Offset(0, 1) = 2
            Case "Moyen"
                Target = "Elevé"
                Target.Offset(0, 1) = 3
            Case "Elevé"
                Target = ""
                Target.Offset(0, 1) = 0
        End Select
        Cells(Target.Row, 9) = Cells(Target.Row, 4) * Cells(Target.Row, 6) * Cells(Target.Row, 8)
    End If
End Sub

A+
 
Re : Mettre une valeur à droite d'une cellule en fonction de sa valeur

Bonsoir à tous


Une proposition :​
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Cancel = True
    With Target
        If (.Column = 3 Or .Column = 5 Or .Column = 7) And .Row > 3 Then
            Select Case .Value
                Case "Elevé": .Value = "": .Offset(0, 1).Value = 0
                Case "Moyen": .Value = "Elevé": .Offset(0, 1).Value = 3
                Case "Faible": .Value = "Moyen": .Offset(0, 1).Value = 2
                Case Else: .Value = "Faible": .Offset(0, 1).Value = 1
            End Select
            Cells(.Row, 9).Value = Cells(.Row, 4).Value * Cells(.Row, 6).Value * Cells(.Row, 8).Value
        End If
    End With
End Sub



ROGER2327
#6294


Samedi 14 Sable 140 (Don Quichotte, champion du monde - fête Suprême Quarte)
24 Frimaire An CCXXI, 9,8715h - oseille
2012-W50-5T23:41:30Z


P.s. : Fort en retard, le roger !
(Un coup de téléphone un peu long... )
 
Dernière édition:
Re : Mettre une valeur à droite d'une cellule en fonction de sa valeur

Bonsoir,

Voyez cette macro dans le fichier joint :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'double-clic n'importe où sur une ligne
If Target.Row < 4 Then Exit Sub
Dim mem As Byte, c As Range
Cancel = True
mem = 1
For Each c In Intersect(Target.EntireRow, [C:C,E:E,G:G])
  c(1, 2) = Switch(c = "Faible", 1, c = "Moyen", 2, c = "Elevé", 3, True, 0)
  mem = mem * c(1, 2)
Next
Cells(Target.Row, "I") = mem
End Sub
A+
 

Pièces jointes

Re : Mettre une valeur à droite d'une cellule en fonction de sa valeur

Olalala Merciiii beaucoup vous pour votre aide 😉

J'apprends beaucoup en analysant vos codes... Et là avec deux solutions complètement différentes c'est vraiment super 😉

Merci Merci ...

A bientôt...
 
Re : Mettre une valeur à droite d'une cellule en fonction de sa valeur

Bonjour le fil, le forum,

Je n'avais pas fait attention que le double-clic en colonnes C E G devait incrémenter la cellule.

Je pense alors qu'il faut 2 macros événementielles :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If InStr(" 3 5 7 ", Target.Column) = 0 Or Target.Row < 4 Then Exit Sub
Dim a, i As Variant
Cancel = True
a = Array(0, "Faible", "Moyen", "Elevé", "")
i = Application.Match(Target, a, 0)
If IsError(i) Then i = 4
Target = a(i)
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range, a, b, mem As Byte, c As Range, i As Variant
Set r = Intersect(Target, Range("C4:I" & Rows.Count), Me.UsedRange)
If r Is Nothing Then Exit Sub
a = Array(0, "Faible", "Moyen", "Elevé")
b = Array(0, 1, 2, 3)
Application.EnableEvents = False
For Each r In r.EntireRow.Rows
  mem = 1
  For Each c In Intersect(r, [C:C,E:E,G:G])
    i = Application.Match(c, a, 0)
    If IsError(i) Then c = "": i = 1
    c(1, 2) = b(i - 1)
    mem = mem * c(1, 2)
  Next
  Cells(r.Row, "I") = mem
Next
Application.EnableEvents = True
End Sub
Notez qu'avec la 2ème macro on ne peut plus faire n'importe quoi en colonnes C à I.

Fichier (2).

A+
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour