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

Prochaine valeur... mais avec des trous

29 réponses
Avatar
JièL
Salutatousse

je cherche une formule (de préférence) qui me donnerait le n° suivant
dans une série de condition en tenant compte des trous éventuel

exemple
AAA O 1
AAA O 2
AAA O 3
AAA O 18256
AAA N 1
AAA N 2
AAA N 3
AAA N 4
BCD O 1
BCD O 5
BCD O 6
BCD N 7

Si je cherche le n° suivant pour AAA-O ça devrait être 4.
Pour AAA-N c'est 5, BCD-O=2 et BCD-N=1

Une idée ?

en vous remerciant de faire chauffer vos neurones par cette chaleur ;-)

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est là : http://faq-outlook.fr/

Boycott des questions venant de CDO
http://faq-outlook.fr/viewpage.php?page_id=2

9 réponses

1 2 3
Avatar
isabelle
bonjour JièL,

en espérent que ce message s'affiche et que tu le voie,

=MaRecherche($A$1:$A$100;E1;F1)

Function MaRecherche(plg As Range, val1 As Range, val2 As Range) As Integer
For Each c In plg
x = x + 1
If Cells(c.Row, 1) = val1 And Cells(c.Row, 2) = val2 And Cells(c.Row, 3)
= "" Then
MaRecherche = Cells(c.Row - 1, 3) + 1
Exit For
End If
Next
End Function

isabelle

JièL a écrit :
Salutatousse et mercitatousse aussi, mais... je me suis mal exprimé.

Vos formules et macros sont parfaites, mais ce que je voudrais c'est
trouver la prochaine valeur (en tenant compte des trous) selon un
critère, pas sur chaque cellule de la colonne adjacente

Dans mon exemple les colonnes A B et C qui contiennent mes données.
Dans la cellule E1 je met AAA, dans F1 je met O, la cellule G1 doit
m'afficher 4 dans ce cas
Si E1 = AAA, F1 = N, G1 affiche 5
Si E1 = BCD, F1 = O, G1 affiche 2
...
je ne veux pas toutes les prochaines valeurs, juste LA prochaine selon
les critères saisis.
Dit différemment je voudrais un espèce de RECHECHEV "multicritère"
(laissez tomber cet aspect de multicritère, je m'en débrouille, mais
ça peut être utile si vous faites ça avec des SOMMEPROD par exemple)
et qui me donne la prochaine valeur en tenant compte des trous éventuels

en pseudo code ça donnerait =RVperso(E1&F1&99999;A1:C3000;3;VRAI)+1

Si ça peut vous être utile j'ai une colonne qui est ce code complet
(AAAO1, AAAO2 etc etc) et c'est moi qui le découpe en N cellules pour
pouvoir travailler sur la valeur (si ça embrouille, laissez tombez cet
aspect aussi ;-D)

Patrick, je pense que ta macro est une bonne base, faut juste que ça
utilise les critères saisis dans 2 cellules et que ça s'arrête au
premier "kivabien" et retourne la valeur +1

Encore merci



Avatar
JièL
Hello Isabelle de la Geôlière

isabelle a écrit :
bonjour JièL,

en espérent que ce message s'affiche et que tu le voie,



vi vi

=MaRecherche($A$1:$A$100;E1;F1)

Function MaRecherche(plg As Range, val1 As Range, val2 As Range) As Integer
For Each c In plg
x = x + 1
If Cells(c.Row, 1) = val1 And Cells(c.Row, 2) = val2 And Cells(c.Row, 3)
= "" Then
MaRecherche = Cells(c.Row - 1, 3) + 1
Exit For
End If
Next
End Function



presque bon... sauf que j'ai pas de cellule vide, juste un changement
dans la numérotation... je passe de la valeur 5 sur la ligne n à la
valeur 15 sur la ligne suivante par exemple

Donc il faudrait que je mixe ton exemple avec celui de Patrick pour
trouver la valeur suivante.

Si quelqu'un veut bien m'aider à terminer ceci...

Merci

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est là : http://faq-outlook.fr/

Boycott des questions venant de CDO
http://faq-outlook.fr/viewpage.php?page_id=2
Avatar
JièL
JièL a écrit :
Donc il faudrait que je mixe ton exemple avec celui de Patrick pour
trouver la valeur suivante.



oops... je voulais dire Daniel... merci à tous les 2 quand même ;-)

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est là : http://faq-outlook.fr/

