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

AIDE: Lien classeur fermé (index/equiv)

9 réponses
Avatar
SL
Bonjour,

J'ai un problème de liens avec un classeur fermé. Je recherche une donnée
qui peut avoir plus d'un résultat. Avec index/equiv, je ne peux qu'en avoir
2. J'utiliserais la fonction décaler combinée à index/equiv mais elle ne
fonctionne pas lorsqu'elle recherche dans un classeur fermé.

J'aimerais avoir une formule pour trouver plusieurs données, sans passer par
vba ou pas une macro.

J'ai fait un exemple de ce que je cherche dans le fichier situé à :

http://cjoint.com/?fzg6v6dZdu


J'y ai inclus les informations reliées à mon problème.

Toute aide serait grandement appréciée.

SL

9 réponses

Avatar
AV
Pour renvoyer toutes les véhicules correspondant au Numéro 429
(Pour simplifier la saisie des formules, ouvrir les deux classeurs)
Exemple à adapter avec :
Dans "Feuil1" de "Classeur2" en A1:A11 les Numéros
Dans "Feuil1" de "Classeur2" en B1:B11 les Véhicules
Dans "Classeur1" sélection PREALABLE d'une plage de 11 cellules en ligne (même
nbre de lignes que les données) Exemple C1:C11
Matricielle
=INDEX([Classeur2.xls]Feuil1!B1:B11;PETITE.VALEUR(SI([Classeur2.xls]Feuil1!A1:A1
1B9;LIGNE([Classeur2.xls]Feuil1!A1:A11));LIGNE(INDIRECT("1:"&LIGNES([Classeur2
.xls]Feuil1!A1:A11)))))
Validation par Crl+maj+entrée
Pour gérer les erreurs :
=SI(ESTERR(INDEX([Classeur2.xls]Feuil1!B1:B11;PETITE.VALEUR(SI([Classeur2.xls]Fe
uil1!A1:A11B9;LIGNE([Classeur2.xls]Feuil1!A1:A11));LIGNE(INDIRECT("1:"&LIGNES(
[Classeur2.xls]Feuil1!A1:A11))))));"";INDEX([Classeur2.xls]Feuil1!B1:B11;PETITE.
VALEUR(SI([Classeur2.xls]Feuil1!A1:A11Q9;LIGNE([Classeur2.xls]Feuil1!A1:A11));
LIGNE(INDIRECT("1:"&LIGNES([Classeur2.xls]Feuil1!A1:A11))))))

PS : la mise à jour du chemin d'accès (ça rallonge évidemment la sauce !) se
fera automatiquement à la fermeture du fichier source
AV
Avatar
SL
Salut AV,

Merci d'avoir pris le temps de m'aider.

Ta fonction va très bien sur le classeur exemple que j'ai posté. Par contre,
pour le classeur que j'utilise, c'est plus complexe et je n'arrive pas a
faire fonctionner la formule.

Je ne comprends pas tous les éléments de ta formule, en particulier
"indirect", "ligne" et "lignes" dont je ne suis pas familier.

Si jamais tu penses a une formule semblable qui me permet d'avoir la 2e, 3e,
4e donnée, fais moi signe.

Merci encore

SL




Pour renvoyer toutes les véhicules correspondant au Numéro 429
(Pour simplifier la saisie des formules, ouvrir les deux classeurs)
Exemple à adapter avec :
Dans "Feuil1" de "Classeur2" en A1:A11 les Numéros
Dans "Feuil1" de "Classeur2" en B1:B11 les Véhicules
Dans "Classeur1" sélection PREALABLE d'une plage de 11 cellules en ligne (même
nbre de lignes que les données) Exemple C1:C11
Matricielle
=INDEX([Classeur2.xls]Feuil1!B1:B11;PETITE.VALEUR(SI([Classeur2.xls]Feuil1!A1:A1
1B9;LIGNE([Classeur2.xls]Feuil1!A1:A11));LIGNE(INDIRECT("1:"&LIGNES([Classeur2
..xls]Feuil1!A1:A11)))))
Validation par Crl+maj+entrée
Pour gérer les erreurs :
=SI(ESTERR(INDEX([Classeur2.xls]Feuil1!B1:B11;PETITE.VALEUR(SI([Classeur2.xls]Fe
uil1!A1:A11B9;LIGNE([Classeur2.xls]Feuil1!A1:A11));LIGNE(INDIRECT("1:"&LIGNES(
[Classeur2.xls]Feuil1!A1:A11))))));"";INDEX([Classeur2.xls]Feuil1!B1:B11;PETITE.
VALEUR(SI([Classeur2.xls]Feuil1!A1:A11Q9;LIGNE([Classeur2.xls]Feuil1!A1:A11));
LIGNE(INDIRECT("1:"&LIGNES([Classeur2.xls]Feuil1!A1:A11))))))

