XL 2019 Fonction "si" à répétition

Antoine77

XLDnaute Nouveau
Hello,
Désolé de déranger je souhaitais demander de l'aide avec une fonction que je n'arrive pas à écrire sur excel (c'est pour un cours d'informatique bureautique mdr). Je ne sais pas si mon énoncé va être clair :
Considérons la colonne B qui contient respectivement le mot "M1" en B1, "M2" en B2 ainsi que "M3" en B3. Considérons la colonne C qui contient la valeur initiale X en C1 (correspondant au mot M1), la valeur initiale Y en C2 (correspondant au mot "M2" et la valeur initiale Z en C3 (correspondant au mot "M3").
(Les valeurs X, Y et Z sont prédéterminées à l'avance).

Supposons qu'en B4 on trouve le mot "M2", je voudrai qu'en C4, excel m'écrive la fonction suivante : si B3 contient le mot "M2", alors écrire en C4 : C3+1, sinon, voir si (sur la ligne supérieure) B2 contient le mot "M2" et si oui écrire en C4 : C2+1, sinon etc.... Jusqu'à remonter toutes les lignes et trouver une ligne de B qui contienne le mot correspondant (en l'occurrence l'algorithme s'arrête à la deuxième ligne). Du coup, si en B10 par exemple, on a le mot "M2", l'algorithme s'arrête en B4 car c'est l'occurrence la plus proche où il va retrouver le mot "M2", donc en C10 il devra écrire C4+1 qui correspond à Y+1+1=Y+2

Par ailleurs, je voudrait qu'il me fasse ça mais avec les 3 mots : genre qu'il regarde simultanément si la cellule de B contient le mot "M1","M2" ou "M3" et qu'il applique la bonne stratégie en fonction du mot.

Si vous pouvez m'aider vous me sauveriez la vie. Merci par avance
 

job75

XLDnaute Barbatruc
Bonjour Antoine77, bienvenue sur XLD, salut djidji59430, Patrick,

Voyez le fichier joint et cette macro dans le code de la feuille (clic droit sur l'onglet et Visualiser le code) :
VB:
Private Sub Worksheet_Change(ByVal r As Range)
Set r = Intersect(r, Range("B4:B" & Rows.Count), UsedRange) 'à adapter éventuellement
If r Is Nothing Then Exit Sub
Dim col%, x$, i&
col = r.Column
For Each r In r 'si entrées multiples
    If r = "M1" Or r = "M2" Or r = "M3" Then
        x = r
        For i = r.Row - 1 To 1 Step -1
            If Cells(i, col) = x Then r(1, 2) = Cells(i, col + 1) + 1: Exit For
        Next i
    End If
Next r
End Sub
A+
 

Pièces jointes

  • Classeur(1).xlsm
    16.5 KB · Affichages: 5
Dernière édition:

Antoine77

XLDnaute Nouveau
Bonjour Antoine77, bienvenue sur XLD, salut djidji59430, Patrick,

Voyez le fichier joint et cette macro dans le code de la feuille (clic droit sur l'onglet et Visualiser le code) :
VB:
Private Sub Worksheet_Change(ByVal r As Range)
Set r = Intersect(r, Range("B4:B" & Rows.Count), UsedRange) 'à adapter éventuellement
If r Is Nothing Then Exit Sub
Dim col%, x$, i&
col = r.Column
For Each r In r 'si entrées multiples
    If r = "M1" Or r = "M2" Or r = "M3" Then
        x = r
        For i = r.Row - 1 To 1 Step -1
            If Cells(i, col) = x Then r(1, 2) = Cells(i, col + 1) + 1: Exit For
        Next i
    End If
Next r
End Sub
A+
Ça marche du tonnerre, merci beaucoup !!!!!
 

Discussions similaires

Statistiques des forums

Discussions
315 088
Messages
2 116 087
Membres
112 656
dernier inscrit
VNVT