Boycott des questions venant de CDO
http://faq-outlook.fr/viewpage.php?page_id=2
Avatar
isabelle
salut JièL,

donc si j'ai bien compris il faut vérifier une différence plus grande
que 1 au lieu de vérifier une valeur vide,

Function MaRecherche(plg As Range, val1 As Range, val2 As Range) As Integer
For Each c In plg
x = x + 1
If Cells(c.Row, 1) = val1 And Cells(c.Row, 2) = val2 And Cells(c.Row, 3)
-Cells(c.Row - 1, 3) > 1 Then
MaRecherche = Cells(c.Row - 1, 3) + 1
Exit For
End If
Next
End Function

si c'est pas ça, stp fournis moi un fichier avec données,

isabelle

JièL a écrit :
Hello Isabelle de la Geôlière

isabelle a écrit :
bonjour JièL,

en espérent que ce message s'affiche et que tu le voie,



vi vi

=MaRecherche($A$1:$A$100;E1;F1)

Function MaRecherche(plg As Range, val1 As Range, val2 As Range) As
Integer
For Each c In plg
x = x + 1
If Cells(c.Row, 1) = val1 And Cells(c.Row, 2) = val2 And Cells(c.Row,
3) = "" Then
MaRecherche = Cells(c.Row - 1, 3) + 1
Exit For
End If
Next
End Function



presque bon... sauf que j'ai pas de cellule vide, juste un changement
dans la numérotation... je passe de la valeur 5 sur la ligne n à la
valeur 15 sur la ligne suivante par exemple

Donc il faudrait que je mixe ton exemple avec celui de Patrick pour
trouver la valeur suivante.

Si quelqu'un veut bien m'aider à terminer ceci...

Merci



Avatar
JièL
Hello Isabelle de la Geolière

tout d'abord, merci de ton aide.

isabelle a écrit :
salut JièL,

donc si j'ai bien compris il faut vérifier une différence plus grande
que 1 au lieu de vérifier une valeur vide,



presque ;-)

Function MaRecherche(plg As Range, val1 As Range, val2 As Range) As Integer
For Each c In plg
x = x + 1
If Cells(c.Row, 1) = val1 And Cells(c.Row, 2) = val2 And Cells(c.Row, 3)
-Cells(c.Row - 1, 3) > 1 Then
MaRecherche = Cells(c.Row - 1, 3) + 1
Exit For
End If
Next
End Function

si c'est pas ça, stp fournis moi un fichier avec données,



http://cjoint.com/?giaGbarN5d
Je suis quasiment sûr qu'on es pas loin du résultat, mais je n'arrive
pas à faire marcher ta fonction.

Merci à toi et à tous ceux qui se penche sur le pb.

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est là : http://faq-outlook.fr/

Boycott des questions venant de CDO
http://faq-outlook.fr/viewpage.php?page_id=2
Avatar
Daniel.C
Bonjoour JièL.
Essaie cette variante de la fonction d'Isabelle :

Function toto(plg As Range, val1 As Range, val2 As Range) As Integer
x = plg(1).Offset(, 2).Value - 1
For Each c In plg
If c = val1.Value And c.Offset(, 1).Value = val2.Value Then
If c.Offset(, 2).Value <> x + 1 Then
toto = x + 1
teste = True
Exit Function
Else
x = x + 1
End If
End If
toto = c.Offset(, 2).Value + 1
Next c
If teste = False Then
toto = x + 1
End If
End Function
Cordialement.
Daniel


Hello Isabelle de la Geolière

tout d'abord, merci de ton aide.

isabelle a écrit :
salut JièL,

donc si j'ai bien compris il faut vérifier une différence plus grande que 1
au lieu de vérifier une valeur vide,



presque ;-)

Function MaRecherche(plg As Range, val1 As Range, val2 As Range) As Integer
For Each c In plg
x = x + 1
If Cells(c.Row, 1) = val1 And Cells(c.Row, 2) = val2 And Cells(c.Row, 3)
-Cells(c.Row - 1, 3) > 1 Then
MaRecherche = Cells(c.Row - 1, 3) + 1
Exit For
End If
Next
End Function

si c'est pas ça, stp fournis moi un fichier avec données,



http://cjoint.com/?giaGbarN5d
Je suis quasiment sûr qu'on es pas loin du résultat, mais je n'arrive pas à
faire marcher ta fonction.

Merci à toi et à tous ceux qui se penche sur le pb.


