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

Tite fonction siyouplait

10 réponses
Avatar
milloche
Bonjour,
J'ai ça en H1:
=SOMMEPROD((C4:C65000="Haricots")*(E4:E65000)*(H4:H65000))
La colonne C contient les noms, E les prix, H les quantités.
Je voudrais remplacer le "Haricots" par le nom qui se trouve dans la
cellule active dès que je sélectionne une des cellule de cette colonne C.
Et pour économiser l'énergie, que cela ne fonctionne (recalcule) que si je
suis sur cette colonne C
Je sens bien que c'est possible, mais je nage en eau trouble.
Merci.

10 réponses

Avatar
Jacky
Bonsoir,
Je te propose ceci..
A mettre dans le module de la feuille en question
'---------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("c4:c" & Cells(Rows.Count, "c").End(3).Row))
Is Nothing And Target.Count = 1 Then
[h1] = Cells(Target.Row, 5) * (Cells(Target.Row, 8))
End If
End Sub
'----------------

--
Salutations
JJ


"milloche" a écrit dans le message de news:
%
Bonjour,
J'ai ça en H1:
=SOMMEPROD((C4:C65000="Haricots")*(E4:E65000)*(H4:H65000))
La colonne C contient les noms, E les prix, H les quantités.
Je voudrais remplacer le "Haricots" par le nom qui se trouve dans la
cellule active dès que je sélectionne une des cellule de cette colonne C.
Et pour économiser l'énergie, que cela ne fonctionne (recalcule) que si je
suis sur cette colonne C
Je sens bien que c'est possible, mais je nage en eau trouble.
Merci.




Avatar
isabelle
bonjour miloche,

j'ai modifié ta formule comme ceci :
=SOMMEPROD((C4:C65000=legume)*(E4:E65000)*(H4:H65000))

et ajouter un Nom, défini : legume

