Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

SommeProd un peu spécial

5 réponses
Avatar
Grandola
Bonjour à tous,

je cherche à écrire une fonction qui agirait comme la fonction sommeprod
mais qui renverrait non pas un nombre mais une chaine de caractères
concaténation des signes "-", "0" et "1".

Je m'explique avec un exemple :

A B

1 7 A
2 B W
3 4 1
4 5 8
5 3 4
6 5 9


=FONCTIONMAGIQUE((A1:A6="5")*(B1:B6="8")) = "---1-0"

Explications pas à pas :

- la fonction regarde A1 et elle ne trouve pas "5" donc elle renvoie "-"

- puis la fonction regarde A2 et elle ne trouve pas "5" donc elle
concatène "-" à la chaine déjà existante. Ce qui nous donne "--".

- puis la fonction regarde A3 et elle ne trouve pas "5" donc elle
concatène "-" à la chaine déjà existante. Ce qui nous donne "---".

- puis la fonction regarde A4 et elle trouve "5". La fonction regarde
alors B4 et elle trouve "8". Elle concatène alors la valeur "1" à la
chaine déjà existante. Ce qui nous donne "---1".

- puis la fonction regarde A5 et elle ne trouve pas "5" donc elle
concatène "-" à la chaine déjà existante. Ce qui nous donne "---1-".

- puis la fonction regarde A6 et elle trouve "5". La fonction regarde
alors B6 mais elle ne trouve pas "8". Elle concatène alors "0" à la
chaine déjà existant. Ce qui nous donne le résultat final "---1-0"

En résumé :

Pas "5" en colonne A ----> "-"
"5" en colonne A ET "8" en colonne B ----> "1"
"5" en colonne A MAIS PAS "8" en colonne B ----> "0"


Voilà si quelqu'un peut m'aider je l'en remercie par avance.

5 réponses

Avatar
garnote
Ave Grandola,

Une suggestion qui pourrait peut-être te convenir :
Function magique(p1 As Range, v1, p2 As Range, v2) As String
cc = ""
n = p1.Rows.Count
For i = 1 To n
If p1(i).Value <> v1 Then
cc = cc & "-"
Else
If p2(i).Value = v2 Then
cc = cc & "1"
Else
cc = cc & "0"
End If
End If
Next i
magique = cc
End Function

Dans une cellule :
=magique(A1:A6;5;B1:B6;8)

Serge





"Grandola" a écrit dans le message de news:
4af02f52$0$19278$
Bonjour à tous,

je cherche à écrire une fonction qui agirait comme la fonction sommeprod
mais qui renverrait non pas un nombre mais une chaine de caractères
concaténation des signes "-", "0" et "1".

Je m'explique avec un exemple :

A B

1 7 A
2 B W
3 4 1
4 5 8
5 3 4
6 5 9


=FONCTIONMAGIQUE((A1:A6="5")*(B1:B6="8")) = "---1-0"

Explications pas à pas :

- la fonction regarde A1 et elle ne trouve pas "5" donc elle renvoie "-"

- puis la fonction regarde A2 et elle ne trouve pas "5" donc elle
concatène "-" à la chaine déjà existante. Ce qui nous donne "--".

- puis la fonction regarde A3 et elle ne trouve pas "5" donc elle
concatène "-" à la chaine déjà existante. Ce qui nous donne "---".

- puis la fonction regarde A4 et elle trouve "5". La fonction regarde
alors B4 et elle trouve "8". Elle concatène alors la valeur "1" à la
chaine déjà existante. Ce qui nous donne "---1".

- puis la fonction regarde A5 et elle ne trouve pas "5" donc elle
concatène "-" à la chaine déjà existante. Ce qui nous donne "---1-".

- puis la fonction regarde A6 et elle trouve "5". La fonction regarde
alors B6 mais elle ne trouve pas "8". Elle concatène alors "0" à la chaine
déjà existant. Ce qui nous donne le résultat final "---1-0"

En résumé :

Pas "5" en colonne A ----> "-"
"5" en colonne A ET "8" en colonne B ----> "1"
"5" en colonne A MAIS PAS "8" en colonne B ----> "0"


Voilà si quelqu'un peut m'aider je l'en remercie par avance.






Avatar
Grandola
Merci beaucoup Serge, c'est exactement ça. Magique ! Merci !


garnote a écrit :
Ave Grandola,

Une suggestion qui pourrait peut-être te convenir :
Function magique(p1 As Range, v1, p2 As Range, v2) As String


