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

critères "est adresse" dans sumproduct

7 réponses
Avatar
LaurentC
Bonjour Í  tous

J'ai un tableau structuré nommé TblOpérations avec différentes colonnes :
NomValeur, Date, Qté, PrixUnit, Frais, Soldée, ...

Au cours d'un code, je créer une variable texte pour préparer la
formule que je mettrai dans un evaluate().

TempText = "=SumProduct((TblOpérations[NomValeur]=""" & LaValeur &
""")*(TblOpérations[Date]<=""" & LaDate * 1 & """) " & _

"*(TblOpérations[Qté]*TblOpérations[PrixUnit]+TblOpérations[Frais]))"
MsgBox TempText

Je voudrai ajouter un test Í  mon SumProduct pour savoir si dans la
colonne TblOpérations[Soldée], il y une adresse de cellule valide.

Dans cette colonne [Soldée], il y a au choix : l'adresse d'une cellule
(par exemple P139), un nombre ou rien.

j'aurai aimé un truc genre
...*(isaddress(TblOpérations[Soldée]))*...

Comment puis je faire ?
Merci pour votre aide.

@+Laurent

7 réponses

Avatar
LaurentC
Oups, je viens de relire mon poste, je complète ma question ... désolé
pour le bruit :-(
Je voudrai ajouter un test Í  mon SumProduct pour savoir si dans la
colonne TblOpérations[Soldée], il y une adresse de cellule valide.
Dans cette colonne [Soldée], il y a au choix : l'adresse d'une
cellule (par exemple P139), un nombre ou rien.

Il faut aussi que la ligne analysée par sumproduct soit plus haut dans
le tableau que l'adresse de ligne P139 ... pas certain d'être super
clair :-(
un truc genre
...*(isAdresseAuDessus(TblOpérations[Soldée]))*...
Si dans [Soldée] il y a P139, la condition est valide si c'est une des
lignes de 138 Í  1.
@+Laurent
Avatar
MichD
Le 18/05/22 Í  15:47, LaurentC a écrit :
Bonjour Í  tous
J'ai un tableau structuré nommé TblOpérations avec différentes colonnes
: NomValeur, Date, Qté, PrixUnit, Frais, Soldée, ...
Au cours d'un code, je créer une variable texte pour préparer la formule
que je mettrai dans un evaluate().
TempText = "=SumProduct((TblOpérations[NomValeur]=""" & LaValeur &
""")*(TblOpérations[Date]<=""" & LaDate * 1 & """) " & _
"*(TblOpérations[Qté]*TblOpérations[PrixUnit]+TblOpérations[Frais]))"
   MsgBox TempText
Je voudrai ajouter un test Í  mon SumProduct pour savoir si dans la
colonne TblOpérations[Soldée], il y une adresse de cellule valide.
Dans cette colonne [Soldée], il y a au choix : l'adresse d'une cellule
(par exemple P139), un nombre ou rien.
j'aurai aimé un truc genre
...*(isaddress(TblOpérations[Soldée]))*...
Comment puis je faire ?
Merci pour votre aide.
@+Laurent

Bonjour,
Je ne suis pas sͻr d'avoir compris le sens de cette phrase :
Si dans [Soldée] il y a P139, la condition est valide si c'est une des
lignes de 138 Í  1.
Si la seule adresse valide et "P139", tu n'as qu'Í  ajouter une condition
au SumProd. Je n'ai pas testé..
'------------------------------------
Sub test()
Dim Adr As String
Adr = "P139"
TempText = "=SumProduct(TblOpérations[NomValeur]=""" & Adr & _
""")*(TblOpérations[NomValeur]=""" & LaValeur & _
""")*(TblOpérations[Date]<=""" & LaDate * 1 & """) " & _
"*(TblOpérations[Qté]*TblOpérations[PrixUnit]+TblOpérations[Frais]))"
MsgBox TempText
End Sub
'------------------------------------
MichD
Avatar
LaurentC
Bonjour MichD
Je ne suis pas sͻr d'avoir compris le sens de cette phrase :

Désolé de ne pas avoir été clair, je modfie ma question.
Comment faire une function() qui renverrai 0 ou 1 (vrai ou faux) en
fonction du contenu d'une cellule envoyé en argument, pour savoir si
c'est une adresse de cellule ou pas ?
La cellule qui sera envoyée en tant qu'argument contient soit rien,
soit un nombre soit une adresse (par exemple P139).
Je pense que je cherche un truc du genre :
function EstAdresse(LaCellule as range) as boolean
if not isnothing(LaCellule) then
EstAdresse = true
else
EstAdresse = false
end if
Merci
@+Laurent
Avatar
LaurentC
Salut
J'en suis lÍ 
Sub testEstAdresse()
MsgBox EstAdresse(ActiveCell.Text)
End Sub
Function EstAdresse(LaCellule)
If Not Range(LaCellule) Is Nothing Then
EstAdresse = True
Else
EstAdresse = False
End If
End Function
Je sélectionne une cellule est lance la sub.
Si la cellule contient une adresse, ça me renvoie vrai, cool.
Par contre j'ai une erreur si la cellule contient un nombre ou est
vide.
Comment gérer cette erreur ?
Merci pour votre aide
@+Laurent
Avatar
MichD
La cellule qui sera envoyée en tant qu'argument contient soit rien, soit
un nombre soit une adresse (par exemple P139).

Tu peux tester la fonction Í  partir de la procédure "Test" en activant
une des 3 possibilités suivantes:
'__________________________________________
Sub Test()
'Le type de valeur que peut prendre cellule
Cellule = "vvv" 'OU Cellule = "AAA" Adresse de cellule
'Cellule = "" 'Vide
'Cellule = 25 'Valeur numérique
MsgBox Contenu(Cellule)
End Sub
'__________________________________________
'__________________________________________
Function Contenu(Cellule As Variant) As Boolean
Dim GestionErreur As String
On Error GoTo GestionErreur
If Cellule = "" Then
Contenu = True
Exit Function
End If
If IsNumeric(Cellule) Then
Contenu = True
Exit Function
End If
Set Rg = Range(Cellule)
Contenu = True
Exit Function
GestionErreur:
If Err.Number <> 0 Then
Contenu = False
Err = 0
End If
Exit Function
End Function
'__________________________________________
MichD
Avatar
MichD
Le 19/05/22 Í  06:47, MichD a écrit :
La cellule qui sera envoyée en tant qu'argument contient soit rien,
soit un nombre soit une adresse (par exemple P139).

Tu peux tester la fonction Í  partir de la procédure "Test" en activant
une des 3 possibilités suivantes:
'__________________________________________
Sub Test()
'Le type de valeur que peut prendre cellule
Cellule = "vvv"  'OU Cellule = "AAA" Adresse de cellule
'Cellule = ""   'Vide
'Cellule = 25   'Valeur numérique
MsgBox Contenu(Cellule)
End Sub
'__________________________________________
'__________________________________________
Function Contenu(Cellule As Variant) As Boolean
Dim GestionErreur As String
On Error GoTo GestionErreur
If Cellule = "" Then
    Contenu = True
    Exit Function
End If
If IsNumeric(Cellule) Then
    Contenu = True
    Exit Function
End If
Set Rg = Range(Cellule)
Contenu = True
Exit Function
GestionErreur:
If Err.Number <> 0 Then
    Contenu = False
    Err = 0
End If
Exit Function
End Function
'__________________________________________
MichD

J'aurais dÍ» écrire cette section de cette manière, nul besoin de tester
une deuxième fois s'il y a une erreur...
GestionErreur:
Err = 0
Contenu = False
Exit Function
MichD
Avatar
LaurentC
MichD a exposé le 19/05/2022 :
Le 19/05/22 Í  06:47, MichD a écrit :
La cellule qui sera envoyée en tant qu'argument contient soit rien, soit
un nombre soit une adresse (par exemple P139).

Tu peux tester la fonction Í  partir de la procédure "Test" en activant une
des 3 possibilités suivantes:
'__________________________________________
Sub Test()
'Le type de valeur que peut prendre cellule
Cellule = "vvv"  'OU Cellule = "AAA" Adresse de cellule
'Cellule = ""   'Vide
'Cellule = 25   'Valeur numérique
MsgBox Contenu(Cellule)
End Sub
'__________________________________________
'__________________________________________
Function Contenu(Cellule As Variant) As Boolean
Dim GestionErreur As String
On Error GoTo GestionErreur
If Cellule = "" Then
    Contenu = True
    Exit Function
End If
If IsNumeric(Cellule) Then
    Contenu = True
    Exit Function
End If
Set Rg = Range(Cellule)
Contenu = True
Exit Function
GestionErreur:
If Err.Number <> 0 Then
    Contenu = False
    Err = 0
End If
Exit Function
End Function
'__________________________________________
MichD

J'aurais dÍ» écrire cette section de cette manière, nul besoin de tester une
deuxième fois s'il y a une erreur...
GestionErreur:
Err = 0
Contenu = False
Exit Function
MichD

Excellent, gros merci Í  toi :-)
@+Laurent