et mit cette macro sur la page code de ThisWorkBook

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set isect = Application.Intersect(Target, Range("C:C"))
If Not isect Is Nothing And Target.Count = 1 Then
For Each nm In ThisWorkbook.Names
If nm.Name = "legume" Then nm.RefersTo = "=""" & Target & """"
Next
End If
End Sub

isabelle

milloche a écrit :
Bonjour,
J'ai ça en H1:
=SOMMEPROD((C4:C65000="Haricots")*(E4:E65000)*(H4:H65000))
La colonne C contient les noms, E les prix, H les quantités.
Je voudrais remplacer le "Haricots" par le nom qui se trouve dans la
cellule active dès que je sélectionne une des cellule de cette colonne C.
Et pour économiser l'énergie, que cela ne fonctionne (recalcule) que si je
suis sur cette colonne C
Je sens bien que c'est possible, mais je nage en eau trouble.
Merci.





Avatar
isabelle
ps/

j'ai modifié la macro :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set isect = Application.Intersect(Target, Range("C:C"))
If Not isect Is Nothing And Target.Count = 1 Then
ThisWorkbook.Names("legume").RefersTo = "=""" & Target & """"
End If
End Sub

isabelle

isabelle a écrit :
bonjour miloche,

j'ai modifié ta formule comme ceci :
=SOMMEPROD((C4:C65000=legume)*(E4:E65000)*(H4:H65000))

et ajouter un Nom, défini : legume

et mit cette macro sur la page code de ThisWorkBook

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set isect = Application.Intersect(Target, Range("C:C"))
If Not isect Is Nothing And Target.Count = 1 Then
For Each nm In ThisWorkbook.Names
If nm.Name = "legume" Then nm.RefersTo = "=""" & Target & """"
Next
End If
End Sub

isabelle

milloche a écrit :
Bonjour,
J'ai ça en H1:
=SOMMEPROD((C4:C65000="Haricots")*(E4:E65000)*(H4:H65000))
La colonne C contient les noms, E les prix, H les quantités.
Je voudrais remplacer le "Haricots" par le nom qui se trouve dans la
cellule active dès que je sélectionne une des cellule de cette
colonne C.
Et pour économiser l'énergie, que cela ne fonctionne (recalcule) que
si je suis sur cette colonne C
Je sens bien que c'est possible, mais je nage en eau trouble.
Merci.







Avatar
milloche
Houlla !
Je n'aime pas me servir de quelque chose que je ne comprends pas.
De plus dans mon fuseau horaire, et dans ma tranche d'âge, il est temps
d'aller au dodo.
La solution d'Isabelle m'apparaît à première vue meilleure (pardon Jacky)
car elle préserve ma formule sommeprod. Reste à savoir comment attribuer un
nom sans objet. Du moins, c'est ce que je crois comprendre à cette heure!
Gardez le fil, je reviens demain en meilleur état.
Cordialement
JMM

"isabelle" a écrit dans le message de news:

ps/

j'ai modifié la macro :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set isect = Application.Intersect(Target, Range("C:C"))
If Not isect Is Nothing And Target.Count = 1 Then
ThisWorkbook.Names("legume").RefersTo = "=""" & Target & """"
End If
End Sub

isabelle

isabelle a écrit :
bonjour miloche,

j'ai modifié ta formule comme ceci :
=SOMMEPROD((C4:C65000=legume)*(E4:E65000)*(H4:H65000))

et ajouter un Nom, défini : legume

et mit cette macro sur la page code de ThisWorkBook

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set isect = Application.Intersect(Target, Range("C:C"))
If Not isect Is Nothing And Target.Count = 1 Then
For Each nm In ThisWorkbook.Names
If nm.Name = "legume" Then nm.RefersTo = "=""" & Target & """"
Next
End If
End Sub

isabelle

milloche a écrit :
Bonjour,
J'ai ça en H1:
=SOMMEPROD((C4:C65000="Haricots")*(E4:E65000)*(H4:H65000))
La colonne C contient les noms, E les prix, H les quantités.
Je voudrais remplacer le "Haricots" par le nom qui se trouve dans la
cellule active dès que je sélectionne une des cellule de cette colonne
C.
Et pour économiser l'énergie, que cela ne fonctionne (recalcule) que si
je suis sur cette colonne C
Je sens bien que c'est possible, mais je nage en eau trouble.
Merci.









Avatar
isabelle
bonjour milloche,

si tu peut réserver une cellule à gauche de la formule par exemple, cela
simplifierait
de beaucoup la manœuvre,

la formule en H1 : =SOMMEPROD((C4:C65000=G1)*(E4:E65000)*(H4:H65000))
la cellule G1 libre
et la macro :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set isect = Application.Intersect(Target, Range("C:C"))
If Not isect Is Nothing And Target.Count = 1 Then Range("E1") = Target
End Sub

isabelle


milloche a écrit :
Houlla !
Je n'aime pas me servir de quelque chose que je ne comprends pas.
De plus dans mon fuseau horaire, et dans ma tranche d'âge, il est temps
d'aller au dodo.
La solution d'Isabelle m'apparaît à première vue meilleure (pardon Jacky)
car elle préserve ma formule sommeprod. Reste à savoir comment attribuer un
nom sans objet. Du moins, c'est ce que je crois comprendre à cette heure!
Gardez le fil, je reviens demain en meilleur état.
Cordialement
JMM

"isabelle" a écrit dans le message de news:


ps/

j'ai modifié la macro :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set isect = Application.Intersect(Target, Range("C:C"))
If Not isect Is Nothing And Target.Count = 1 Then
ThisWorkbook.Names("legume").RefersTo = "=""" & Target & """"
End If
End Sub

isabelle

isabelle a écrit :

bonjour miloche,

j'ai modifié ta formule comme ceci :
=SOMMEPROD((C4:C65000=legume)*(E4:E65000)*(H4:H65000))

et ajouter un Nom, défini : legume

et mit cette macro sur la page code de ThisWorkBook

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set isect = Application.Intersect(Target, Range("C:C"))
If Not isect Is Nothing And Target.Count = 1 Then
For Each nm In ThisWorkbook.Names
If nm.Name = "legume" Then nm.RefersTo = "=""" & Target & """"
Next
End If
End Sub

isabelle

milloche a écrit :

Bonjour,
J'ai ça en H1:
=SOMMEPROD((C4:C65000="Haricots")*(E4:E65000)*(H4:H65000))
La colonne C contient les noms, E les prix, H les quantités.
Je voudrais remplacer le "Haricots" par le nom qui se trouve dans la
cellule active dès que je sélectionne une des cellule de cette colonne
C.
Et pour économiser l'énergie, que cela ne fonctionne (recalcule) que si
je suis sur cette colonne C
Je sens bien que c'est possible, mais je nage en eau trouble.
Merci.















Avatar
isabelle
correction :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set isect = Application.Intersect(Target, Range("C:C"))
If Not isect Is Nothing And Target.Count = 1 Then Range("G1") = Target
End Sub

isabelle


isabelle a écrit :
bonjour milloche,

si tu peut réserver une cellule à gauche de la formule par exemple,
cela simplifierait
de beaucoup la manœuvre,

la formule en H1 : =SOMMEPROD((C4:C65000=G1)*(E4:E65000)*(H4:H65000))
la cellule G1 libre
et la macro :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set isect = Application.Intersect(Target, Range("C:C"))
If Not isect Is Nothing And Target.Count = 1 Then Range("E1") = Target
End Sub

isabelle


milloche a écrit :
Houlla !
Je n'aime pas me servir de quelque chose que je ne comprends pas.
De plus dans mon fuseau horaire, et dans ma tranche d'âge, il est
temps d'aller au dodo.
La solution d'Isabelle m'apparaît à première vue meilleure (pardon
Jacky) car elle préserve ma formule sommeprod. Reste à savoir comment
attribuer un nom sans objet. Du moins, c'est ce que je crois
comprendre à cette heure!
Gardez le fil, je reviens demain en meilleur état.
Cordialement
JMM

"isabelle" a écrit dans le message de news:


ps/

j'ai modifié la macro :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set isect = Application.Intersect(Target, Range("C:C"))
If Not isect Is Nothing And Target.Count = 1 Then
ThisWorkbook.Names("legume").RefersTo = "=""" & Target & """"
End If
End Sub

isabelle

isabelle a écrit :

bonjour miloche,

j'ai modifié ta formule comme ceci :
=SOMMEPROD((C4:C65000=legume)*(E4:E65000)*(H4:H65000))

et ajouter un Nom, défini : legume

et mit cette macro sur la page code de ThisWorkBook

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set isect = Application.Intersect(Target, Range("C:C"))
If Not isect Is Nothing And Target.Count = 1 Then
For Each nm In ThisWorkbook.Names
If nm.Name = "legume" Then nm.RefersTo = "=""" & Target & """"
Next
End If
End Sub

isabelle

milloche a écrit :

Bonjour,
J'ai ça en H1:
=SOMMEPROD((C4:C65000="Haricots")*(E4:E65000)*(H4:H65000))
La colonne C contient les noms, E les prix, H les quantités.
Je voudrais remplacer le "Haricots" par le nom qui se trouve dans
la cellule active dès que je sélectionne une des cellule de cette
colonne C.
Et pour économiser l'énergie, que cela ne fonctionne (recalcule)
que si je suis sur cette colonne C
Je sens bien que c'est possible, mais je nage en eau trouble.
Merci.

















Avatar
Jacky
Re...
Si tu veux garder la formule
'--------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, [c4:c65000]) Is Nothing And Target.Count = 1 Then
[h1].Formula = "=SUMPRODUCT((c4:c65000=""" & Target.Value &
""")*(e4:e65000)*(h4:h65000))"
End If
End Sub
'----------------

--
Salutations
JJ


"milloche" a écrit dans le message de news:
%
Houlla !
Je n'aime pas me servir de quelque chose que je ne comprends pas.
De plus dans mon fuseau horaire, et dans ma tranche d'âge, il est temps
d'aller au dodo.
La solution d'Isabelle m'apparaît à première vue meilleure (pardon Jacky)
car elle préserve ma formule sommeprod. Reste à savoir comment attribuer
un nom sans objet. Du moins, c'est ce que je crois comprendre à cette
heure!
Gardez le fil, je reviens demain en meilleur état.
Cordialement
JMM

"isabelle" a écrit dans le message de news:

ps/

j'ai modifié la macro :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set isect = Application.Intersect(Target, Range("C:C"))
If Not isect Is Nothing And Target.Count = 1 Then
ThisWorkbook.Names("legume").RefersTo = "=""" & Target & """"
End If
End Sub

isabelle

isabelle a écrit :
bonjour miloche,

j'ai modifié ta formule comme ceci :
=SOMMEPROD((C4:C65000=legume)*(E4:E65000)*(H4:H65000))

et ajouter un Nom, défini : legume

et mit cette macro sur la page code de ThisWorkBook

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set isect = Application.Intersect(Target, Range("C:C"))
If Not isect Is Nothing And Target.Count = 1 Then
For Each nm In ThisWorkbook.Names
If nm.Name = "legume" Then nm.RefersTo = "=""" & Target & """"
Next
End If
End Sub

isabelle

milloche a écrit :
Bonjour,
J'ai ça en H1:
=SOMMEPROD((C4:C65000="Haricots")*(E4:E65000)*(H4:H65000))
La colonne C contient les noms, E les prix, H les quantités.
Je voudrais remplacer le "Haricots" par le nom qui se trouve dans la
cellule active dès que je sélectionne une des cellule de cette colonne
C.
Et pour économiser l'énergie, que cela ne fonctionne (recalcule) que si
je suis sur cette colonne C
Je sens bien que c'est possible, mais je nage en eau trouble.
Merci.













Avatar
milloche
Bonjour,

Isabelle,
j'ai placé ta macro dans feuil1 car dans thisworkbook, j'avais #NOM?# et
rien d'autre ne se passait. Maintenant, ça roule. Sans doute parce-que
l'insertion nom "legume" que j'ai faite fait référence à cette feuille.
Te rends tu compte que tu viens d'inventer un genre de
SOUS.TOTAL(109;plage), qui n'est pas dans mon excel 2000, sans même avoir à
filtrer quoi que ce soit ? juste choisir une cellule ! Tout ça grâce à moi
! <]:o))

Jacky,
bien que toujours en chinois pour moi, ta formule fonctionne pour LA ligne
courante mais j'ai plusieurs lignes de 'haricot" et c'est leur total que je
voulais.

Merci tous deux.
Cordialement.
JMM
"isabelle" a écrit dans le message de news:

ps/

j'ai modifié la macro :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set isect = Application.Intersect(Target, Range("C:C"))
If Not isect Is Nothing And Target.Count = 1 Then
ThisWorkbook.Names("legume").RefersTo = "=""" & Target & """"
End If
End Sub

isabelle

isabelle a écrit :
bonjour miloche,

j'ai modifié ta formule comme ceci :
=SOMMEPROD((C4:C65000=legume)*(E4:E65000)*(H4:H65000))

et ajouter un Nom, défini : legume

et mit cette macro sur la page code de ThisWorkBook

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set isect = Application.Intersect(Target, Range("C:C"))
If Not isect Is Nothing And Target.Count = 1 Then
For Each nm In ThisWorkbook.Names
If nm.Name = "legume" Then nm.RefersTo = "=""" & Target & """"
Next
End If
End Sub

isabelle

milloche a écrit :
Bonjour,
J'ai ça en H1:
=SOMMEPROD((C4:C65000="Haricots")*(E4:E65000)*(H4:H65000))
La colonne C contient les noms, E les prix, H les quantités.
Je voudrais remplacer le "Haricots" par le nom qui se trouve dans la
cellule active dès que je sélectionne une des cellule de cette colonne
C.
Et pour économiser l'énergie, que cela ne fonctionne (recalcule) que si
je suis sur cette colonne C
Je sens bien que c'est possible, mais je nage en eau trouble.
Merci.









Avatar
Jacky
Re...
..... et c'est leur total que je voulais.



Ce qui à était rectifier dans le dernier code proposé (tout en respectant la
garde de la formule ;o)) )
copie
'--------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, [c4:c65000]) Is Nothing And Target.Count = 1 Then
[h1].Formula = "=SUMPRODUCT((c4:c65000=""" & Target.Value &
""")*(e4:e65000)*(h4:h65000))"
End If
End Sub
'----------------
Tout en respectant la garde de la formule ;o)) )
--
Salutations
JJ


"milloche" a écrit dans le message de news:
%
Bonjour,

Isabelle,
j'ai placé ta macro dans feuil1 car dans thisworkbook, j'avais #NOM?# et
rien d'autre ne se passait. Maintenant, ça roule. Sans doute parce-que
l'insertion nom "legume" que j'ai faite fait référence à cette feuille.
Te rends tu compte que tu viens d'inventer un genre de
SOUS.TOTAL(109;plage), qui n'est pas dans mon excel 2000, sans même avoir
à filtrer quoi que ce soit ? juste choisir une cellule ! Tout ça grâce à
moi ! <]:o))

Jacky,
bien que toujours en chinois pour moi, ta formule fonctionne pour LA ligne
courante mais j'ai plusieurs lignes de 'haricot" et c'est leur total que
je voulais.

Merci tous deux.
Cordialement.
JMM
"isabelle" a écrit dans le message de news:

ps/

j'ai modifié la macro :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set isect = Application.Intersect(Target, Range("C:C"))
If Not isect Is Nothing And Target.Count = 1 Then
ThisWorkbook.Names("legume").RefersTo = "=""" & Target & """"
End If
End Sub

isabelle

isabelle a écrit :
bonjour miloche,

j'ai modifié ta formule comme ceci :
=SOMMEPROD((C4:C65000=legume)*(E4:E65000)*(H4:H65000))

et ajouter un Nom, défini : legume

et mit cette macro sur la page code de ThisWorkBook

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set isect = Application.Intersect(Target, Range("C:C"))
If Not isect Is Nothing And Target.Count = 1 Then
For Each nm In ThisWorkbook.Names
If nm.Name = "legume" Then nm.RefersTo = "=""" & Target & """"
Next
End If
End Sub

isabelle

milloche a écrit :
Bonjour,
J'ai ça en H1:
=SOMMEPROD((C4:C65000="Haricots")*(E4:E65000)*(H4:H65000))
La colonne C contient les noms, E les prix, H les quantités.
Je voudrais remplacer le "Haricots" par le nom qui se trouve dans la
cellule active dès que je sélectionne une des cellule de cette colonne
C.
Et pour économiser l'énergie, que cela ne fonctionne (recalcule) que si
je suis sur cette colonne C
Je sens bien que c'est possible, mais je nage en eau trouble.
Merci.













Avatar
milloche
Jacky
Exact sauf que j'ai rajouté un Else pour rapatrier ma formule generale
quand je ne suis plus dans ma colonne C et que je veux le total global de
toutes les lignes.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, [c4:c65000]) Is Nothing And Target.Count = 1 Then
[h1].Formula = "=SUMPRODUCT((c4:c65000=""" & Target.Value &
""")*(e4:e65000)*(h4:h65000))"
Else
[h1].Formula = "=SUMPRODUCT((C4:C65000<>"""")*(E4:E65000)*(H4:H65000))"
End If
End Sub

