OVH Cloud OVH Cloud

Formule trop complexe

5 réponses
Avatar
Franck Deschamps
Bonjour,

j'ai une requête ou j'ai en tant que champ une expression de type
Donnees: VraiFaux (MonChamp = "Type1"; [Type1]; VraiFaux(MonChamp =
"Type2.....)

Le problème est que j'ai 15 vraifaux imbriqués (je ne sais pas faire
autrement) et du coup Access me dit formule trop complexe, auriez vous une
autre solution ?

Merci

Franck

5 réponses

Avatar
Jessy Sempere [MVP]
Bonjour

Le mieux serait peut-être de mettre tes données en ligne, genre

1 Type1 Donnée1
1 Type2 Donnée2
2 Type1 Donnée3
3 Type1 Donnée4
3 Type3 Donnée5
3 ...

Ensuite, si tu veux mettre les type en colonnes, il te suffit d'utiliser une
requête analyse croisée...

Sinon, si tu veux gardé ce que tu as fais, le mieux serait de faire une
fonction
perso en VBA qui traite tous tes vraifaux et ensuite d'appeler cette
fonction
dans ta requête.

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"Franck Deschamps" a écrit dans le message de
news:OvY$
Bonjour,

j'ai une requête ou j'ai en tant que champ une expression de type
Donnees: VraiFaux (MonChamp = "Type1"; [Type1]; VraiFaux(MonChamp > "Type2.....)

Le problème est que j'ai 15 vraifaux imbriqués (je ne sais pas faire
autrement) et du coup Access me dit formule trop complexe, auriez vous une
autre solution ?

Merci

Franck




Avatar
Franck DESCHAMPS
Bonjour Jessy,

merci de ta réponse mais en fait ce que j'appelle Type c'est le nom d'un
champ de ma table en fait en fonction du vraifaux, je choisis un champ qui
me donne une liste de données et non pas qu'une donnée.
en fait c'est au niveau de la définition de mon champ de ma requête:
ChampRequete: VraiFaux (MonChampde formulaire = "champ1"; [champ1]; ....

Donc je pense que ta 1ere solution ne marche pas dans mon cas en revanche la
fonction perso me semble intéressant mais peux tu m'indiquer comment je le
fais? où ? et comment je l'appelle dans ma requête?

Excuse moi mais je débute.

Merci

Franck



"Jessy Sempere [MVP]" a écrit dans le message de
news: 4382cab6$
Bonjour

Le mieux serait peut-être de mettre tes données en ligne, genre

1 Type1 Donnée1
1 Type2 Donnée2
2 Type1 Donnée3
3 Type1 Donnée4
3 Type3 Donnée5
3 ...

Ensuite, si tu veux mettre les type en colonnes, il te suffit d'utiliser
une
requête analyse croisée...

Sinon, si tu veux gardé ce que tu as fais, le mieux serait de faire une
fonction
perso en VBA qui traite tous tes vraifaux et ensuite d'appeler cette
fonction
dans ta requête.

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"Franck Deschamps" a écrit dans le message de
news:OvY$
Bonjour,

j'ai une requête ou j'ai en tant que champ une expression de type
Donnees: VraiFaux (MonChamp = "Type1"; [Type1]; VraiFaux(MonChamp >> "Type2.....)

Le problème est que j'ai 15 vraifaux imbriqués (je ne sais pas faire
autrement) et du coup Access me dit formule trop complexe, auriez vous
une
autre solution ?

Merci

Franck








Avatar
Jessy Sempere [MVP]
Re,

Ok alors place le code qui suit dans un module standard de ta base

*****************************************************
Function fWhatField(strField As String, _
ParamArray TheFields() As Variant)
Dim intCaract As Integer
For intCaract = 1 To Len(strField)
If IsNumeric(Mid(strField, intCaract, 1)) Then
fWhatField = TheFields(Mid(strField, intCaract) - 1)
Exit For
End If
Next
End Function
*****************************************************

Ensuite, tu fais une requête de ce type :

SELECT Table1.Donnée,
fWhatField([Donnée],[Champ1],[Champ2],[Champ3],[Champ4],[Champ5],[Champ6],[C
hamp7],[Champ8],[Champ9],[Champ10],[Champ11]) AS Result
FROM Table1;

C'est good ???

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"Franck DESCHAMPS" a écrit dans le message de
news:
Bonjour Jessy,

merci de ta réponse mais en fait ce que j'appelle Type c'est le nom d'un
champ de ma table en fait en fonction du vraifaux, je choisis un champ qui
me donne une liste de données et non pas qu'une donnée.
en fait c'est au niveau de la définition de mon champ de ma requête:
ChampRequete: VraiFaux (MonChampde formulaire = "champ1"; [champ1]; ....

Donc je pense que ta 1ere solution ne marche pas dans mon cas en revanche
la

fonction perso me semble intéressant mais peux tu m'indiquer comment je le
fais? où ? et comment je l'appelle dans ma requête?

Excuse moi mais je débute.

Merci

Franck



"Jessy Sempere [MVP]" a écrit dans le message
de

news: 4382cab6$
Bonjour

Le mieux serait peut-être de mettre tes données en ligne, genre

1 Type1 Donnée1
1 Type2 Donnée2
2 Type1 Donnée3
3 Type1 Donnée4
3 Type3 Donnée5
3 ...

Ensuite, si tu veux mettre les type en colonnes, il te suffit d'utiliser
une
requête analyse croisée...

Sinon, si tu veux gardé ce que tu as fais, le mieux serait de faire une
fonction
perso en VBA qui traite tous tes vraifaux et ensuite d'appeler cette
fonction
dans ta requête.

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"Franck Deschamps" a écrit dans le message de
news:OvY$
Bonjour,

j'ai une requête ou j'ai en tant que champ une expression de type
Donnees: VraiFaux (MonChamp = "Type1"; [Type1]; VraiFaux(MonChamp > >> "Type2.....)

Le problème est que j'ai 15 vraifaux imbriqués (je ne sais pas faire
autrement) et du coup Access me dit formule trop complexe, auriez vous
une
autre solution ?

Merci

Franck












Avatar
Franck Deschamps
Salut Jessy,

je viens d'essayer et ca marche pas, mon ARRAY ne contient pas mes noms de
champs que je rentre en paramètres mes des valeurs prises dans ma table au
hasard on dirait ?

J'y pige rien

snif

Franck

"Jessy Sempere [MVP]" a écrit dans le message de
news: 4382ebbf$
Re,

Ok alors place le code qui suit dans un module standard de ta base

*****************************************************
Function fWhatField(strField As String, _
ParamArray TheFields() As Variant)
Dim intCaract As Integer
For intCaract = 1 To Len(strField)
If IsNumeric(Mid(strField, intCaract, 1)) Then
fWhatField = TheFields(Mid(strField, intCaract) - 1)
Exit For
End If
Next
End Function
*****************************************************

Ensuite, tu fais une requête de ce type :

SELECT Table1.Donnée,
fWhatField([Donnée],[Champ1],[Champ2],[Champ3],[Champ4],[Champ5],[Champ6],[C
hamp7],[Champ8],[Champ9],[Champ10],[Champ11]) AS Result
FROM Table1;

C'est good ???

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"Franck DESCHAMPS" a écrit dans le message de
news:
Bonjour Jessy,

merci de ta réponse mais en fait ce que j'appelle Type c'est le nom d'un
champ de ma table en fait en fonction du vraifaux, je choisis un champ
qui
me donne une liste de données et non pas qu'une donnée.
en fait c'est au niveau de la définition de mon champ de ma requête:
ChampRequete: VraiFaux (MonChampde formulaire = "champ1"; [champ1]; ....

Donc je pense que ta 1ere solution ne marche pas dans mon cas en revanche
la

fonction perso me semble intéressant mais peux tu m'indiquer comment je
le
fais? où ? et comment je l'appelle dans ma requête?

Excuse moi mais je débute.

Merci

Franck



"Jessy Sempere [MVP]" a écrit dans le message
de

news: 4382cab6$
Bonjour

Le mieux serait peut-être de mettre tes données en ligne, genre

1 Type1 Donnée1
1 Type2 Donnée2
2 Type1 Donnée3
3 Type1 Donnée4
3 Type3 Donnée5
3 ...

Ensuite, si tu veux mettre les type en colonnes, il te suffit
d'utiliser
une
requête analyse croisée...

Sinon, si tu veux gardé ce que tu as fais, le mieux serait de faire une
fonction
perso en VBA qui traite tous tes vraifaux et ensuite d'appeler cette
fonction
dans ta requête.

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"Franck Deschamps" a écrit dans le message
de
news:OvY$
Bonjour,

j'ai une requête ou j'ai en tant que champ une expression de type
Donnees: VraiFaux (MonChamp = "Type1"; [Type1]; VraiFaux(MonChamp >> >> "Type2.....)

Le problème est que j'ai 15 vraifaux imbriqués (je ne sais pas faire
autrement) et du coup Access me dit formule trop complexe, auriez vous
une
autre solution ?

Merci

Franck
















Avatar
Jessy Sempere [MVP]
Bonjour

Oui, c'est normal, si on reprend mon exemple, la fonction te permet
de lire pour chaque enregistrement de ta table, ce qu'il y a dans le champ
[Donnée].

Ensuite, cette fonction considère que dans ce champ y est écrit le nom
du champ dont tu souhaites retourner la données, par contre elle est
basée sur une donnée dans ton champ [Donnée] du type :
Champ1
Champ2
...
ou même
MonCh1
MonCh2
...
En fait, la fonction retrouve la valeur numéric inscrit dans le champ
[Donnée]
pour retourner la valeur du premier ou du deuxième, ou ... mis dans ton
Array
donc la fonction te retournera la valeur du champ souhaité qui est spécifié
dans
le champ [Donnée]

Exemple si tu as les données suivante dans ta table :
Donnée Champ1 Champ2 Champ3
Champ1 a1 b1 c1
Champ3 a2 b2 c2
Champ2 a3 b3 c3
Champ3 a4 b4 c4

La requête te retournera :
Donnée Result
Champ1 a1
Champ3 c2
Champ2 b3
Champ3 c4

Est-ce plus clair, et est ce bien ce que tu souhaitais ???

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"Franck Deschamps" a écrit dans le message de
news:
Salut Jessy,

je viens d'essayer et ca marche pas, mon ARRAY ne contient pas mes noms de
champs que je rentre en paramètres mes des valeurs prises dans ma table au
hasard on dirait ?

J'y pige rien

snif

Franck

"Jessy Sempere [MVP]" a écrit dans le message
de

news: 4382ebbf$
Re,

Ok alors place le code qui suit dans un module standard de ta base

*****************************************************
Function fWhatField(strField As String, _
ParamArray TheFields() As Variant)
Dim intCaract As Integer
For intCaract = 1 To Len(strField)
If IsNumeric(Mid(strField, intCaract, 1)) Then
fWhatField = TheFields(Mid(strField, intCaract) - 1)
Exit For
End If
Next
End Function
*****************************************************

Ensuite, tu fais une requête de ce type :

SELECT Table1.Donnée,

fWhatField([Donnée],[Champ1],[Champ2],[Champ3],[Champ4],[Champ5],[Champ6],[C


hamp7],[Champ8],[Champ9],[Champ10],[Champ11]) AS Result
FROM Table1;

C'est good ???

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"Franck DESCHAMPS" a écrit dans le message de
news:
Bonjour Jessy,

merci de ta réponse mais en fait ce que j'appelle Type c'est le nom
d'un



champ de ma table en fait en fonction du vraifaux, je choisis un champ
qui
me donne une liste de données et non pas qu'une donnée.
en fait c'est au niveau de la définition de mon champ de ma requête:
ChampRequete: VraiFaux (MonChampde formulaire = "champ1"; [champ1];
....




Donc je pense que ta 1ere solution ne marche pas dans mon cas en
revanche



la
fonction perso me semble intéressant mais peux tu m'indiquer comment je
le
fais? où ? et comment je l'appelle dans ma requête?

Excuse moi mais je débute.

Merci

Franck



"Jessy Sempere [MVP]" a écrit dans le
message



de
news: 4382cab6$
Bonjour

Le mieux serait peut-être de mettre tes données en ligne, genre

1 Type1 Donnée1
1 Type2 Donnée2
2 Type1 Donnée3
3 Type1 Donnée4
3 Type3 Donnée5
3 ...

Ensuite, si tu veux mettre les type en colonnes, il te suffit
d'utiliser
une
requête analyse croisée...

Sinon, si tu veux gardé ce que tu as fais, le mieux serait de faire
une




fonction
perso en VBA qui traite tous tes vraifaux et ensuite d'appeler cette
fonction
dans ta requête.

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"Franck Deschamps" a écrit dans le message
de
news:OvY$
Bonjour,

j'ai une requête ou j'ai en tant que champ une expression de type
Donnees: VraiFaux (MonChamp = "Type1"; [Type1]; VraiFaux(MonChamp > >> >> "Type2.....)

Le problème est que j'ai 15 vraifaux imbriqués (je ne sais pas faire
autrement) et du coup Access me dit formule trop complexe, auriez
vous





une
autre solution ?

Merci

Franck