DECALER pour plage dynamique depuis un classeur externe

Bonjour,

Je vous explique rapidement mon besoin. J'ai un fichier Source (Source.xlsx) et un fichier Resultat (Resultat.xlsx).

  • Le fichier Source contient un entête avec plusieurs colonnes et des lignes de données.
  • Le fichier Résultat est utilisé pour effectuer des calculs, afficher des tableaux dynamique, traduire les données de la source...
Pour ce faire, j'utilise la première feuille du fichier Résultat pour afficher les données du fichier source :

=> Dans la première case du fichier Résultat, il y aura =Source!A1 ect...

=> Dans les autres feuilles fu fichier, j'utilise la feuille précédente pour effectuer

Mon problème est le suivant:

- Le nombre de lignes du fichier source va augmenter, j'aimerais que ce "décalage" soit automatiquement impacté dans mon fichier Résultat. Aujourd'hui j'étire ma formule de calcul dans le Résultat jusqu'à 10 000 lignes mais cela n'est pas très optimisé et rallonge le temps d'ouverture du fichier.

J'ai tenté d'utiliser la fonction DECALER pour ça, mais je comprend que l'on peut définir un nom de fonction mais pas forcément "recopier" un tableau.

Quelle serait la meilleure solution dans mon cas? Comment recopier les données de la sources et prendre en compte les nouvelles lignes s'il y'en a?

8resultat.xlsx (9.94 Ko)
8source.xlsx (8.76 Ko)

Bonjour

Sur le classeur Source, les données sont représentées par la formule

=DECALER(Feuil1!$A$1;;;NBVAL(Feuil1!$A:$A);5)

Formule nommée Base

Le classeur Resultat est enregistré au format xlsm (Classeur prenant en charge les macros)

Le Code suivant est dans le Module1

Sub Test()
    Application.ScreenUpdating = False
    Windows("Source.xlsx").Activate
    Range("Base").Select
    Selection.Copy
    Windows("Resultat.xlsm").Activate
    Range("A1").Select
    ActiveSheet.Paste
    Range("A1").Select
    Windows("Source.xlsx").Activate
    Application.CutCopyMode = False
    Range("A1").Select
    Windows("Resultat.xlsm").Activate
End Sub

Le bouton active le Code qui recopie les données

Note: Je ne suis pas un pro VBA; ce Code est surement perfectible

Cordialement

10source.xlsx (9.76 Ko)
9resultat.xlsm (17.30 Ko)

Bonjour,

Merci pour votre réponse! Ca fait bien le travail même si ça ne répond pas tout à fait à ce que je cherchais (mais j'ai aussi mal exprimé mon besoin).

Le fichier source sera systématiquement remplacé par un nouveau fichier du même nom, avec le même entête mais des données différentes. Du coup l'utilisation de la formule "Base" ne me convient pas tout à fait.

Possible de faire un lien vers le fichier directement ? Il sera toujours au même endroit.

Merci encore pour votre aide

Bonjour

Si les 2 fichiers sont dans le même répertoire

Code Module, macro affectée au bouton précédent

Sub copie_Données()
Dim WbK$
WbK = ActiveWorkbook.Name
Workbooks.Open ActiveWorkbook.Path & "\Source.xlsx"
Range("A1:E" & [A65000].End(xlUp).Row).Copy Destination:=Workbooks(WbK).Sheets("Feuil1").Range("a1")
Workbooks("Source.xlsx").Close True
End Sub

Cordialement

Bonjour,

Merci pour tes réponses, ça m'a beaucoup aidé.

Le script VB fonctionne. J'essaie de l'adapter à mon besoin.

Merci!!!

Rechercher des sujets similaires à "decaler plage dynamique classeur externe"