Vos deux solutions sont différentes, mais disons équivalentes
<]:o))
Et moi, je suis content !
Cordialement.
JMM

"Jacky" a écrit dans le message de news:

Re...
..... et c'est leur total que je voulais.



Ce qui à était rectifier dans le dernier code proposé (tout en respectant
la garde de la formule ;o)) )
copie
'--------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, [c4:c65000]) Is Nothing And Target.Count = 1
Then
[h1].Formula = "=SUMPRODUCT((c4:c65000=""" & Target.Value &
""")*(e4:e65000)*(h4:h65000))"
End If
End Sub
'----------------
Tout en respectant la garde de la formule ;o)) )
--
Salutations
JJ


"milloche" a écrit dans le message de news:
%
Bonjour,

Isabelle,
j'ai placé ta macro dans feuil1 car dans thisworkbook, j'avais #NOM?# et
rien d'autre ne se passait. Maintenant, ça roule. Sans doute parce-que
l'insertion nom "legume" que j'ai faite fait référence à cette feuille.
Te rends tu compte que tu viens d'inventer un genre de
SOUS.TOTAL(109;plage), qui n'est pas dans mon excel 2000, sans même
avoir à filtrer quoi que ce soit ? juste choisir une cellule ! Tout ça
grâce à moi ! <]:o))

Jacky,
bien que toujours en chinois pour moi, ta formule fonctionne pour LA
ligne courante mais j'ai plusieurs lignes de 'haricot" et c'est leur
total que je voulais.

Merci tous deux.
Cordialement.
JMM
"isabelle" a écrit dans le message de news:

ps/

j'ai modifié la macro :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set isect = Application.Intersect(Target, Range("C:C"))
If Not isect Is Nothing And Target.Count = 1 Then
ThisWorkbook.Names("legume").RefersTo = "=""" & Target & """"
End If
End Sub

isabelle

isabelle a écrit :
bonjour miloche,

j'ai modifié ta formule comme ceci :
=SOMMEPROD((C4:C65000=legume)*(E4:E65000)*(H4:H65000))

et ajouter un Nom, défini : legume

et mit cette macro sur la page code de ThisWorkBook

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set isect = Application.Intersect(Target, Range("C:C"))
If Not isect Is Nothing And Target.Count = 1 Then
For Each nm In ThisWorkbook.Names
If nm.Name = "legume" Then nm.RefersTo = "=""" & Target & """"
Next
End If
End Sub

isabelle

milloche a écrit :
Bonjour,
J'ai ça en H1:
=SOMMEPROD((C4:C65000="Haricots")*(E4:E65000)*(H4:H65000))
La colonne C contient les noms, E les prix, H les quantités.
Je voudrais remplacer le "Haricots" par le nom qui se trouve dans la
cellule active dès que je sélectionne une des cellule de cette
colonne C.
Et pour économiser l'énergie, que cela ne fonctionne (recalcule) que
si je suis sur cette colonne C
Je sens bien que c'est possible, mais je nage en eau trouble.
Merci.