Avatar
Grandola
Oupsss, j'ai parlé un peu trop vite. :-(
En fait, la fonction MAGIQUE marche si les plages sont verticales mais
si elles sont horizontales, la fonction marche plus. :-(



Ave Grandola,

Une suggestion qui pourrait peut-être te convenir :
Function magique(p1 As Range, v1, p2 As Range, v2) As String
cc = ""
n = p1.Rows.Count
For i = 1 To n
If p1(i).Value <> v1 Then
cc = cc & "-"
Else
If p2(i).Value = v2 Then
cc = cc & "1"
Else
cc = cc & "0"
End If
End If
Next i
magique = cc
End Function

Dans une cellule :
=magique(A1:A6;5;B1:B6;8)

Serge





"Grandola" a écrit dans le message de news:
4af02f52$0$19278$
Bonjour à tous,

je cherche à écrire une fonction qui agirait comme la fonction sommeprod
mais qui renverrait non pas un nombre mais une chaine de caractères
concaténation des signes "-", "0" et "1".

Je m'explique avec un exemple :

A B

1 7 A
2 B W
3 4 1
4 5 8
5 3 4
6 5 9


=FONCTIONMAGIQUE((A1:A6="5")*(B1:B6="8")) = "---1-0"

Explications pas à pas :

- la fonction regarde A1 et elle ne trouve pas "5" donc elle renvoie "-"

- puis la fonction regarde A2 et elle ne trouve pas "5" donc elle
concatène "-" à la chaine déjà existante. Ce qui nous donne "--".

- puis la fonction regarde A3 et elle ne trouve pas "5" donc elle
concatène "-" à la chaine déjà existante. Ce qui nous donne "---".

- puis la fonction regarde A4 et elle trouve "5". La fonction regarde
alors B4 et elle trouve "8". Elle concatène alors la valeur "1" à la
chaine déjà existante. Ce qui nous donne "---1".

- puis la fonction regarde A5 et elle ne trouve pas "5" donc elle
concatène "-" à la chaine déjà existante. Ce qui nous donne "---1-".

- puis la fonction regarde A6 et elle trouve "5". La fonction regarde
alors B6 mais elle ne trouve pas "8". Elle concatène alors "0" à la chaine
déjà existant. Ce qui nous donne le résultat final "---1-0"

En résumé :

Pas "5" en colonne A ----> "-"
"5" en colonne A ET "8" en colonne B ----> "1"
"5" en colonne A MAIS PAS "8" en colonne B ----> "0"


Voilà si quelqu'un peut m'aider je l'en remercie par avance.










Avatar
garnote
Bonjour,

Alors essaie ceci :
Function magique(p1 As Range, v1, p2 As Range, v2) As String
cc = ""
n = p1.Count
For i = 1 To n
If p1(i).Value <> v1 Then
cc = cc & "-"
Else
If p2(i).Value = v2 Then
cc = cc & "1"
Else
cc = cc & "0"
End If
End If
Next i
magique = cc
End Function

Et bien sûr, s'il s'agit toujours de 5 et 8 :

Function magique(p1 As Range, p2 As Range) As String
cc = ""
n = p1.Count
For i = 1 To n
If p1(i).Value <> 5 Then
cc = cc & "-"
Else
If p2(i).Value = 8 Then
cc = cc & "1"
Else
cc = cc & "0"
End If
End If
Next i
magique = cc
End Function

Serge


"Grandola" a écrit dans le message de news:
4af13968$0$22892$
Oupsss, j'ai parlé un peu trop vite. :-(
En fait, la fonction MAGIQUE marche si les plages sont verticales mais si
elles sont horizontales, la fonction marche plus. :-(



Ave Grandola,

Une suggestion qui pourrait peut-être te convenir :
Function magique(p1 As Range, v1, p2 As Range, v2) As String
cc = ""
n = p1.Rows.Count
For i = 1 To n
If p1(i).Value <> v1 Then
cc = cc & "-"
Else
If p2(i).Value = v2 Then
cc = cc & "1"
Else
cc = cc & "0"
End If
End If
Next i
magique = cc
End Function

Dans une cellule :
=magique(A1:A6;5;B1:B6;8)

Serge





"Grandola" a écrit dans le message de news:
4af02f52$0$19278$
Bonjour à tous,

je cherche à écrire une fonction qui agirait comme la fonction sommeprod
mais qui renverrait non pas un nombre mais une chaine de caractères
concaténation des signes "-", "0" et "1".

Je m'explique avec un exemple :

A B

1 7 A
2 B W
3 4 1
4 5 8
5 3 4
6 5 9


=FONCTIONMAGIQUE((A1:A6="5")*(B1:B6="8")) = "---1-0"

Explications pas à pas :

- la fonction regarde A1 et elle ne trouve pas "5" donc elle renvoie
"-"

- puis la fonction regarde A2 et elle ne trouve pas "5" donc elle
concatène "-" à la chaine déjà existante. Ce qui nous donne "--".

- puis la fonction regarde A3 et elle ne trouve pas "5" donc elle
concatène "-" à la chaine déjà existante. Ce qui nous donne "---".

- puis la fonction regarde A4 et elle trouve "5". La fonction regarde
alors B4 et elle trouve "8". Elle concatène alors la valeur "1" à la
chaine déjà existante. Ce qui nous donne "---1".

- puis la fonction regarde A5 et elle ne trouve pas "5" donc elle
concatène "-" à la chaine déjà existante. Ce qui nous donne "---1-".

- puis la fonction regarde A6 et elle trouve "5". La fonction regarde
alors B6 mais elle ne trouve pas "8". Elle concatène alors "0" à la
chaine déjà existant. Ce qui nous donne le résultat final "---1-0"

En résumé :

Pas "5" en colonne A ----> "-"
"5" en colonne A ET "8" en colonne B ----> "1"
"5" en colonne A MAIS PAS "8" en colonne B ----> "0"


Voilà si quelqu'un peut m'aider je l'en remercie par avance.











Avatar
Grandola
Cette fois ci je crois pouvoir dire que c'est parfait ! MERCI à toi
Serge !!! :-)))



garnote a écrit :
Bonjour,

Alors essaie ceci :
Function magique(p1 As Range, v1, p2 As Range, v2) As String
cc = ""
n = p1.Count
For i = 1 To n
If p1(i).Value <> v1 Then
cc = cc & "-"
Else
If p2(i).Value = v2 Then
cc = cc & "1"
Else
cc = cc & "0"
End If
End If
Next i
magique = cc
End Function