OVH Cloud OVH Cloud

SOMMEPROD avec classeur variable

8 réponses
Avatar
ruiz
bonsoir / bonjour,
je ne comprends pas pourquoi cette formule ne marche pas:

A1=livre.xls
D5=SOMMEPROD(('C:\biblio\["&A1&"]Feuil1'!$A$1:$A$2000="alain souchon")*1)

alors qu'avec le classeur pas variable ça marche très bien:
=SOMMEPROD(('C:\biblio\[livre.xls]Feuil1'!$A$1:$A$2000="alain souchon")*1)

merci de votre idée..
ps: et si la Feuil est aussi variable..?

8 réponses

Avatar
michdenis
Bonjour Ruiz,

Si ton fichier extérieur est ouvert, tu peux utiliser ce type de syntaxe :
A1 = Nom Complet du classeur + extension
=SOMMEPROD((INDIRECT("["&A1&"]Feuil1!A1:A10")="toto")*1)

La fonction indirect n'est pas disponible avec un classeur fermé.

Laurent Longré a créé en outre la fonction Indirect.Ext.
Pour y avoir accès, tu dois télécharger ce fichier : Morefunc.xll 4.01
à cette adresse : http://xcell05.free.fr/

Une exemple de syntaxe suite à l'installation du fichier :

=SOMMEPROD((INDIRECT.EXT("'C:["&A1&"]Feuil1'!A1:A10")="toto")*1)


Salutations!


"ruiz" a écrit dans le message de news:
bonsoir / bonjour,
je ne comprends pas pourquoi cette formule ne marche pas:

A1=livre.xls
D5=SOMMEPROD(('C:biblio["&A1&"]Feuil1'!$A$1:$A$2000="alain souchon")*1)

alors qu'avec le classeur pas variable ça marche très bien:
=SOMMEPROD(('C:biblio[livre.xls]Feuil1'!$A$1:$A$2000="alain souchon")*1)

merci de votre idée..
ps: et si la Feuil est aussi variable..?
Avatar
docm
Bonjour.
Mets des guillemets pour indiquer que c'est du texte.
A1="livre.xls"

docm


"ruiz" a écrit dans le message de news:
bonsoir / bonjour,
je ne comprends pas pourquoi cette formule ne marche pas:

A1=livre.xls
D5=SOMMEPROD(('C:biblio["&A1&"]Feuil1'!$A$1:$A$2000="alain souchon")*1)

alors qu'avec le classeur pas variable ça marche très bien:
=SOMMEPROD(('C:biblio[livre.xls]Feuil1'!$A$1:$A$2000="alain souchon")*1)

merci de votre idée..
ps: et si la Feuil est aussi variable..?



Avatar
JB
Bonjour,

Voir PJ: http://cjoint.com/?bmhREfnmpD

(Les 3 fichiers sont à placer dans le même répertoire)

La formule référence un classeur fermé. On écrit la formule
dynamiquement lorsque le classeur est choisi dans une liste déroulante
en B2.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$2" Then
n = [B4].CurrentRegion.Resize(, 1).Count
[c4].FormulaR1C1 = "=SUMPRODUCT(([" & Target.Value &
"]feuil1!R2C1:R11C1=RC[-1])*1)"
[c4].Copy [c4].Resize(n) ' Recopie de la
formule
End If
End Sub

B C
4 Alain souchon 2
5 Lio 2
6 Brassens 1
7 Dalida 1

Cordialement JB
Avatar
ruiz
Merci de vos réponses, je vais tester tout ça..


Bonjour,

Voir PJ: http://cjoint.com/?bmhREfnmpD

(Les 3 fichiers sont à placer dans le même répertoire)

La formule référence un classeur fermé. On écrit la formule
dynamiquement lorsque le classeur est choisi dans une liste déroulante
en B2.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$2" Then
n = [B4].CurrentRegion.Resize(, 1).Count
[c4].FormulaR1C1 = "=SUMPRODUCT(([" & Target.Value &
"]feuil1!R2C1:R11C1=RC[-1])*1)"
[c4].Copy [c4].Resize(n) ' Recopie de la
formule
End If
End Sub

