XL 2021 Problème d'accès aux datas d'une autre feuille fermée

p'tit vieux

XLDnaute Occasionnel
Bonjour à tous,
Comme le titre l'indique j'ai un petit souci dans un UDF que j'espère pouvoir vous soumettre bientôt..
Je sais que c'est un sujet assez récurant mais je n'ai rien lu qui résolve mon exemple.
Voici le problème ...
J'ai une fonction dans un fichier (Fonction.xlsm) qui lit des valeurs dans un autre fichier (Datas externes.xlsx).
  1. Lorsque celui-ci est ouvert pas de souci.
  2. Lorsqu'il est fermé j'ai 2 cas:
    1. Si c'est une plage de cellule => >Je reçois un tableau (ca me gène mais ca se gère)
    2. Si plusieurs Areas (zones) là j'ai une erreur 2015. :eek::mad:
Je sais que la principale solution est d'ouvrir (masqué !) le fichier par code VBA j'ouvre des données externes mais, dans ma macro, je n'ai pas réussi à ouvrir le fichier(Datas externes.xlsx) avec ce qui est proposé dans les forums. Pour l'instant, je ne comprend pas pourquoi mais c'est ainsi.
Par contre je vois un défaut au fait d'ouvrir un fichier: Par exemple, imaginé le temps d'ouverture avec un gros fichier complexe avec des calculs dans tous les sens 😰

Donc si quelqu'un à une ou plusieurs idées
Cordialement à tous
 

Pièces jointes

  • Fonction.xlsm
    21.4 KB · Affichages: 8
  • Datas externes.xlsx
    17.3 KB · Affichages: 10

job75

XLDnaute Barbatruc
Bonjour p'tit vieux,

Juste 2 remarques :

- vous préférez les usines à gaz (avec le module de classe...)

- vous ouvrez le fichier source et ça prend du temps (2 secondes chez moi) alors que vous avez dit :
Par contre je vois un défaut au fait d'ouvrir un fichier: Par exemple, imaginé le temps d'ouverture avec un gros fichier complexe avec des calculs dans tous les sens 😰
Je vous souhaite un joyeux réveillon et une bonne année 2024.

A+
 

p'tit vieux

XLDnaute Occasionnel
Bonjour p'tit vieux,

Juste 2 remarques :

- vous préférez les usines à gaz (avec le module de classe...)

- vous ouvrez le fichier source et ça prend du temps (2 secondes chez moi) alors que vous avez dit :

Je vous souhaite un joyeux réveillon et une bonne année 2024.

A+
Bonjour Job75
Oui ce que j'ai est vrai.
Mais, "vous ouvrez le fichier source et ça prend du temps (2 secondes chez moi)", c'est toujours vrai en l'ouvrant comme ça. 😊😎
Maintenant, sauf si on aime pas la classe (Heu!) … les classes, je sais que c'est la fin de l'année mais parler d'usine à gaz pour une classe de quelques lignes il n'y a pas de quoi faire péter le 🍾. Non? 😄

En bref, comme je l'ai dit en plaisantant …
C'est juste pour faire avancer le … Schmili Schmili Schmilblick

Bonne fête!🎆🎈
 

patricktoulon

XLDnaute Barbatruc
ok donc du string
il faut donc convertir ce n'est plus cdbl mais Val
VB:
'patricktoulon
'exemple; '='chemin & "\[" & nomfichier &"]" & nomdelafeuille & "'!" address de cellule"
Sub test_récup_plagemacro4()
    Dim Chemin$, fichier$, Feuille$, T, plage As Range
    Chemin$ = ThisWorkbook.Path    'à adapter
    fichier$ = "Datas externes.xlsx"   'à adapter
    Set plage = [C11:C15,C20:C21,C18]    'la plage en range
    Feuille$ = "Feuil1"    'le non de la feuille (Attention pas le codename mais bien le nom que vous lui avez donné)
    T = GetRowNOnColumnCloseFich(Chemin, fichier, "Feuil1", plage)

    [A1].Resize(UBound(T)).Value = T
    MsgBox "min : " & Application.Min(T, 1)
    MsgBox "max : " & Application.Max(T)
    MsgBox WorksheetFunction.Sum(T) / UBound(T)
End Sub
Function GetRowNOnColumnCloseFich(Chemin As String, fich As String, Feuille As String, rng As Range)
    Dim tbl(), I&, valeur
    ReDim tbl(1 To rng.Cells.Count)
  
   For Each cel In rng.Cells
        I = I + 1:
       valeur = ExecuteExcel4Macro("""""&'" & Chemin & "\[" & fich & "]" & Feuille & "'!" & cel.Address(, , xlR1C1))
         
         tbl(I) = IIf(valeur <> "", Val(valeur), valeur)
    Next
    ReDim Preserve tbl(1 To I)
    GetRowNOnColumnCloseFich = Application.Transpose(tbl)
End Function
 

Discussions similaires

Réponses
16
Affichages
424

Statistiques des forums

Discussions
312 648
Messages
2 090 507
Membres
104 560
dernier inscrit
ribambelle