XL 2013 récup dans fichier fermés astuce names(aternative a ADO)

patricktoulon

XLDnaute Barbatruc
Bonjour a tous
je fait un peu le menage dans mes fonctions et j'ai retrouvé un truc que j'aimerais bien résoudre
en effet en alternative a ADO il m'arrive d'utiliser une astuce assez simple qui consiste à utiliser un name dans le quel j'ai un lien d'une plage dans un fichier fermé et l'utiliser sur une plage de meme dimension

sauf que si la plage destination et la plage source n'ont pas la meme address j'ai des "#Valeur"dans les cellules qui sont décalées dans la destination

en gros si ma plage source commence en "B" et que je la pose en A dans destination la colonne A aura des "#Valeur"
et pareil pour les lignes

VB:
Option Explicit
Sub test1()
'pour une plage classique
    Dim chemin$, fichier$, feuille$, rngsource As Range, rngdestination As Range
    chemin = ThisWorkbook.Path & "\"    'ne pas oublier le dernier slach
    fichier = "source.xlsx"
    feuille = "toto"
    Set rngsource = [b4:d10]
    Set rngdestination = Sheets("Feuil1").[A1]
    GetTableOnClosedFich chemin, fichier, feuille, rngsource, rngdestination

End Sub



Sub GetTableOnClosedFich(chemin$, fichier$, feuille$, rng As Range, rngD As Range)
    ThisWorkbook.Names.Add "plage", RefersTo:="='" & chemin & "[" & fichier & "]Feuil1'!" & "Tableau1"
    
    ' me donne qu'une partie du tableau
    With rngD.Resize(rng.Rows.Count, rng.Columns.Count)
        .Value = "=plage"
        .Value = .Value
    End With

    ' me donne le tableau mais en partant de A1 de la source et donc des ligne et ou colonnes "#VALEUR"
    With rngD.Resize(rng.Rows.Count + 3, rng.Columns.Count + 1)
        .Value = "=plage"
        .Value = .Value
    End With
    
    ThisWorkbook.Names("plage").Delete
End Sub
c'est domage pour des petite plage c'est une alternative intéressante a ADO qui est verbeux
allez les cracks ;)
 

Pièces jointes

  • récap.xlsm
    13.1 KB · Affichages: 29
  • source.xlsx
    9 KB · Affichages: 8
Solution
Bonjour,

Avec la fonction ci-dessous, cela fonctionne correctement sur une plage de cellule, je n'ai pas testé pour un Tableau structuré
VB:
Sub GetTableOnClosedFich(chemin$, fichier$, feuille$, rng As Range, rngD As Range)
    Dim Formule As String
    Formule = "='" & chemin & "[" & fichier & "]Feuil1'!" & rng.Address
    
    Debug.Print Formule ' pour contrôle
    
    With rngD.Resize(rng.Rows.Count, rng.Columns.Count)
        .FormulaArray = Formule
        .Value = .Value
    End With

End Sub

Cordialement

patricktoulon

XLDnaute Barbatruc
bonjour
je ne sais pas tout et en vieillissant on en oublie une partie mon petit
aujourd'hui j'utilise ADO mais avant j'utilisais ces petites astuces et comme je fait du rangement dans mes dossiers de fonction/macros avant de jeter je sonde si ça peut être gardé ou non et les mettre un peu a jour
celui qui dit qu'il sais tout est un fou d'ailleurs il y a de quoi le devenir
en tout cas je sais au moins une chose que tu sais pas , je te laisse deviner la quelle ;) :D :D :D
 

soan

XLDnaute Barbatruc
Inactif
Bonjour Patrick,

Tu as écrit :

« je sais au moins une chose que tu sais pas, je te laisse deviner laquelle ;) :D :D :D »

ah non, là c'est pas du jeu ! c'est beaucoup trop vague !!! tu aurais dû au moins mettre
un indice !!! ;) bon, je vais quand même essayer :

* tu sais mieux que moi comment utiliser les formules matricielles : exact !

* tu sais mieux que moi comment utiliser les graphiques et les TCD : exact !

* c'est la leçon de vie d'la chanson qu'tu chantes ?
youtu.be/teKygneXkX8

* tu sais qu'l'argent ne fait pas le bonheur, mais il y contribue : c'est vrai,
mais j'le savais aussi ! :p

* si t'es aussi sage que le grand Roi Salomon, alors tu dois connaître ceci :

Vanité des vanités, tout n'est que vanité ; ainsi parlait le grand Roi Salomon :

« J’ai élevé des ouvrages magnifiques, j’ai bâti des maisons et j’ai planté des vignes.
J’ai possédé des serviteurs et une nombreuse famille, et de grands troupeaux de bœufs
et de brebis. J’ai entassé l’argent et l’or, le revenu des rois et des provinces ; j’ai eu des
musiciens et des musiciennes... j'ai surpassé en richesses tous les hommes de la Terre,
j'ai eu tous les délices qui se trouvent sous le soleil ; mais en tout cela, je n’ai vu que
vanité et affliction de l’esprit ; rien n'est stable sous le soleil.

Tout arrive également au juste et à l'impie, au bon et au méchant, au pur et à
l'impur, à celui qui fait des sacrifices comme à celui qui les dédaigne ; l'innocent
est traité ici-bas comme le pécheur, et le parjure comme celui qui ne jure que la
vérité ; c'est pourquoi le cœur des enfants des hommes est si amer durant toute
leur vie ; une seule fin nous attend tous, et cette fin, c'est la mort ; personne qui
puisse y échapper, ni même en avoir l'espérance ; un chien vivant vaut mieux
qu'un lion mort, car un lion mort est semblable à une pierre : il est inerte, et
ne ressent plus rien. »

(si ta conscience n'arrive pas à supporter cette grande vérité, tu ne pourras pas
dire que je ne t'avais pas prévenu : il ne fallait pas cliquer sur le spoiler ! ;))

* il existe un livre ésotérique dont il m'est interdit de citer le nom : son origine se
perd dans la nuit des temps, et son contenu est si mystique qu'il peut rendre fou
quelqu'un qui n'y aurait pas été préparé, car il contient la Clé de tous les Secrets
de l'Univers ! alors si tu l'as lu, j'espère que tu avais reçu auparavant la longue
formation de plusieurs dizaines d'années, indispensable, nécessaire, et vitale !
(je n'ai pas reçu cette formation, qui est réservée uniquement à certains initiés,
donc personnellement, je ne me risquerais pas à lire ce livre !)

* le livre évoqué ci-dessus est quand même un livre du chemin de la Lumière ;
il existe un autre livre, bien plus terrible encore, celui du chemin des Ténèbres ;
il mentionne la porte du Dragon, et c'est par cette porte que reviendront les
Anciens ; celui qui leur ouvrira la porte sera maudit à jamais, le Chaos et les
Ténèbres s'abattront pour toujours sur la Terre ; ce sera le commencement
de la fin pour l'Humanité, telle que nous la connaissons.

Si c'est rien d'tout ça, j'donne ma langue au chat ! ;):p
(au figuré, hein ? j'tiens à garder ma langue !)


soan
 
Dernière édition:

Statistiques des forums

Discussions
314 631
Messages
2 111 389
Membres
111 119
dernier inscrit
cooc