Bonjour.
Tu as écrit :
"Fonction renverra "J4" parce que TOUTES LES FOIS (4 fois au total dans
notre exemple) où elle a trouvé "5" en C ET "Citron" en E
il y avait une valeur différente de "1" en D".
Je compte personnelement 7 valeurs où C=5, E=CITTRON et D<>1.
Peux-tu expliciter ?
Cordialement.
DanielBonjour à tous,
De nouveau dans la panade (oui, je sais, je suis pas fortiche ;-) ) je
me permets de vous soumettre une nouvelle problématique.
Cette fois c'est une histoire... d'écarts... mais pas "type". ;-)
Merci par avance à ceux qui y jetteront un oeil, et surtout, à ceux
qui y jetteront les neurones nécessaires à sa compréhension. (oui, je
sais, j'explique pas toujours bien ;-) )
Euuuuh, ça a l'air long mais pas tant que ça, et c'est par là :
http://www.cijoint.fr/cjlink.php?file=cj200904/cij4rQL8bb.xls
A+
Bonjour.
Tu as écrit :
"Fonction renverra "J4" parce que TOUTES LES FOIS (4 fois au total dans
notre exemple) où elle a trouvé "5" en C ET "Citron" en E
il y avait une valeur différente de "1" en D".
Je compte personnelement 7 valeurs où C=5, E=CITTRON et D<>1.
Peux-tu expliciter ?
Cordialement.
Daniel
Bonjour à tous,
De nouveau dans la panade (oui, je sais, je suis pas fortiche ;-) ) je
me permets de vous soumettre une nouvelle problématique.
Cette fois c'est une histoire... d'écarts... mais pas "type". ;-)
Merci par avance à ceux qui y jetteront un oeil, et surtout, à ceux
qui y jetteront les neurones nécessaires à sa compréhension. (oui, je
sais, j'explique pas toujours bien ;-) )
Euuuuh, ça a l'air long mais pas tant que ça, et c'est par là :
http://www.cijoint.fr/cjlink.php?file=cj200904/cij4rQL8bb.xls
A+
Bonjour.
Tu as écrit :
"Fonction renverra "J4" parce que TOUTES LES FOIS (4 fois au total dans
notre exemple) où elle a trouvé "5" en C ET "Citron" en E
il y avait une valeur différente de "1" en D".
Je compte personnelement 7 valeurs où C=5, E=CITTRON et D<>1.
Peux-tu expliciter ?
Cordialement.
DanielBonjour à tous,
De nouveau dans la panade (oui, je sais, je suis pas fortiche ;-) ) je
me permets de vous soumettre une nouvelle problématique.
Cette fois c'est une histoire... d'écarts... mais pas "type". ;-)
Merci par avance à ceux qui y jetteront un oeil, et surtout, à ceux
qui y jetteront les neurones nécessaires à sa compréhension. (oui, je
sais, j'explique pas toujours bien ;-) )
Euuuuh, ça a l'air long mais pas tant que ça, et c'est par là :
http://www.cijoint.fr/cjlink.php?file=cj200904/cij4rQL8bb.xls
A+
Oupppps, une coquille......
"Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie ******"J15"******** "
ANNULE ET REMPLACE LE TEXTE ORIGINAL SUIVANT :
" Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie "J10" "
Oupppps, une coquille......
"Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie ******"J15"******** "
ANNULE ET REMPLACE LE TEXTE ORIGINAL SUIVANT :
" Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie "J10" "
Oupppps, une coquille......
"Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie ******"J15"******** "
ANNULE ET REMPLACE LE TEXTE ORIGINAL SUIVANT :
" Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie "J10" "
bonjour Grandola,
voici un premier test, la macro renvoie un chiffre uniquement car je
n'ai pas pigé le fonctionnement des lettres
il faut sélectionner dans l'ordres de l'exemple donnée colonne C, D, E
Sub Macro1()
Set a = Application.InputBox(prompt:="Faite votre sélection a(chiffre
5)" , Type:=8)
Set b = Application.InputBox(prompt:="Faite votre sélection b(chiffre 1
ou autre -1)"", Type:=8)
Set c = Application.InputBox(prompt:="Faite votre sélection c(citron)",
Type:=8)
z1 = c.Item(1).Row
z2 = c.Item(a.Count).Row
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Cells(i, c.Column) = "CITRON" And Cells(i, a.Column) = 5 Then
If premiere = "" Then
Select Case Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
MsgBox counter
End Sub
isabelle
Grandola a écrit :Oupppps, une coquille......
"Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie ******"J15"******** "
ANNULE ET REMPLACE LE TEXTE ORIGINAL SUIVANT :
" Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie "J10" "
bonjour Grandola,
voici un premier test, la macro renvoie un chiffre uniquement car je
n'ai pas pigé le fonctionnement des lettres
il faut sélectionner dans l'ordres de l'exemple donnée colonne C, D, E
Sub Macro1()
Set a = Application.InputBox(prompt:="Faite votre sélection a(chiffre
5)" , Type:=8)
Set b = Application.InputBox(prompt:="Faite votre sélection b(chiffre 1
ou autre -1)"", Type:=8)
Set c = Application.InputBox(prompt:="Faite votre sélection c(citron)",
Type:=8)
z1 = c.Item(1).Row
z2 = c.Item(a.Count).Row
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Cells(i, c.Column) = "CITRON" And Cells(i, a.Column) = 5 Then
If premiere = "" Then
Select Case Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
MsgBox counter
End Sub
isabelle
Grandola a écrit :
Oupppps, une coquille......
"Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie ******"J15"******** "
ANNULE ET REMPLACE LE TEXTE ORIGINAL SUIVANT :
" Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie "J10" "
bonjour Grandola,
voici un premier test, la macro renvoie un chiffre uniquement car je
n'ai pas pigé le fonctionnement des lettres
il faut sélectionner dans l'ordres de l'exemple donnée colonne C, D, E
Sub Macro1()
Set a = Application.InputBox(prompt:="Faite votre sélection a(chiffre
5)" , Type:=8)
Set b = Application.InputBox(prompt:="Faite votre sélection b(chiffre 1
ou autre -1)"", Type:=8)
Set c = Application.InputBox(prompt:="Faite votre sélection c(citron)",
Type:=8)
z1 = c.Item(1).Row
z2 = c.Item(a.Count).Row
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Cells(i, c.Column) = "CITRON" And Cells(i, a.Column) = 5 Then
If premiere = "" Then
Select Case Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
MsgBox counter
End Sub
isabelle
Grandola a écrit :Oupppps, une coquille......
"Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie ******"J15"******** "
ANNULE ET REMPLACE LE TEXTE ORIGINAL SUIVANT :
" Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie "J10" "
Merci à toi... mais le système d'InputBox ne me convient pas du tout
parce que j'aimerais faire référence à des adresses de cellules plutôt
que d'indiquer une valeur "en dur" à la macro.
Sinon, le fonctionnement des lettres c'est pas compliqué.
Si la fonction ne trouve jamais de ligne où colonne E = "citron" et
colonne C = 5 elle renvoie "J" . J'ai choisi "J" de manière totalement
arbitraire, tout comme j'ai choisi la lettre "C" qu'on utilise aussi
concaténée avec un chiffre.
En fait la fonction renvoie "J" quand :
SOMMEPROD( (C:C=5) * (E:E="citron") ) = 0
La fonction renvoie par exemple "J4" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 4
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 0
)
= VRAI
La fonction renvoie par exemple "C7" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 7
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 7
)
= VRAI
-------------------------------------------------------------------------
isabelle a écrit :bonjour Grandola,
voici un premier test, la macro renvoie un chiffre uniquement car je
n'ai pas pigé le fonctionnement des lettres
il faut sélectionner dans l'ordres de l'exemple donnée colonne C, D, E
Sub Macro1()
Set a = Application.InputBox(prompt:="Faite votre sélection a(chiffre
5)" , Type:=8)
Set b = Application.InputBox(prompt:="Faite votre sélection b(chiffre
1 ou autre -1)"", Type:=8)
Set c = Application.InputBox(prompt:="Faite votre sélection
c(citron)", Type:=8)
z1 = c.Item(1).Row
z2 = c.Item(a.Count).Row
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Cells(i, c.Column) = "CITRON" And Cells(i, a.Column) = 5 Then
If premiere = "" Then
Select Case Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
MsgBox counter
End Sub
isabelle
Grandola a écrit :Oupppps, une coquille......
"Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie ******"J15"******** "
ANNULE ET REMPLACE LE TEXTE ORIGINAL SUIVANT :
" Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie "J10" "
Merci à toi... mais le système d'InputBox ne me convient pas du tout
parce que j'aimerais faire référence à des adresses de cellules plutôt
que d'indiquer une valeur "en dur" à la macro.
Sinon, le fonctionnement des lettres c'est pas compliqué.
Si la fonction ne trouve jamais de ligne où colonne E = "citron" et
colonne C = 5 elle renvoie "J" . J'ai choisi "J" de manière totalement
arbitraire, tout comme j'ai choisi la lettre "C" qu'on utilise aussi
concaténée avec un chiffre.
En fait la fonction renvoie "J" quand :
SOMMEPROD( (C:C=5) * (E:E="citron") ) = 0
La fonction renvoie par exemple "J4" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 4
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 0
)
= VRAI
La fonction renvoie par exemple "C7" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 7
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 7
)
= VRAI
-------------------------------------------------------------------------
isabelle a écrit :
bonjour Grandola,
voici un premier test, la macro renvoie un chiffre uniquement car je
n'ai pas pigé le fonctionnement des lettres
il faut sélectionner dans l'ordres de l'exemple donnée colonne C, D, E
Sub Macro1()
Set a = Application.InputBox(prompt:="Faite votre sélection a(chiffre
5)" , Type:=8)
Set b = Application.InputBox(prompt:="Faite votre sélection b(chiffre
1 ou autre -1)"", Type:=8)
Set c = Application.InputBox(prompt:="Faite votre sélection
c(citron)", Type:=8)
z1 = c.Item(1).Row
z2 = c.Item(a.Count).Row
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Cells(i, c.Column) = "CITRON" And Cells(i, a.Column) = 5 Then
If premiere = "" Then
Select Case Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
MsgBox counter
End Sub
isabelle
Grandola a écrit :
Oupppps, une coquille......
"Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie ******"J15"******** "
ANNULE ET REMPLACE LE TEXTE ORIGINAL SUIVANT :
" Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie "J10" "
Merci à toi... mais le système d'InputBox ne me convient pas du tout
parce que j'aimerais faire référence à des adresses de cellules plutôt
que d'indiquer une valeur "en dur" à la macro.
Sinon, le fonctionnement des lettres c'est pas compliqué.
Si la fonction ne trouve jamais de ligne où colonne E = "citron" et
colonne C = 5 elle renvoie "J" . J'ai choisi "J" de manière totalement
arbitraire, tout comme j'ai choisi la lettre "C" qu'on utilise aussi
concaténée avec un chiffre.
En fait la fonction renvoie "J" quand :
SOMMEPROD( (C:C=5) * (E:E="citron") ) = 0
La fonction renvoie par exemple "J4" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 4
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 0
)
= VRAI
La fonction renvoie par exemple "C7" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 7
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 7
)
= VRAI
-------------------------------------------------------------------------
isabelle a écrit :bonjour Grandola,
voici un premier test, la macro renvoie un chiffre uniquement car je
n'ai pas pigé le fonctionnement des lettres
il faut sélectionner dans l'ordres de l'exemple donnée colonne C, D, E
Sub Macro1()
Set a = Application.InputBox(prompt:="Faite votre sélection a(chiffre
5)" , Type:=8)
Set b = Application.InputBox(prompt:="Faite votre sélection b(chiffre
1 ou autre -1)"", Type:=8)
Set c = Application.InputBox(prompt:="Faite votre sélection
c(citron)", Type:=8)
z1 = c.Item(1).Row
z2 = c.Item(a.Count).Row
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Cells(i, c.Column) = "CITRON" And Cells(i, a.Column) = 5 Then
If premiere = "" Then
Select Case Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
MsgBox counter
End Sub
isabelle
Grandola a écrit :Oupppps, une coquille......
"Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie ******"J15"******** "
ANNULE ET REMPLACE LE TEXTE ORIGINAL SUIVANT :
" Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie "J10" "
bonjour Grando,
si le resultat counter est exact on peut faire de cette macro une
fonction :
=écart(C2:C16;5;D2:D16;1;E2:E16;"CITRON")
Function écart(a As Range, val_a As Double, b As Range, val_b As
Double, c As Range, val_c As String) As Double
Set Feuila = Worksheets(a.Parent.Name)
Set Feuilb = Worksheets(b.Parent.Name)
Set Feuilc = Worksheets(c.Parent.Name)
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Feuilc.Cells(i, c.Column) = "CITRON" And Feuila.Cells(i, a.Column)
= 5 Then
If premiere = "" Then
Select Case Feuilb.Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Feuilb.Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Feuilb.Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
écart = 0 + counter
End Function
isabelle
Grandola a écrit :Merci à toi... mais le système d'InputBox ne me convient pas du tout
parce que j'aimerais faire référence à des adresses de cellules
plutôt que d'indiquer une valeur "en dur" à la macro.
Sinon, le fonctionnement des lettres c'est pas compliqué.
Si la fonction ne trouve jamais de ligne où colonne E = "citron" et
colonne C = 5 elle renvoie "J" . J'ai choisi "J" de manière
totalement arbitraire, tout comme j'ai choisi la lettre "C" qu'on
utilise aussi concaténée avec un chiffre.
En fait la fonction renvoie "J" quand :
SOMMEPROD( (C:C=5) * (E:E="citron") ) = 0
La fonction renvoie par exemple "J4" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 4
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 0
)
= VRAI
La fonction renvoie par exemple "C7" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 7
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 7
)
= VRAI
-------------------------------------------------------------------------
isabelle a écrit :bonjour Grandola,
voici un premier test, la macro renvoie un chiffre uniquement car je
n'ai pas pigé le fonctionnement des lettres
il faut sélectionner dans l'ordres de l'exemple donnée colonne C, D, E
Sub Macro1()
Set a = Application.InputBox(prompt:="Faite votre sélection
a(chiffre 5)" , Type:=8)
Set b = Application.InputBox(prompt:="Faite votre sélection
b(chiffre 1 ou autre -1)"", Type:=8)
Set c = Application.InputBox(prompt:="Faite votre sélection
c(citron)", Type:=8)
z1 = c.Item(1).Row
z2 = c.Item(a.Count).Row
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Cells(i, c.Column) = "CITRON" And Cells(i, a.Column) = 5 Then
If premiere = "" Then
Select Case Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
MsgBox counter
End Sub
isabelle
Grandola a écrit :Oupppps, une coquille......
"Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie ******"J15"******** "
ANNULE ET REMPLACE LE TEXTE ORIGINAL SUIVANT :
" Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie "J10" "
bonjour Grando,
si le resultat counter est exact on peut faire de cette macro une
fonction :
=écart(C2:C16;5;D2:D16;1;E2:E16;"CITRON")
Function écart(a As Range, val_a As Double, b As Range, val_b As
Double, c As Range, val_c As String) As Double
Set Feuila = Worksheets(a.Parent.Name)
Set Feuilb = Worksheets(b.Parent.Name)
Set Feuilc = Worksheets(c.Parent.Name)
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Feuilc.Cells(i, c.Column) = "CITRON" And Feuila.Cells(i, a.Column)
= 5 Then
If premiere = "" Then
Select Case Feuilb.Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Feuilb.Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Feuilb.Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
écart = 0 + counter
End Function
isabelle
Grandola a écrit :
Merci à toi... mais le système d'InputBox ne me convient pas du tout
parce que j'aimerais faire référence à des adresses de cellules
plutôt que d'indiquer une valeur "en dur" à la macro.
Sinon, le fonctionnement des lettres c'est pas compliqué.
Si la fonction ne trouve jamais de ligne où colonne E = "citron" et
colonne C = 5 elle renvoie "J" . J'ai choisi "J" de manière
totalement arbitraire, tout comme j'ai choisi la lettre "C" qu'on
utilise aussi concaténée avec un chiffre.
En fait la fonction renvoie "J" quand :
SOMMEPROD( (C:C=5) * (E:E="citron") ) = 0
La fonction renvoie par exemple "J4" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 4
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 0
)
= VRAI
La fonction renvoie par exemple "C7" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 7
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 7
)
= VRAI
-------------------------------------------------------------------------
isabelle a écrit :
bonjour Grandola,
voici un premier test, la macro renvoie un chiffre uniquement car je
n'ai pas pigé le fonctionnement des lettres
il faut sélectionner dans l'ordres de l'exemple donnée colonne C, D, E
Sub Macro1()
Set a = Application.InputBox(prompt:="Faite votre sélection
a(chiffre 5)" , Type:=8)
Set b = Application.InputBox(prompt:="Faite votre sélection
b(chiffre 1 ou autre -1)"", Type:=8)
Set c = Application.InputBox(prompt:="Faite votre sélection
c(citron)", Type:=8)
z1 = c.Item(1).Row
z2 = c.Item(a.Count).Row
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Cells(i, c.Column) = "CITRON" And Cells(i, a.Column) = 5 Then
If premiere = "" Then
Select Case Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
MsgBox counter
End Sub
isabelle
Grandola a écrit :
Oupppps, une coquille......
"Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie ******"J15"******** "
ANNULE ET REMPLACE LE TEXTE ORIGINAL SUIVANT :
" Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie "J10" "
bonjour Grando,
si le resultat counter est exact on peut faire de cette macro une
fonction :
=écart(C2:C16;5;D2:D16;1;E2:E16;"CITRON")
Function écart(a As Range, val_a As Double, b As Range, val_b As
Double, c As Range, val_c As String) As Double
Set Feuila = Worksheets(a.Parent.Name)
Set Feuilb = Worksheets(b.Parent.Name)
Set Feuilc = Worksheets(c.Parent.Name)
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Feuilc.Cells(i, c.Column) = "CITRON" And Feuila.Cells(i, a.Column)
= 5 Then
If premiere = "" Then
Select Case Feuilb.Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Feuilb.Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Feuilb.Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
écart = 0 + counter
End Function
isabelle
Grandola a écrit :Merci à toi... mais le système d'InputBox ne me convient pas du tout
parce que j'aimerais faire référence à des adresses de cellules
plutôt que d'indiquer une valeur "en dur" à la macro.
Sinon, le fonctionnement des lettres c'est pas compliqué.
Si la fonction ne trouve jamais de ligne où colonne E = "citron" et
colonne C = 5 elle renvoie "J" . J'ai choisi "J" de manière
totalement arbitraire, tout comme j'ai choisi la lettre "C" qu'on
utilise aussi concaténée avec un chiffre.
En fait la fonction renvoie "J" quand :
SOMMEPROD( (C:C=5) * (E:E="citron") ) = 0
La fonction renvoie par exemple "J4" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 4
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 0
)
= VRAI
La fonction renvoie par exemple "C7" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 7
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 7
)
= VRAI
-------------------------------------------------------------------------
isabelle a écrit :bonjour Grandola,
voici un premier test, la macro renvoie un chiffre uniquement car je
n'ai pas pigé le fonctionnement des lettres
il faut sélectionner dans l'ordres de l'exemple donnée colonne C, D, E
Sub Macro1()
Set a = Application.InputBox(prompt:="Faite votre sélection
a(chiffre 5)" , Type:=8)
Set b = Application.InputBox(prompt:="Faite votre sélection
b(chiffre 1 ou autre -1)"", Type:=8)
Set c = Application.InputBox(prompt:="Faite votre sélection
c(citron)", Type:=8)
z1 = c.Item(1).Row
z2 = c.Item(a.Count).Row
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Cells(i, c.Column) = "CITRON" And Cells(i, a.Column) = 5 Then
If premiere = "" Then
Select Case Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
MsgBox counter
End Sub
isabelle
Grandola a écrit :Oupppps, une coquille......
"Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie ******"J15"******** "
ANNULE ET REMPLACE LE TEXTE ORIGINAL SUIVANT :
" Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie "J10" "
ps/ le fichier est ici : http://cjoint.com/?eyiTHQVyud
isabelle
isabelle a écrit :bonjour Grando,
si le resultat counter est exact on peut faire de cette macro une
fonction :
=écart(C2:C16;5;D2:D16;1;E2:E16;"CITRON")
Function écart(a As Range, val_a As Double, b As Range, val_b As
Double, c As Range, val_c As String) As Double
Set Feuila = Worksheets(a.Parent.Name)
Set Feuilb = Worksheets(b.Parent.Name)
Set Feuilc = Worksheets(c.Parent.Name)
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Feuilc.Cells(i, c.Column) = "CITRON" And Feuila.Cells(i, a.Column)
= 5 Then
If premiere = "" Then
Select Case Feuilb.Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Feuilb.Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Feuilb.Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
écart = 0 + counter
End Function
isabelle
Grandola a écrit :Merci à toi... mais le système d'InputBox ne me convient pas du tout
parce que j'aimerais faire référence à des adresses de cellules
plutôt que d'indiquer une valeur "en dur" à la macro.
Sinon, le fonctionnement des lettres c'est pas compliqué.
Si la fonction ne trouve jamais de ligne où colonne E = "citron" et
colonne C = 5 elle renvoie "J" . J'ai choisi "J" de manière
totalement arbitraire, tout comme j'ai choisi la lettre "C" qu'on
utilise aussi concaténée avec un chiffre.
En fait la fonction renvoie "J" quand :
SOMMEPROD( (C:C=5) * (E:E="citron") ) = 0
La fonction renvoie par exemple "J4" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 4
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 0
)
= VRAI
La fonction renvoie par exemple "C7" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 7
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 7
)
= VRAI
-------------------------------------------------------------------------
isabelle a écrit :bonjour Grandola,
voici un premier test, la macro renvoie un chiffre uniquement car je
n'ai pas pigé le fonctionnement des lettres
il faut sélectionner dans l'ordres de l'exemple donnée colonne C, D, E
Sub Macro1()
Set a = Application.InputBox(prompt:="Faite votre sélection
a(chiffre 5)" , Type:=8)
Set b = Application.InputBox(prompt:="Faite votre sélection
b(chiffre 1 ou autre -1)"", Type:=8)
Set c = Application.InputBox(prompt:="Faite votre sélection
c(citron)", Type:=8)
z1 = c.Item(1).Row
z2 = c.Item(a.Count).Row
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Cells(i, c.Column) = "CITRON" And Cells(i, a.Column) = 5 Then
If premiere = "" Then
Select Case Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
MsgBox counter
End Sub
isabelle
Grandola a écrit :Oupppps, une coquille......
"Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie ******"J15"******** "
ANNULE ET REMPLACE LE TEXTE ORIGINAL SUIVANT :
" Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie "J10" "
ps/ le fichier est ici : http://cjoint.com/?eyiTHQVyud
isabelle
isabelle a écrit :
bonjour Grando,
si le resultat counter est exact on peut faire de cette macro une
fonction :
=écart(C2:C16;5;D2:D16;1;E2:E16;"CITRON")
Function écart(a As Range, val_a As Double, b As Range, val_b As
Double, c As Range, val_c As String) As Double
Set Feuila = Worksheets(a.Parent.Name)
Set Feuilb = Worksheets(b.Parent.Name)
Set Feuilc = Worksheets(c.Parent.Name)
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Feuilc.Cells(i, c.Column) = "CITRON" And Feuila.Cells(i, a.Column)
= 5 Then
If premiere = "" Then
Select Case Feuilb.Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Feuilb.Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Feuilb.Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
écart = 0 + counter
End Function
isabelle
Grandola a écrit :
Merci à toi... mais le système d'InputBox ne me convient pas du tout
parce que j'aimerais faire référence à des adresses de cellules
plutôt que d'indiquer une valeur "en dur" à la macro.
Sinon, le fonctionnement des lettres c'est pas compliqué.
Si la fonction ne trouve jamais de ligne où colonne E = "citron" et
colonne C = 5 elle renvoie "J" . J'ai choisi "J" de manière
totalement arbitraire, tout comme j'ai choisi la lettre "C" qu'on
utilise aussi concaténée avec un chiffre.
En fait la fonction renvoie "J" quand :
SOMMEPROD( (C:C=5) * (E:E="citron") ) = 0
La fonction renvoie par exemple "J4" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 4
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 0
)
= VRAI
La fonction renvoie par exemple "C7" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 7
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 7
)
= VRAI
-------------------------------------------------------------------------
isabelle a écrit :
bonjour Grandola,
voici un premier test, la macro renvoie un chiffre uniquement car je
n'ai pas pigé le fonctionnement des lettres
il faut sélectionner dans l'ordres de l'exemple donnée colonne C, D, E
Sub Macro1()
Set a = Application.InputBox(prompt:="Faite votre sélection
a(chiffre 5)" , Type:=8)
Set b = Application.InputBox(prompt:="Faite votre sélection
b(chiffre 1 ou autre -1)"", Type:=8)
Set c = Application.InputBox(prompt:="Faite votre sélection
c(citron)", Type:=8)
z1 = c.Item(1).Row
z2 = c.Item(a.Count).Row
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Cells(i, c.Column) = "CITRON" And Cells(i, a.Column) = 5 Then
If premiere = "" Then
Select Case Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
MsgBox counter
End Sub
isabelle
Grandola a écrit :
Oupppps, une coquille......
"Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie ******"J15"******** "
ANNULE ET REMPLACE LE TEXTE ORIGINAL SUIVANT :
" Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie "J10" "
ps/ le fichier est ici : http://cjoint.com/?eyiTHQVyud
isabelle
isabelle a écrit :bonjour Grando,
si le resultat counter est exact on peut faire de cette macro une
fonction :
=écart(C2:C16;5;D2:D16;1;E2:E16;"CITRON")
Function écart(a As Range, val_a As Double, b As Range, val_b As
Double, c As Range, val_c As String) As Double
Set Feuila = Worksheets(a.Parent.Name)
Set Feuilb = Worksheets(b.Parent.Name)
Set Feuilc = Worksheets(c.Parent.Name)
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Feuilc.Cells(i, c.Column) = "CITRON" And Feuila.Cells(i, a.Column)
= 5 Then
If premiere = "" Then
Select Case Feuilb.Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Feuilb.Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Feuilb.Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
écart = 0 + counter
End Function
isabelle
Grandola a écrit :Merci à toi... mais le système d'InputBox ne me convient pas du tout
parce que j'aimerais faire référence à des adresses de cellules
plutôt que d'indiquer une valeur "en dur" à la macro.
Sinon, le fonctionnement des lettres c'est pas compliqué.
Si la fonction ne trouve jamais de ligne où colonne E = "citron" et
colonne C = 5 elle renvoie "J" . J'ai choisi "J" de manière
totalement arbitraire, tout comme j'ai choisi la lettre "C" qu'on
utilise aussi concaténée avec un chiffre.
En fait la fonction renvoie "J" quand :
SOMMEPROD( (C:C=5) * (E:E="citron") ) = 0
La fonction renvoie par exemple "J4" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 4
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 0
)
= VRAI
La fonction renvoie par exemple "C7" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 7
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 7
)
= VRAI
-------------------------------------------------------------------------
isabelle a écrit :bonjour Grandola,
voici un premier test, la macro renvoie un chiffre uniquement car je
n'ai pas pigé le fonctionnement des lettres
il faut sélectionner dans l'ordres de l'exemple donnée colonne C, D, E
Sub Macro1()
Set a = Application.InputBox(prompt:="Faite votre sélection
a(chiffre 5)" , Type:=8)
Set b = Application.InputBox(prompt:="Faite votre sélection
b(chiffre 1 ou autre -1)"", Type:=8)
Set c = Application.InputBox(prompt:="Faite votre sélection
c(citron)", Type:=8)
z1 = c.Item(1).Row
z2 = c.Item(a.Count).Row
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Cells(i, c.Column) = "CITRON" And Cells(i, a.Column) = 5 Then
If premiere = "" Then
Select Case Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
MsgBox counter
End Sub
isabelle
Grandola a écrit :Oupppps, une coquille......
"Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie ******"J15"******** "
ANNULE ET REMPLACE LE TEXTE ORIGINAL SUIVANT :
" Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie "J10" "
Après quelques tests, ta fonction marche très bien. Elle renvoie les
bonnes valeurs. :-)
Ce qui me gêne dans ton code c'est que les valeurs que la fonction
doit rechercher ("Citron", "5", "1" ou pas "1") soit écrites "en dur".
J'aimerais pouvoir faire référence à des cellules, plutôt que de
"graver des valeurs dans le marbre".
En espérant que tu as compris ce que je veux dire.
Sinon pour le système de lettres c'est simple :
- si la fonction ne trouve aucune ligne avec E="citron" ET D="5", elle
renvoie "J"
- si la fonction trouve des lignes avec E="citron" ET D="5" et
qu'AUCUNE d'entre elles n'a "1" en colonne D, elle renvoie la
concaténation de "J" et du nombre de lignes trouvées avec "citron" et
"5". Exemple :"J11"
- si la fonction trouve des lignes avec E="citron" ET D="5" et TOUTES
ont "1" en colonne D, elle renvoie la concaténation de "C" et du
nombre de lignes trouvées avec "citron" et "5". Exemple :"C26"
----------------------------------------
isabelle a écrit :ps/ le fichier est ici : http://cjoint.com/?eyiTHQVyud
isabelle
isabelle a écrit :bonjour Grando,
si le resultat counter est exact on peut faire de cette macro une
fonction :
=écart(C2:C16;5;D2:D16;1;E2:E16;"CITRON")
Function écart(a As Range, val_a As Double, b As Range, val_b As
Double, c As Range, val_c As String) As Double
Set Feuila = Worksheets(a.Parent.Name)
Set Feuilb = Worksheets(b.Parent.Name)
Set Feuilc = Worksheets(c.Parent.Name)
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Feuilc.Cells(i, c.Column) = "CITRON" And Feuila.Cells(i,
a.Column) = 5 Then
If premiere = "" Then
Select Case Feuilb.Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Feuilb.Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Feuilb.Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
écart = 0 + counter
End Function
isabelle
Grandola a écrit :Merci à toi... mais le système d'InputBox ne me convient pas du
tout parce que j'aimerais faire référence à des adresses de
cellules plutôt que d'indiquer une valeur "en dur" à la macro.
Sinon, le fonctionnement des lettres c'est pas compliqué.
Si la fonction ne trouve jamais de ligne où colonne E = "citron" et
colonne C = 5 elle renvoie "J" . J'ai choisi "J" de manière
totalement arbitraire, tout comme j'ai choisi la lettre "C" qu'on
utilise aussi concaténée avec un chiffre.
En fait la fonction renvoie "J" quand :
SOMMEPROD( (C:C=5) * (E:E="citron") ) = 0
La fonction renvoie par exemple "J4" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 4
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 0
)
= VRAI
La fonction renvoie par exemple "C7" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 7
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 7
)
= VRAI
-------------------------------------------------------------------------
isabelle a écrit :bonjour Grandola,
voici un premier test, la macro renvoie un chiffre uniquement car
je n'ai pas pigé le fonctionnement des lettres
il faut sélectionner dans l'ordres de l'exemple donnée colonne C,
D, E
Sub Macro1()
Set a = Application.InputBox(prompt:="Faite votre sélection
a(chiffre 5)" , Type:=8)
Set b = Application.InputBox(prompt:="Faite votre sélection
b(chiffre 1 ou autre -1)"", Type:=8)
Set c = Application.InputBox(prompt:="Faite votre sélection
c(citron)", Type:=8)
z1 = c.Item(1).Row
z2 = c.Item(a.Count).Row
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Cells(i, c.Column) = "CITRON" And Cells(i, a.Column) = 5 Then
If premiere = "" Then
Select Case Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
MsgBox counter
End Sub
isabelle
Grandola a écrit :Oupppps, une coquille......
"Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie ******"J15"******** "
ANNULE ET REMPLACE LE TEXTE ORIGINAL SUIVANT :
" Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie "J10" "
Après quelques tests, ta fonction marche très bien. Elle renvoie les
bonnes valeurs. :-)
Ce qui me gêne dans ton code c'est que les valeurs que la fonction
doit rechercher ("Citron", "5", "1" ou pas "1") soit écrites "en dur".
J'aimerais pouvoir faire référence à des cellules, plutôt que de
"graver des valeurs dans le marbre".
En espérant que tu as compris ce que je veux dire.
Sinon pour le système de lettres c'est simple :
- si la fonction ne trouve aucune ligne avec E="citron" ET D="5", elle
renvoie "J"
- si la fonction trouve des lignes avec E="citron" ET D="5" et
qu'AUCUNE d'entre elles n'a "1" en colonne D, elle renvoie la
concaténation de "J" et du nombre de lignes trouvées avec "citron" et
"5". Exemple :"J11"
- si la fonction trouve des lignes avec E="citron" ET D="5" et TOUTES
ont "1" en colonne D, elle renvoie la concaténation de "C" et du
nombre de lignes trouvées avec "citron" et "5". Exemple :"C26"
----------------------------------------
isabelle a écrit :
ps/ le fichier est ici : http://cjoint.com/?eyiTHQVyud
isabelle
isabelle a écrit :
bonjour Grando,
si le resultat counter est exact on peut faire de cette macro une
fonction :
=écart(C2:C16;5;D2:D16;1;E2:E16;"CITRON")
Function écart(a As Range, val_a As Double, b As Range, val_b As
Double, c As Range, val_c As String) As Double
Set Feuila = Worksheets(a.Parent.Name)
Set Feuilb = Worksheets(b.Parent.Name)
Set Feuilc = Worksheets(c.Parent.Name)
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Feuilc.Cells(i, c.Column) = "CITRON" And Feuila.Cells(i,
a.Column) = 5 Then
If premiere = "" Then
Select Case Feuilb.Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Feuilb.Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Feuilb.Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
écart = 0 + counter
End Function
isabelle
Grandola a écrit :
Merci à toi... mais le système d'InputBox ne me convient pas du
tout parce que j'aimerais faire référence à des adresses de
cellules plutôt que d'indiquer une valeur "en dur" à la macro.
Sinon, le fonctionnement des lettres c'est pas compliqué.
Si la fonction ne trouve jamais de ligne où colonne E = "citron" et
colonne C = 5 elle renvoie "J" . J'ai choisi "J" de manière
totalement arbitraire, tout comme j'ai choisi la lettre "C" qu'on
utilise aussi concaténée avec un chiffre.
En fait la fonction renvoie "J" quand :
SOMMEPROD( (C:C=5) * (E:E="citron") ) = 0
La fonction renvoie par exemple "J4" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 4
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 0
)
= VRAI
La fonction renvoie par exemple "C7" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 7
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 7
)
= VRAI
-------------------------------------------------------------------------
isabelle a écrit :
bonjour Grandola,
voici un premier test, la macro renvoie un chiffre uniquement car
je n'ai pas pigé le fonctionnement des lettres
il faut sélectionner dans l'ordres de l'exemple donnée colonne C,
D, E
Sub Macro1()
Set a = Application.InputBox(prompt:="Faite votre sélection
a(chiffre 5)" , Type:=8)
Set b = Application.InputBox(prompt:="Faite votre sélection
b(chiffre 1 ou autre -1)"", Type:=8)
Set c = Application.InputBox(prompt:="Faite votre sélection
c(citron)", Type:=8)
z1 = c.Item(1).Row
z2 = c.Item(a.Count).Row
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Cells(i, c.Column) = "CITRON" And Cells(i, a.Column) = 5 Then
If premiere = "" Then
Select Case Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
MsgBox counter
End Sub
isabelle
Grandola a écrit :
Oupppps, une coquille......
"Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie ******"J15"******** "
ANNULE ET REMPLACE LE TEXTE ORIGINAL SUIVANT :
" Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie "J10" "
Après quelques tests, ta fonction marche très bien. Elle renvoie les
bonnes valeurs. :-)
Ce qui me gêne dans ton code c'est que les valeurs que la fonction
doit rechercher ("Citron", "5", "1" ou pas "1") soit écrites "en dur".
J'aimerais pouvoir faire référence à des cellules, plutôt que de
"graver des valeurs dans le marbre".
En espérant que tu as compris ce que je veux dire.
Sinon pour le système de lettres c'est simple :
- si la fonction ne trouve aucune ligne avec E="citron" ET D="5", elle
renvoie "J"
- si la fonction trouve des lignes avec E="citron" ET D="5" et
qu'AUCUNE d'entre elles n'a "1" en colonne D, elle renvoie la
concaténation de "J" et du nombre de lignes trouvées avec "citron" et
"5". Exemple :"J11"
- si la fonction trouve des lignes avec E="citron" ET D="5" et TOUTES
ont "1" en colonne D, elle renvoie la concaténation de "C" et du
nombre de lignes trouvées avec "citron" et "5". Exemple :"C26"
----------------------------------------
isabelle a écrit :ps/ le fichier est ici : http://cjoint.com/?eyiTHQVyud
isabelle
isabelle a écrit :bonjour Grando,
si le resultat counter est exact on peut faire de cette macro une
fonction :
=écart(C2:C16;5;D2:D16;1;E2:E16;"CITRON")
Function écart(a As Range, val_a As Double, b As Range, val_b As
Double, c As Range, val_c As String) As Double
Set Feuila = Worksheets(a.Parent.Name)
Set Feuilb = Worksheets(b.Parent.Name)
Set Feuilc = Worksheets(c.Parent.Name)
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Feuilc.Cells(i, c.Column) = "CITRON" And Feuila.Cells(i,
a.Column) = 5 Then
If premiere = "" Then
Select Case Feuilb.Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Feuilb.Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Feuilb.Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
écart = 0 + counter
End Function
isabelle
Grandola a écrit :Merci à toi... mais le système d'InputBox ne me convient pas du
tout parce que j'aimerais faire référence à des adresses de
cellules plutôt que d'indiquer une valeur "en dur" à la macro.
Sinon, le fonctionnement des lettres c'est pas compliqué.
Si la fonction ne trouve jamais de ligne où colonne E = "citron" et
colonne C = 5 elle renvoie "J" . J'ai choisi "J" de manière
totalement arbitraire, tout comme j'ai choisi la lettre "C" qu'on
utilise aussi concaténée avec un chiffre.
En fait la fonction renvoie "J" quand :
SOMMEPROD( (C:C=5) * (E:E="citron") ) = 0
La fonction renvoie par exemple "J4" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 4
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 0
)
= VRAI
La fonction renvoie par exemple "C7" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 7
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 7
)
= VRAI
-------------------------------------------------------------------------
isabelle a écrit :bonjour Grandola,
voici un premier test, la macro renvoie un chiffre uniquement car
je n'ai pas pigé le fonctionnement des lettres
il faut sélectionner dans l'ordres de l'exemple donnée colonne C,
D, E
Sub Macro1()
Set a = Application.InputBox(prompt:="Faite votre sélection
a(chiffre 5)" , Type:=8)
Set b = Application.InputBox(prompt:="Faite votre sélection
b(chiffre 1 ou autre -1)"", Type:=8)
Set c = Application.InputBox(prompt:="Faite votre sélection
c(citron)", Type:=8)
z1 = c.Item(1).Row
z2 = c.Item(a.Count).Row
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Cells(i, c.Column) = "CITRON" And Cells(i, a.Column) = 5 Then
If premiere = "" Then
Select Case Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
MsgBox counter
End Sub
isabelle
Grandola a écrit :Oupppps, une coquille......
"Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie ******"J15"******** "
ANNULE ET REMPLACE LE TEXTE ORIGINAL SUIVANT :
" Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie "J10" "
bonjour Grandola,
tu peut remplacer les valeurs de "Citron", "5", "1" par des cellules
renseigner de ces valeurs
dans l'exemple ci-joint : =écart(C2:C16;$G$2;D2:D16;$G$3;E2:E16;$G$4)
j'ai ajouté une dernière parti :
Select Case counter
Case Is = 0: counter = "J"
Case Is < 0: counter = "J" & (counter) * -1
Case Is > 0: counter = "C" & counter
End Select
en espérant que cela traduise bien les conditions pour les lettres
http://cjoint.com/?ezbSUChSpM
isabelle
Grandola a écrit :Après quelques tests, ta fonction marche très bien. Elle renvoie les
bonnes valeurs. :-)
Ce qui me gêne dans ton code c'est que les valeurs que la fonction
doit rechercher ("Citron", "5", "1" ou pas "1") soit écrites "en dur".
J'aimerais pouvoir faire référence à des cellules, plutôt que de
"graver des valeurs dans le marbre".
En espérant que tu as compris ce que je veux dire.
Sinon pour le système de lettres c'est simple :
- si la fonction ne trouve aucune ligne avec E="citron" ET D="5", elle
renvoie "J"
- si la fonction trouve des lignes avec E="citron" ET D="5" et
qu'AUCUNE d'entre elles n'a "1" en colonne D, elle renvoie la
concaténation de "J" et du nombre de lignes trouvées avec "citron" et
"5". Exemple :"J11"
- si la fonction trouve des lignes avec E="citron" ET D="5" et TOUTES
ont "1" en colonne D, elle renvoie la concaténation de "C" et du
nombre de lignes trouvées avec "citron" et "5". Exemple :"C26"
----------------------------------------
isabelle a écrit :ps/ le fichier est ici : http://cjoint.com/?eyiTHQVyud
isabelle
isabelle a écrit :bonjour Grando,
si le resultat counter est exact on peut faire de cette macro une
fonction :
=écart(C2:C16;5;D2:D16;1;E2:E16;"CITRON")
Function écart(a As Range, val_a As Double, b As Range, val_b As
Double, c As Range, val_c As String) As Double
Set Feuila = Worksheets(a.Parent.Name)
Set Feuilb = Worksheets(b.Parent.Name)
Set Feuilc = Worksheets(c.Parent.Name)
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Feuilc.Cells(i, c.Column) = "CITRON" And Feuila.Cells(i,
a.Column) = 5 Then
If premiere = "" Then
Select Case Feuilb.Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Feuilb.Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Feuilb.Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
écart = 0 + counter
End Function
isabelle
Grandola a écrit :Merci à toi... mais le système d'InputBox ne me convient pas du
tout parce que j'aimerais faire référence à des adresses de
cellules plutôt que d'indiquer une valeur "en dur" à la macro.
Sinon, le fonctionnement des lettres c'est pas compliqué.
Si la fonction ne trouve jamais de ligne où colonne E = "citron" et
colonne C = 5 elle renvoie "J" . J'ai choisi "J" de manière
totalement arbitraire, tout comme j'ai choisi la lettre "C" qu'on
utilise aussi concaténée avec un chiffre.
En fait la fonction renvoie "J" quand :
SOMMEPROD( (C:C=5) * (E:E="citron") ) = 0
La fonction renvoie par exemple "J4" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 4
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 0
)
= VRAI
La fonction renvoie par exemple "C7" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 7
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 7
)
= VRAI
-------------------------------------------------------------------------
isabelle a écrit :bonjour Grandola,
voici un premier test, la macro renvoie un chiffre uniquement car
je n'ai pas pigé le fonctionnement des lettres
il faut sélectionner dans l'ordres de l'exemple donnée colonne C,
D, E
Sub Macro1()
Set a = Application.InputBox(prompt:="Faite votre sélection
a(chiffre 5)" , Type:=8)
Set b = Application.InputBox(prompt:="Faite votre sélection
b(chiffre 1 ou autre -1)"", Type:=8)
Set c = Application.InputBox(prompt:="Faite votre sélection
c(citron)", Type:=8)
z1 = c.Item(1).Row
z2 = c.Item(a.Count).Row
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Cells(i, c.Column) = "CITRON" And Cells(i, a.Column) = 5 Then
If premiere = "" Then
Select Case Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
MsgBox counter
End Sub
isabelle
Grandola a écrit :Oupppps, une coquille......
"Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie ******"J15"******** "
ANNULE ET REMPLACE LE TEXTE ORIGINAL SUIVANT :
" Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie "J10" "
bonjour Grandola,
tu peut remplacer les valeurs de "Citron", "5", "1" par des cellules
renseigner de ces valeurs
dans l'exemple ci-joint : =écart(C2:C16;$G$2;D2:D16;$G$3;E2:E16;$G$4)
j'ai ajouté une dernière parti :
Select Case counter
Case Is = 0: counter = "J"
Case Is < 0: counter = "J" & (counter) * -1
Case Is > 0: counter = "C" & counter
End Select
en espérant que cela traduise bien les conditions pour les lettres
http://cjoint.com/?ezbSUChSpM
isabelle
Grandola a écrit :
Après quelques tests, ta fonction marche très bien. Elle renvoie les
bonnes valeurs. :-)
Ce qui me gêne dans ton code c'est que les valeurs que la fonction
doit rechercher ("Citron", "5", "1" ou pas "1") soit écrites "en dur".
J'aimerais pouvoir faire référence à des cellules, plutôt que de
"graver des valeurs dans le marbre".
En espérant que tu as compris ce que je veux dire.
Sinon pour le système de lettres c'est simple :
- si la fonction ne trouve aucune ligne avec E="citron" ET D="5", elle
renvoie "J"
- si la fonction trouve des lignes avec E="citron" ET D="5" et
qu'AUCUNE d'entre elles n'a "1" en colonne D, elle renvoie la
concaténation de "J" et du nombre de lignes trouvées avec "citron" et
"5". Exemple :"J11"
- si la fonction trouve des lignes avec E="citron" ET D="5" et TOUTES
ont "1" en colonne D, elle renvoie la concaténation de "C" et du
nombre de lignes trouvées avec "citron" et "5". Exemple :"C26"
----------------------------------------
isabelle a écrit :
ps/ le fichier est ici : http://cjoint.com/?eyiTHQVyud
isabelle
isabelle a écrit :
bonjour Grando,
si le resultat counter est exact on peut faire de cette macro une
fonction :
=écart(C2:C16;5;D2:D16;1;E2:E16;"CITRON")
Function écart(a As Range, val_a As Double, b As Range, val_b As
Double, c As Range, val_c As String) As Double
Set Feuila = Worksheets(a.Parent.Name)
Set Feuilb = Worksheets(b.Parent.Name)
Set Feuilc = Worksheets(c.Parent.Name)
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Feuilc.Cells(i, c.Column) = "CITRON" And Feuila.Cells(i,
a.Column) = 5 Then
If premiere = "" Then
Select Case Feuilb.Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Feuilb.Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Feuilb.Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
écart = 0 + counter
End Function
isabelle
Grandola a écrit :
Merci à toi... mais le système d'InputBox ne me convient pas du
tout parce que j'aimerais faire référence à des adresses de
cellules plutôt que d'indiquer une valeur "en dur" à la macro.
Sinon, le fonctionnement des lettres c'est pas compliqué.
Si la fonction ne trouve jamais de ligne où colonne E = "citron" et
colonne C = 5 elle renvoie "J" . J'ai choisi "J" de manière
totalement arbitraire, tout comme j'ai choisi la lettre "C" qu'on
utilise aussi concaténée avec un chiffre.
En fait la fonction renvoie "J" quand :
SOMMEPROD( (C:C=5) * (E:E="citron") ) = 0
La fonction renvoie par exemple "J4" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 4
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 0
)
= VRAI
La fonction renvoie par exemple "C7" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 7
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 7
)
= VRAI
-------------------------------------------------------------------------
isabelle a écrit :
bonjour Grandola,
voici un premier test, la macro renvoie un chiffre uniquement car
je n'ai pas pigé le fonctionnement des lettres
il faut sélectionner dans l'ordres de l'exemple donnée colonne C,
D, E
Sub Macro1()
Set a = Application.InputBox(prompt:="Faite votre sélection
a(chiffre 5)" , Type:=8)
Set b = Application.InputBox(prompt:="Faite votre sélection
b(chiffre 1 ou autre -1)"", Type:=8)
Set c = Application.InputBox(prompt:="Faite votre sélection
c(citron)", Type:=8)
z1 = c.Item(1).Row
z2 = c.Item(a.Count).Row
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Cells(i, c.Column) = "CITRON" And Cells(i, a.Column) = 5 Then
If premiere = "" Then
Select Case Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
MsgBox counter
End Sub
isabelle
Grandola a écrit :
Oupppps, une coquille......
"Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie ******"J15"******** "
ANNULE ET REMPLACE LE TEXTE ORIGINAL SUIVANT :
" Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie "J10" "
bonjour Grandola,
tu peut remplacer les valeurs de "Citron", "5", "1" par des cellules
renseigner de ces valeurs
dans l'exemple ci-joint : =écart(C2:C16;$G$2;D2:D16;$G$3;E2:E16;$G$4)
j'ai ajouté une dernière parti :
Select Case counter
Case Is = 0: counter = "J"
Case Is < 0: counter = "J" & (counter) * -1
Case Is > 0: counter = "C" & counter
End Select
en espérant que cela traduise bien les conditions pour les lettres
http://cjoint.com/?ezbSUChSpM
isabelle
Grandola a écrit :Après quelques tests, ta fonction marche très bien. Elle renvoie les
bonnes valeurs. :-)
Ce qui me gêne dans ton code c'est que les valeurs que la fonction
doit rechercher ("Citron", "5", "1" ou pas "1") soit écrites "en dur".
J'aimerais pouvoir faire référence à des cellules, plutôt que de
"graver des valeurs dans le marbre".
En espérant que tu as compris ce que je veux dire.
Sinon pour le système de lettres c'est simple :
- si la fonction ne trouve aucune ligne avec E="citron" ET D="5", elle
renvoie "J"
- si la fonction trouve des lignes avec E="citron" ET D="5" et
qu'AUCUNE d'entre elles n'a "1" en colonne D, elle renvoie la
concaténation de "J" et du nombre de lignes trouvées avec "citron" et
"5". Exemple :"J11"
- si la fonction trouve des lignes avec E="citron" ET D="5" et TOUTES
ont "1" en colonne D, elle renvoie la concaténation de "C" et du
nombre de lignes trouvées avec "citron" et "5". Exemple :"C26"
----------------------------------------
isabelle a écrit :ps/ le fichier est ici : http://cjoint.com/?eyiTHQVyud
isabelle
isabelle a écrit :bonjour Grando,
si le resultat counter est exact on peut faire de cette macro une
fonction :
=écart(C2:C16;5;D2:D16;1;E2:E16;"CITRON")
Function écart(a As Range, val_a As Double, b As Range, val_b As
Double, c As Range, val_c As String) As Double
Set Feuila = Worksheets(a.Parent.Name)
Set Feuilb = Worksheets(b.Parent.Name)
Set Feuilc = Worksheets(c.Parent.Name)
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Feuilc.Cells(i, c.Column) = "CITRON" And Feuila.Cells(i,
a.Column) = 5 Then
If premiere = "" Then
Select Case Feuilb.Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Feuilb.Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Feuilb.Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
écart = 0 + counter
End Function
isabelle
Grandola a écrit :Merci à toi... mais le système d'InputBox ne me convient pas du
tout parce que j'aimerais faire référence à des adresses de
cellules plutôt que d'indiquer une valeur "en dur" à la macro.
Sinon, le fonctionnement des lettres c'est pas compliqué.
Si la fonction ne trouve jamais de ligne où colonne E = "citron" et
colonne C = 5 elle renvoie "J" . J'ai choisi "J" de manière
totalement arbitraire, tout comme j'ai choisi la lettre "C" qu'on
utilise aussi concaténée avec un chiffre.
En fait la fonction renvoie "J" quand :
SOMMEPROD( (C:C=5) * (E:E="citron") ) = 0
La fonction renvoie par exemple "J4" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 4
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 0
)
= VRAI
La fonction renvoie par exemple "C7" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 7
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 7
)
= VRAI
-------------------------------------------------------------------------
isabelle a écrit :bonjour Grandola,
voici un premier test, la macro renvoie un chiffre uniquement car
je n'ai pas pigé le fonctionnement des lettres
il faut sélectionner dans l'ordres de l'exemple donnée colonne C,
D, E
Sub Macro1()
Set a = Application.InputBox(prompt:="Faite votre sélection
a(chiffre 5)" , Type:=8)
Set b = Application.InputBox(prompt:="Faite votre sélection
b(chiffre 1 ou autre -1)"", Type:=8)
Set c = Application.InputBox(prompt:="Faite votre sélection
c(citron)", Type:=8)
z1 = c.Item(1).Row
z2 = c.Item(a.Count).Row
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Cells(i, c.Column) = "CITRON" And Cells(i, a.Column) = 5 Then
If premiere = "" Then
Select Case Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
MsgBox counter
End Sub
isabelle
Grandola a écrit :Oupppps, une coquille......
"Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie ******"J15"******** "
ANNULE ET REMPLACE LE TEXTE ORIGINAL SUIVANT :
" Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie "J10" "
Euuuh oui mais si dans les cellules renseignées c'est pas la valeur
"citron" qui est inscrite la fonction marche plus :-(. C'est ça que je
voulais dire.
Concernant, les lettres y'a un hic également. En fait, il n'y a pas de
lettres à tous les coups.
Si parmi les lignes trouvées avec E="citron" ET D="5", certaines ont
C="1", et d'autres ont C <> "1" alors il n'y aura pas de lettres.
Il y aura une lettre seulement :
Si AUCUNE ligne avec E="citron" ET D="5" n'a été trouvée -----> "J"
Si lignes trouvées avec E="citron" ET D="5", mais qu'AUCUNE de ces
lignes trouvées avec C="1" -----> CONCATENER ( "J" ; Nb de lignes avec
E="citron" ET D="5" )
Si lignes trouvées avec E="citron" ET D="5", et que TOUTES ces lignes
trouvées ont C="1" -----> CONCATENER ( "C" ; Nb de lignes avec
E="citron" ET D="5" )
-------------------------------------------------------------
isabelle a écrit :bonjour Grandola,
tu peut remplacer les valeurs de "Citron", "5", "1" par des cellules
renseigner de ces valeurs
dans l'exemple ci-joint : =écart(C2:C16;$G$2;D2:D16;$G$3;E2:E16;$G$4)
j'ai ajouté une dernière parti :
Select Case counter
Case Is = 0: counter = "J"
Case Is < 0: counter = "J" & (counter) * -1
Case Is > 0: counter = "C" & counter
End Select
en espérant que cela traduise bien les conditions pour les lettres
http://cjoint.com/?ezbSUChSpM
isabelle
Grandola a écrit :Après quelques tests, ta fonction marche très bien. Elle renvoie les
bonnes valeurs. :-)
Ce qui me gêne dans ton code c'est que les valeurs que la fonction
doit rechercher ("Citron", "5", "1" ou pas "1") soit écrites "en
dur". J'aimerais pouvoir faire référence à des cellules, plutôt que
de "graver des valeurs dans le marbre".
En espérant que tu as compris ce que je veux dire.
Sinon pour le système de lettres c'est simple :
- si la fonction ne trouve aucune ligne avec E="citron" ET D="5",
elle renvoie "J"
- si la fonction trouve des lignes avec E="citron" ET D="5" et
qu'AUCUNE d'entre elles n'a "1" en colonne D, elle renvoie la
concaténation de "J" et du nombre de lignes trouvées avec "citron"
et "5". Exemple :"J11"
- si la fonction trouve des lignes avec E="citron" ET D="5" et
TOUTES ont "1" en colonne D, elle renvoie la concaténation de "C" et
du nombre de lignes trouvées avec "citron" et "5". Exemple :"C26"
----------------------------------------
isabelle a écrit :ps/ le fichier est ici : http://cjoint.com/?eyiTHQVyud
isabelle
isabelle a écrit :bonjour Grando,
si le resultat counter est exact on peut faire de cette macro une
fonction :
=écart(C2:C16;5;D2:D16;1;E2:E16;"CITRON")
Function écart(a As Range, val_a As Double, b As Range, val_b As
Double, c As Range, val_c As String) As Double
Set Feuila = Worksheets(a.Parent.Name)
Set Feuilb = Worksheets(b.Parent.Name)
Set Feuilc = Worksheets(c.Parent.Name)
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Feuilc.Cells(i, c.Column) = "CITRON" And Feuila.Cells(i,
a.Column) = 5 Then
If premiere = "" Then
Select Case Feuilb.Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Feuilb.Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Feuilb.Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
écart = 0 + counter
End Function
isabelle
Grandola a écrit :Merci à toi... mais le système d'InputBox ne me convient pas du
tout parce que j'aimerais faire référence à des adresses de
cellules plutôt que d'indiquer une valeur "en dur" à la macro.
Sinon, le fonctionnement des lettres c'est pas compliqué.
Si la fonction ne trouve jamais de ligne où colonne E = "citron"
et colonne C = 5 elle renvoie "J" . J'ai choisi "J" de manière
totalement arbitraire, tout comme j'ai choisi la lettre "C" qu'on
utilise aussi concaténée avec un chiffre.
En fait la fonction renvoie "J" quand :
SOMMEPROD( (C:C=5) * (E:E="citron") ) = 0
La fonction renvoie par exemple "J4" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 4
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 0
)
= VRAI
La fonction renvoie par exemple "C7" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 7
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 7
)
= VRAI
-------------------------------------------------------------------------
isabelle a écrit :bonjour Grandola,
voici un premier test, la macro renvoie un chiffre uniquement
car je n'ai pas pigé le fonctionnement des lettres
il faut sélectionner dans l'ordres de l'exemple donnée colonne
C, D, E
Sub Macro1()
Set a = Application.InputBox(prompt:="Faite votre sélection
a(chiffre 5)" , Type:=8)
Set b = Application.InputBox(prompt:="Faite votre sélection
b(chiffre 1 ou autre -1)"", Type:=8)
Set c = Application.InputBox(prompt:="Faite votre sélection
c(citron)", Type:=8)
z1 = c.Item(1).Row
z2 = c.Item(a.Count).Row
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Cells(i, c.Column) = "CITRON" And Cells(i, a.Column) = 5 Then
If premiere = "" Then
Select Case Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
MsgBox counter
End Sub
isabelle
Grandola a écrit :Oupppps, une coquille......
"Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie ******"J15"******** "
ANNULE ET REMPLACE LE TEXTE ORIGINAL SUIVANT :
" Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie "J10" "
Euuuh oui mais si dans les cellules renseignées c'est pas la valeur
"citron" qui est inscrite la fonction marche plus :-(. C'est ça que je
voulais dire.
Concernant, les lettres y'a un hic également. En fait, il n'y a pas de
lettres à tous les coups.
Si parmi les lignes trouvées avec E="citron" ET D="5", certaines ont
C="1", et d'autres ont C <> "1" alors il n'y aura pas de lettres.
Il y aura une lettre seulement :
Si AUCUNE ligne avec E="citron" ET D="5" n'a été trouvée -----> "J"
Si lignes trouvées avec E="citron" ET D="5", mais qu'AUCUNE de ces
lignes trouvées avec C="1" -----> CONCATENER ( "J" ; Nb de lignes avec
E="citron" ET D="5" )
Si lignes trouvées avec E="citron" ET D="5", et que TOUTES ces lignes
trouvées ont C="1" -----> CONCATENER ( "C" ; Nb de lignes avec
E="citron" ET D="5" )
-------------------------------------------------------------
isabelle a écrit :
bonjour Grandola,
tu peut remplacer les valeurs de "Citron", "5", "1" par des cellules
renseigner de ces valeurs
dans l'exemple ci-joint : =écart(C2:C16;$G$2;D2:D16;$G$3;E2:E16;$G$4)
j'ai ajouté une dernière parti :
Select Case counter
Case Is = 0: counter = "J"
Case Is < 0: counter = "J" & (counter) * -1
Case Is > 0: counter = "C" & counter
End Select
en espérant que cela traduise bien les conditions pour les lettres
http://cjoint.com/?ezbSUChSpM
isabelle
Grandola a écrit :
Après quelques tests, ta fonction marche très bien. Elle renvoie les
bonnes valeurs. :-)
Ce qui me gêne dans ton code c'est que les valeurs que la fonction
doit rechercher ("Citron", "5", "1" ou pas "1") soit écrites "en
dur". J'aimerais pouvoir faire référence à des cellules, plutôt que
de "graver des valeurs dans le marbre".
En espérant que tu as compris ce que je veux dire.
Sinon pour le système de lettres c'est simple :
- si la fonction ne trouve aucune ligne avec E="citron" ET D="5",
elle renvoie "J"
- si la fonction trouve des lignes avec E="citron" ET D="5" et
qu'AUCUNE d'entre elles n'a "1" en colonne D, elle renvoie la
concaténation de "J" et du nombre de lignes trouvées avec "citron"
et "5". Exemple :"J11"
- si la fonction trouve des lignes avec E="citron" ET D="5" et
TOUTES ont "1" en colonne D, elle renvoie la concaténation de "C" et
du nombre de lignes trouvées avec "citron" et "5". Exemple :"C26"
----------------------------------------
isabelle a écrit :
ps/ le fichier est ici : http://cjoint.com/?eyiTHQVyud
isabelle
isabelle a écrit :
bonjour Grando,
si le resultat counter est exact on peut faire de cette macro une
fonction :
=écart(C2:C16;5;D2:D16;1;E2:E16;"CITRON")
Function écart(a As Range, val_a As Double, b As Range, val_b As
Double, c As Range, val_c As String) As Double
Set Feuila = Worksheets(a.Parent.Name)
Set Feuilb = Worksheets(b.Parent.Name)
Set Feuilc = Worksheets(c.Parent.Name)
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Feuilc.Cells(i, c.Column) = "CITRON" And Feuila.Cells(i,
a.Column) = 5 Then
If premiere = "" Then
Select Case Feuilb.Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Feuilb.Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Feuilb.Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
écart = 0 + counter
End Function
isabelle
Grandola a écrit :
Merci à toi... mais le système d'InputBox ne me convient pas du
tout parce que j'aimerais faire référence à des adresses de
cellules plutôt que d'indiquer une valeur "en dur" à la macro.
Sinon, le fonctionnement des lettres c'est pas compliqué.
Si la fonction ne trouve jamais de ligne où colonne E = "citron"
et colonne C = 5 elle renvoie "J" . J'ai choisi "J" de manière
totalement arbitraire, tout comme j'ai choisi la lettre "C" qu'on
utilise aussi concaténée avec un chiffre.
En fait la fonction renvoie "J" quand :
SOMMEPROD( (C:C=5) * (E:E="citron") ) = 0
La fonction renvoie par exemple "J4" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 4
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 0
)
= VRAI
La fonction renvoie par exemple "C7" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 7
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 7
)
= VRAI
-------------------------------------------------------------------------
isabelle a écrit :
bonjour Grandola,
voici un premier test, la macro renvoie un chiffre uniquement
car je n'ai pas pigé le fonctionnement des lettres
il faut sélectionner dans l'ordres de l'exemple donnée colonne
C, D, E
Sub Macro1()
Set a = Application.InputBox(prompt:="Faite votre sélection
a(chiffre 5)" , Type:=8)
Set b = Application.InputBox(prompt:="Faite votre sélection
b(chiffre 1 ou autre -1)"", Type:=8)
Set c = Application.InputBox(prompt:="Faite votre sélection
c(citron)", Type:=8)
z1 = c.Item(1).Row
z2 = c.Item(a.Count).Row
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Cells(i, c.Column) = "CITRON" And Cells(i, a.Column) = 5 Then
If premiere = "" Then
Select Case Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
MsgBox counter
End Sub
isabelle
Grandola a écrit :
Oupppps, une coquille......
"Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie ******"J15"******** "
ANNULE ET REMPLACE LE TEXTE ORIGINAL SUIVANT :
" Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie "J10" "
Euuuh oui mais si dans les cellules renseignées c'est pas la valeur
"citron" qui est inscrite la fonction marche plus :-(. C'est ça que je
voulais dire.
Concernant, les lettres y'a un hic également. En fait, il n'y a pas de
lettres à tous les coups.
Si parmi les lignes trouvées avec E="citron" ET D="5", certaines ont
C="1", et d'autres ont C <> "1" alors il n'y aura pas de lettres.
Il y aura une lettre seulement :
Si AUCUNE ligne avec E="citron" ET D="5" n'a été trouvée -----> "J"
Si lignes trouvées avec E="citron" ET D="5", mais qu'AUCUNE de ces
lignes trouvées avec C="1" -----> CONCATENER ( "J" ; Nb de lignes avec
E="citron" ET D="5" )
Si lignes trouvées avec E="citron" ET D="5", et que TOUTES ces lignes
trouvées ont C="1" -----> CONCATENER ( "C" ; Nb de lignes avec
E="citron" ET D="5" )
-------------------------------------------------------------
isabelle a écrit :bonjour Grandola,
tu peut remplacer les valeurs de "Citron", "5", "1" par des cellules
renseigner de ces valeurs
dans l'exemple ci-joint : =écart(C2:C16;$G$2;D2:D16;$G$3;E2:E16;$G$4)
j'ai ajouté une dernière parti :
Select Case counter
Case Is = 0: counter = "J"
Case Is < 0: counter = "J" & (counter) * -1
Case Is > 0: counter = "C" & counter
End Select
en espérant que cela traduise bien les conditions pour les lettres
http://cjoint.com/?ezbSUChSpM
isabelle
Grandola a écrit :Après quelques tests, ta fonction marche très bien. Elle renvoie les
bonnes valeurs. :-)
Ce qui me gêne dans ton code c'est que les valeurs que la fonction
doit rechercher ("Citron", "5", "1" ou pas "1") soit écrites "en
dur". J'aimerais pouvoir faire référence à des cellules, plutôt que
de "graver des valeurs dans le marbre".
En espérant que tu as compris ce que je veux dire.
Sinon pour le système de lettres c'est simple :
- si la fonction ne trouve aucune ligne avec E="citron" ET D="5",
elle renvoie "J"
- si la fonction trouve des lignes avec E="citron" ET D="5" et
qu'AUCUNE d'entre elles n'a "1" en colonne D, elle renvoie la
concaténation de "J" et du nombre de lignes trouvées avec "citron"
et "5". Exemple :"J11"
- si la fonction trouve des lignes avec E="citron" ET D="5" et
TOUTES ont "1" en colonne D, elle renvoie la concaténation de "C" et
du nombre de lignes trouvées avec "citron" et "5". Exemple :"C26"
----------------------------------------
isabelle a écrit :ps/ le fichier est ici : http://cjoint.com/?eyiTHQVyud
isabelle
isabelle a écrit :bonjour Grando,
si le resultat counter est exact on peut faire de cette macro une
fonction :
=écart(C2:C16;5;D2:D16;1;E2:E16;"CITRON")
Function écart(a As Range, val_a As Double, b As Range, val_b As
Double, c As Range, val_c As String) As Double
Set Feuila = Worksheets(a.Parent.Name)
Set Feuilb = Worksheets(b.Parent.Name)
Set Feuilc = Worksheets(c.Parent.Name)
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Feuilc.Cells(i, c.Column) = "CITRON" And Feuila.Cells(i,
a.Column) = 5 Then
If premiere = "" Then
Select Case Feuilb.Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Feuilb.Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Feuilb.Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
écart = 0 + counter
End Function
isabelle
Grandola a écrit :Merci à toi... mais le système d'InputBox ne me convient pas du
tout parce que j'aimerais faire référence à des adresses de
cellules plutôt que d'indiquer une valeur "en dur" à la macro.
Sinon, le fonctionnement des lettres c'est pas compliqué.
Si la fonction ne trouve jamais de ligne où colonne E = "citron"
et colonne C = 5 elle renvoie "J" . J'ai choisi "J" de manière
totalement arbitraire, tout comme j'ai choisi la lettre "C" qu'on
utilise aussi concaténée avec un chiffre.
En fait la fonction renvoie "J" quand :
SOMMEPROD( (C:C=5) * (E:E="citron") ) = 0
La fonction renvoie par exemple "J4" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 4
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 0
)
= VRAI
La fonction renvoie par exemple "C7" quand :
ET
(
SOMMEPROD((C:C=5)*(E:E="citron") = 7
;
SOMMEPROD(( C:C=5) * (E:E="citron") * (D:D = "1" )) = 7
)
= VRAI
-------------------------------------------------------------------------
isabelle a écrit :bonjour Grandola,
voici un premier test, la macro renvoie un chiffre uniquement
car je n'ai pas pigé le fonctionnement des lettres
il faut sélectionner dans l'ordres de l'exemple donnée colonne
C, D, E
Sub Macro1()
Set a = Application.InputBox(prompt:="Faite votre sélection
a(chiffre 5)" , Type:=8)
Set b = Application.InputBox(prompt:="Faite votre sélection
b(chiffre 1 ou autre -1)"", Type:=8)
Set c = Application.InputBox(prompt:="Faite votre sélection
c(citron)", Type:=8)
z1 = c.Item(1).Row
z2 = c.Item(a.Count).Row
For i = c.Item(c.Count).Row To c.Item(1).Row Step -1
If Cells(i, c.Column) = "CITRON" And Cells(i, a.Column) = 5 Then
If premiere = "" Then
Select Case Cells(i, b.Column)
Case Is = 1
counter = counter + 1
premiere = "pos"
Case Is <> 1
counter = counter - 1
premiere = "neg"
End Select
Else
Select Case premiere
Case "neg"
If Cells(i, b.Column) <> 1 Then
counter = counter - 1
Else: GoTo fin
End If
Case "pos"
If Cells(i, b.Column) = 1 Then
counter = counter + 1
Else: GoTo fin
End If
End Select
End If
End If
Next
fin:
MsgBox counter
End Sub
isabelle
Grandola a écrit :Oupppps, une coquille......
"Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie ******"J15"******** "
ANNULE ET REMPLACE LE TEXTE ORIGINAL SUIVANT :
" Elle trouve 15 lignes répondant à la condition 1.
Parmi ces 15 lignes AUCUNE ne répond à la condition 2.
----> elle renvoie "J10" "