PS : la mise à jour du chemin d'accès (ça rallonge évidemment la sauce !) se
fera automatiquement à la fermeture du fichier source
AV






Avatar
Herdet
Bonsoir SL,
Je te propose une autre solution qui semble lourde au 1er abort mais qui
élimine tous les pb de liens.
Elle consiste à récupérer les tableaux NUMERO et VEHICULE du classeur fermé
"Test2.xls" dans une nouvelle feuille du classeur "Test1.xls"
De cette manière tu pourras exploiter simplement ces 2 tableaux par des
formule simples :
=INDEX(VEHICULE;EQUIV(B21;NUMERO;0))
Quelque soit la taille du tableau, la récup est très rapide (moins d'une
seconde)

Cordiales salutations
Robert Dezan

1) ---------- A faire dans le classeur Test2.xls -----------------
' sélectionner les plages NUMERO et VEHICULE avec les titres (nb
lignes quelconque)
' nommer la plage source entière "Tab_NumVehic" ou autre

2) ---------- A copier dans le ThisWorkbook -----------------
( Si l'on veut lancer la proc de lecture à l'ouverture du classeur )
Private Sub Workbook_Open()
' lecture de plage avec classeur fermé
Recup_Plage_dans_nouvelle_feuille
End Sub

3) --------- 2 Sub à copier dans un module -------------
Sub Recup_Plage_dans_nouvelle_feuille()
' récupération d'une plage de données nommée d'un classeur fermé
ThisWorkbook.Activate
Source_Rep = ThisWorkbook.Path ' ou bien Répertoire réel du
fichier Test2
Source_Fichier = "Test2.xls"
Source_Complet = Source_Rep & "" & Source_Fichier
Plage = "Tab_NumVehic"

' suppression d'une éventuelle feuille RECUP
Application.DisplayAlerts = False
On Error Resume Next
Sheets("RECUP").Select
ActiveWindow.SelectedSheets.Delete
On Error GoTo 0
Application.DisplayAlerts = True

' ajout d'une nouvelle feuille de réception
Sheets.Add
ActiveSheet.Name = "RECUP"
ActiveSheet.Move After:=Sheets(ActiveWorkbook.Sheets().Count)
Feuille_Dest = ActiveSheet.Name

' fonction de lecture de plage avec classeur fermé
Err_execution = ""
Get_Excel_WorkbookData Source_Complet, Plage, ActiveSheet.Name, "A2"
If Err_execution <> "" Then
'Msg = "Erreur de lecture. La plage nommée ''" + Source_plage +
"'' est sur une feuille non visible"
Msg = "L'erreur # " & Str(Err.Number) & " a été générée par " &
Err.Source & Chr(13) & Err.Description
'MsgBox Msg, , "Erreur", Err.HelpFile, Err.HelpContext
End If

' ajouter les en-têtes et renommer les plages récupérées
Range("A1").FormulaR1C1 = "NUMERO"
Range("B1").FormulaR1C1 = "VEHICULE"
Range("A1:B100").Select
Application.DisplayAlerts = False
Selection.CreateNames Top:=True, Left:úlse, Bottom:úlse,
Right:úlse
Range("A1").Select
Application.DisplayAlerts = True
End Sub

' -----------------------------------------------------------
Sub Get_Excel_WorkbookData(ByVal srcFile As String, ByVal RangeName As
String, _
ByVal Feuille_import, ByVal Cel_import As String)
Dim rs
' récupération de données et copie dans une plage d'une feuille d'un
classeur fermé
' ATTENTION : le nom de la feuille source du Range n'est pas précisé

Dim dbConnection
Dim dbConnectionString As String

dbConnectionString = "DRIVER={Microsoft Excel Driver
(*.xls)};ReadOnly=1;" & "DBQ=" & srcFile
Set dbConnection = CreateObject("ADODB.Connection")
dbConnection.Open dbConnectionString
On Error Resume Next ' Diffère la gestion d'erreur.
Err.Clear
Set rs = dbConnection.Execute("[" & RangeName & "]")
' Vérifie la présence d'erreurs, puis affiche le message.
If Err.Number <> 0 Then GoTo Err_lecture
On Error GoTo 0

Sheets(Feuille_import).Select ' activer la feuille de réception
' copie des données dans la cellule "Cel_import" de la feuille active
Range(Cel_import).CopyFromRecordset rs

' fermer la connexion
rs.Close
dbConnection.Close
Set rs = Nothing
Set dbConnection = Nothing
Application.StatusBar = "Prêt"
Exit Sub
Err_lecture:
' traitement de l'erreur de lecture
On Error GoTo 0
Err_execution = Str(Err.Number)

End Sub



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

Bonjour,

J'ai un problème de liens avec un classeur fermé. Je recherche une donnée
qui peut avoir plus d'un résultat. Avec index/equiv, je ne peux qu'en
avoir
2. J'utiliserais la fonction décaler combinée à index/equiv mais elle ne
fonctionne pas lorsqu'elle recherche dans un classeur fermé.