Avatar
JièL
S U P E R

Merci à vous 2... et à tous les autres aussi ;-)

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est là : http://faq-outlook.fr/

Boycott des questions venant de CDO
http://faq-outlook.fr/viewpage.php?page_id=2

Daniel.C a écrit :
Bonjoour JièL.
Essaie cette variante de la fonction d'Isabelle :

Function toto(plg As Range, val1 As Range, val2 As Range) As Integer
x = plg(1).Offset(, 2).Value - 1
For Each c In plg
If c = val1.Value And c.Offset(, 1).Value = val2.Value Then
If c.Offset(, 2).Value <> x + 1 Then
toto = x + 1
teste = True
Exit Function
Else
x = x + 1
End If
End If
toto = c.Offset(, 2).Value + 1
Next c
If teste = False Then
toto = x + 1
End If
End Function
Cordialement.
Daniel


Hello Isabelle de la Geolière

tout d'abord, merci de ton aide.

isabelle a écrit :
salut JièL,

donc si j'ai bien compris il faut vérifier une différence plus grande
que 1 au lieu de vérifier une valeur vide,



presque ;-)

Function MaRecherche(plg As Range, val1 As Range, val2 As Range) As
Integer
For Each c In plg
x = x + 1
If Cells(c.Row, 1) = val1 And Cells(c.Row, 2) = val2 And Cells(c.Row,
3) -Cells(c.Row - 1, 3) > 1 Then
MaRecherche = Cells(c.Row - 1, 3) + 1
Exit For
End If
Next
End Function

si c'est pas ça, stp fournis moi un fichier avec données,



http://cjoint.com/?giaGbarN5d
Je suis quasiment sûr qu'on es pas loin du résultat, mais je n'arrive
pas à faire marcher ta fonction.

Merci à toi et à tous ceux qui se penche sur le pb.






Avatar
Mgr T. Banni
si ces trous avaient été de mémoire, je pense que j'aurais pu t'aider, JièL
je ne peux donc que te souhaiter d'être en pleine userforme, comme on dit à
Cassis
Mgr T.B.

"JièL" a écrit dans le message de news:

S U P E R

Merci à vous 2... et à tous les autres aussi ;-)

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est là : http://faq-outlook.fr/

Boycott des questions venant de CDO
http://faq-outlook.fr/viewpage.php?page_id=2

Daniel.C a écrit :
Bonjoour JièL.
Essaie cette variante de la fonction d'Isabelle :

Function toto(plg As Range, val1 As Range, val2 As Range) As Integer
x = plg(1).Offset(, 2).Value - 1
For Each c In plg
If c = val1.Value And c.Offset(, 1).Value = val2.Value Then
If c.Offset(, 2).Value <> x + 1 Then
toto = x + 1
teste = True
Exit Function
Else
x = x + 1
End If
End If
toto = c.Offset(, 2).Value + 1
Next c
If teste = False Then
toto = x + 1
End If
End Function
Cordialement.
Daniel


Hello Isabelle de la Geolière

tout d'abord, merci de ton aide.

isabelle a écrit :
salut JièL,

donc si j'ai bien compris il faut vérifier une différence plus grande
que 1 au lieu de vérifier une valeur vide,



presque ;-)

Function MaRecherche(plg As Range, val1 As Range, val2 As Range) As
Integer
For Each c In plg
x = x + 1
If Cells(c.Row, 1) = val1 And Cells(c.Row, 2) = val2 And Cells(c.Row,
3) -Cells(c.Row - 1, 3) > 1 Then
MaRecherche = Cells(c.Row - 1, 3) + 1
Exit For
End If
Next
End Function

si c'est pas ça, stp fournis moi un fichier avec données,



http://cjoint.com/?giaGbarN5d
Je suis quasiment sûr qu'on es pas loin du résultat, mais je n'arrive
pas à faire marcher ta fonction.

Merci à toi et à tous ceux qui se penche sur le pb.










Avatar
JièL
Mgr T. Banni a écrit :
si ces trous avaient été de mémoire, je pense que j'aurais pu t'aider, JièL
je ne peux donc que te souhaiter d'être en pleine userforme, comme on dit à
Cassis
Mgr T.B.



Merci mon saigneur ;-)

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est là : http://faq-outlook.fr/

Boycott des questions venant de CDO
http://faq-outlook.fr/viewpage.php?page_id=2
1 2 3