B C
4 Alain souchon 2
5 Lio 2
6 Brassens 1
7 Dalida 1

Cordialement JB




Avatar
ruiz
Bonjour michdenis,
j'utilise deja la fonction INDIRECT.EXT mais ton 2eme exemple de syntax avec
un classeur femé me renvoie #VALEUR..


Bonjour Ruiz,

Si ton fichier extérieur est ouvert, tu peux utiliser ce type de syntaxe :
A1 = Nom Complet du classeur + extension
=SOMMEPROD((INDIRECT("["&A1&"]Feuil1!A1:A10")="toto")*1)

La fonction indirect n'est pas disponible avec un classeur fermé.

Laurent Longré a créé en outre la fonction Indirect.Ext.
Pour y avoir accès, tu dois télécharger ce fichier : Morefunc.xll 4.01
à cette adresse : http://xcell05.free.fr/

Une exemple de syntaxe suite à l'installation du fichier :

=SOMMEPROD((INDIRECT.EXT("'C:["&A1&"]Feuil1'!A1:A10")="toto")*1)


Salutations!


"ruiz" a écrit dans le message de news:
bonsoir / bonjour,
je ne comprends pas pourquoi cette formule ne marche pas:

A1=livre.xls
D5=SOMMEPROD(('C:biblio["&A1&"]Feuil1'!$A$1:$A$2000="alain souchon")*1)

alors qu'avec le classeur pas variable ça marche très bien:
=SOMMEPROD(('C:biblio[livre.xls]Feuil1'!$A$1:$A$2000="alain souchon")*1)

merci de votre idée..
ps: et si la Feuil est aussi variable..?





Avatar
michdenis
| =SOMMEPROD((INDIRECT.EXT("'C:["&A1&"]Feuil1'!A1:A10")="toto")*1)
| j'utilise deja la fonction INDIRECT.EXT mais ton 2eme exemple de syntax avec
| un classeur femé me renvoie #VALEUR..

Testé à nouveau ce matin, et cette formule fonctionne correctement. Il faut chercher
ailleurs que dans la syntaxe pourquoi tu obtiens #VALEUR comme résultat !!!!!!


Salutations!
Avatar
ruiz
Bonjour JB,

Dans votre exemple avec LivresInterro, votre formule sommeprod ne peut pas
marcher avec un classeur fermé et variable en B2 comme ceci:
=SOMMEPROD(('C:test["&B2&"]Feuil1'!$A$2:$A$11´)*1)

ça donne #REF!...


Bonjour,

Voir PJ: http://cjoint.com/?bmhREfnmpD

(Les 3 fichiers sont à placer dans le même répertoire)

La formule référence un classeur fermé. On écrit la formule
dynamiquement lorsque le classeur est choisi dans une liste déroulante
en B2.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$2" Then
n = [B4].CurrentRegion.Resize(, 1).Count
[c4].FormulaR1C1 = "=SUMPRODUCT(([" & Target.Value &
"]feuil1!R2C1:R11C1=RC[-1])*1)"
[c4].Copy [c4].Resize(n) ' Recopie de la
formule
End If
End Sub

B C
4 Alain souchon 2
5 Lio 2
6 Brassens 1
7 Dalida 1

Cordialement JB




Avatar
ruiz
ouais c ok.
bizzarre..en fait, j'ai juste changer la cellule pour la variable du
classeur A1 par un C4 et maintenant ça marche...
merci encore.



| =SOMMEPROD((INDIRECT.EXT("'C:["&A1&"]Feuil1'!A1:A10")="toto")*1)
| j'utilise deja la fonction INDIRECT.EXT mais ton 2eme exemple de syntax avec
| un classeur femé me renvoie #VALEUR..

Testé à nouveau ce matin, et cette formule fonctionne correctement. Il faut chercher
ailleurs que dans la syntaxe pourquoi tu obtiens #VALEUR comme résultat !!!!!!


Salutations!