J'aimerais avoir une formule pour trouver plusieurs données, sans passer
par
vba ou pas une macro.

J'ai fait un exemple de ce que je cherche dans le fichier situé à :

http://cjoint.com/?fzg6v6dZdu


J'y ai inclus les informations reliées à mon problème.

Toute aide serait grandement appréciée.

SL




Avatar
AV
Décompresse les 2 fichiers suivants dans C:TEMP
http://cjoint.com/?fAituKt2Zu
http://cjoint.com/?fAiufctiQn

Ouvre ensuite "Classeur1.xls" et teste avec "Classeur2.xls" fermé
Ca fonctionne très bien...chez moi (le temps est doux et sec...)

AV
Avatar
AV
Ave,

De cette manière tu pourras exploiter simplement ces 2 tableaux par des
formule simples :
=INDEX(VEHICULE;EQUIV(B21;NUMERO;0))


Cette formule ne peut renvoyer qu'une seule occurrence (la 1° trouvée)

AV

Avatar
SL
Je vous remercie beaucoup de votre aide messieurs.

AV, ta formule fonctionne à merveille. Je voulais éviter de passer par le
vba alors c'est en plein ce que je cherchais. Au fait, ici au Québec le temps
est pluvieux et humide, et ta formule fonctionne quand même comme un charme ;)


Merci encore !

SL



"AV" wrote:

Décompresse les 2 fichiers suivants dans C:TEMP
http://cjoint.com/?fAituKt2Zu
http://cjoint.com/?fAiufctiQn

Ouvre ensuite "Classeur1.xls" et teste avec "Classeur2.xls" fermé
Ca fonctionne très bien...chez moi (le temps est doux et sec...)

AV





Avatar
adr34
Le mercredi 25 Mai 2005 à 06:48 par SL :
Bonjour,

J'ai un problème de liens avec un classeur fermé. Je recherche
une donnée
qui peut avoir plus d'un résultat. Avec index/equiv, je ne peux qu'en
avoir
2. J'utiliserais la fonction décaler combinée à
index/equiv mais elle ne
fonctionne pas lorsqu'elle recherche dans un classeur fermé.

J'aimerais avoir une formule pour trouver plusieurs données, sans passer
par
vba ou pas une macro.

J'ai fait un exemple de ce que je cherche dans le fichier situé à
:

http://cjoint.com/?fzg6v6dZdu


J'y ai inclus les informations reliées à mon problème.

Toute aide serait grandement appréciée.

SL


Bonjour
J'arrive un peu tard dans cette discussion, mais j'ai moi aussi le même problème, la discussion étant un peu ancienne les liens vers les fichiers ne fonctionnent plus, pourriez vous m'envoyer la formule ,
Merci
Avatar
adr34
Le mercredi 25 Mai 2005 à 06:48 par SL :
Bonjour,

J'ai un problème de liens avec un classeur fermé. Je recherche
une donnée
qui peut avoir plus d'un résultat. Avec index/equiv, je ne peux qu'en
avoir
2. J'utiliserais la fonction décaler combinée à
index/equiv mais elle ne
fonctionne pas lorsqu'elle recherche dans un classeur fermé.

J'aimerais avoir une formule pour trouver plusieurs données, sans passer
par
vba ou pas une macro.

J'ai fait un exemple de ce que je cherche dans le fichier situé à
:

http://cjoint.com/?fzg6v6dZdu


J'y ai inclus les informations reliées à mon problème.

Toute aide serait grandement appréciée.

SL


Bonjour
J'arrive un peu tard dans cette discussion, mais j'ai moi aussi le même problème, la discussion étant un peu ancienne les liens vers les fichiers ne fonctionnent plus, pourriez vous m'envoyer la formule ,
Merci
Avatar
adr34
Le vendredi 27 Mai 2005 à 02:37 par SL :
Je vous remercie beaucoup de votre aide messieurs.

AV, ta formule fonctionne à merveille. Je voulais éviter de
passer par le
vba alors c'est en plein ce que je cherchais. Au fait, ici au Québec le
temps
est pluvieux et humide, et ta formule fonctionne quand même comme un
charme ;)


Merci encore !

SL



"AV" wrote:

Décompresse les 2 fichiers suivants dans C:TEMP
http://cjoint.com/?fAituKt2Zu
http://cjoint.com/?fAiufctiQn

Ouvre ensuite "Classeur1.xls" et teste avec
"Classeur2.xls" fermé
Ca fonctionne très bien...chez moi (le temps est doux et sec...)

AV








Bonjour
J'arrive un peu tard dans cette discussion, mais j'ai moi aussi le même problème, la discussion étant un peu ancienne les liens vers les fichiers ne fonctionnent plus, pourriez vous m'envoyer la formule ,
Merci