Temps d'exécution macros utilisation documents fermé

Bonsoir,

En cherchant dans le forum, j'ai découvert qu'il est possible de récupérer des informations dans un autre document Excel sans l'ouvrir.

Mon document de travail fait appel à une base de données de 180 000 lignes et prend du temps à s'ouvrir (1 min.) et s'enregistrer (30 sec.)

Avant d'essayer quoi que ce soit j'ai deux questions à poser à quelqu'un qui aurait déjà utiliser ce genre de macros :

- Jusqu'où peut-on aller dans la recherche d'informations ? Puis-je lancer remplir un dictionnaire ou une variable tableau à partir des données de ce document non ouvert, pour ensuite les utiliser dans mon document de travail ?

- Ce genre de procédure alourdit t-elle l'exécution des macros ? (parce que dans mon document, l'ouverture est un peu lente, mais ensuite les requêtes sont extrêmement rapides et je voudrais éviter que ça change).

Je vous remercie de votre attention :)

Bonne soirée !

Bonjour,

Oui j'utilise cela régulièrement. Un exemple ici https://www.excel-pratique.com/fr/telechargements/utilitaires/collecter-donnees-fiches-individuelles-no478

Non cela n'alourdit pas le temps d'exécution.

Mais on ne peut pas faire tout ce que l'on veut, il n'est pas possible de faire de recherche, de balayage pour construire un dictionnaire comme tu le souhaites ! mais tu peux parfois réaliser des opérations ou des dictionnaires en amont dans ton fichier source avant de fermer et exploiter ensuite ces données en allant les chercher directement (tu peux aussi stocker en amont leur nombre pour pouvoir exploiter le juste nécessaire).

Donne nous un exemple ...

Bonjour,

Mais on ne peut pas faire tout ce que l'on veut, il n'est pas possible de faire de recherche, de balayage pour construire un dictionnaire comme tu le souhaites ! mais tu peux parfois réaliser des opérations ou des dictionnaires en amont dans ton fichier source avant de fermer et exploiter ensuite ces données en allant les chercher directement (tu peux aussi stocker en amont leur nombre pour pouvoir exploiter le juste nécessaire)

D'accord, ça pourrait être intéressant a tester !

Je n'ai pas encore testé le document dans le lien que vous avez donné, je vais regarder ça :)

Pour l'exemple, voici donc une macro qui enregistre les informations d'une base de données dans un dictionnaire, recherche les données de la colonne A de la seconde feuille dans ce dictionnaire pour produire remplir une variable tableau, puis insère les données recherchées.
En temps normal, ce ne sont pas 15 lignes qui sont recherchées mais plutôt quelques centaines dans 180 000 de base de données.

6recherche-bd.xlsm (39.88 Ko)

Bonne journée !

A plus tard

Hello

  1. je n'ai pas bien compris quel était le lien avec le premier sujet
  2. je n'ai pas non plus compris ce que tu attendais de ton dernier post

De ce que j'ai vu de tes macros, je n'ai rien à redire sur ton Sub periode_flor()dans la mesure où tu as bien chargé ta base dans un tableau (array), et construit ton dictionnaire.

Ce n'est pas le cas de Sub test_datas() qu'il faudrait reprendre de la même manière en passant par un tableau (array). Mais le nombre reste faible si < 100.

Revenons alors au sujet du topic ... si ta base de données est dans un autre fichier, tu ne pourras pas l'appeler de cette façon. Il faudra construire et enregistrer ton dictionnaire en amont (avec quelques paramètres comme le nombre d'enregistrements) et le rapatrier en bloc dans une feuille. Sauf erreur de ma part.

Bonjour,

je n'ai pas bien compris quel était le lien avec le premier sujet

je n'ai pas non plus compris ce que tu attendais de ton dernier post

Je souhaitais donner un exemple de quelque chose qui fonctionne et qui fait appel à la base de données.

Et je voulais savoir si une opération de ce type pourrait être réalisée sans que la base de données ne soit présente dans le document de travail. (pour cela il suffit de séparer les deux feuilles ; l'une contenant la base de données de 15 lignes et l'autre la feuille où va être réalisée la recherche).

Revenons alors au sujet du topic ... si ta base de données est dans un autre fichier, tu ne pourras pas l'appeler de cette façon. Il faudra construire et enregistrer ton dictionnaire en amont (avec quelques paramètres comme le nombre d'enregistrements) et le rapatrier en bloc dans une feuille.

C'est donc faisable, mais pas mal compliqué !

L'idée est de sauvegarder le dictionnaire sur une feuille spécifique, avec notamment le nombre de lignes (important pour la suite)

Sub BdD()
Dim lrbd&, lrlf%, lclf%, i&, dict1 As Object, nvt As Byte, fl As Byte, fa As Byte, tablo0, tablo1, tablo2, nmet As Byte
Dim cle As Variant
Set dict1 = CreateObject("scripting.dictionary")
With Sheets("BASE DE DONNEES FLORE")
    fa = .Range("1:1").Find("FAMILLE", LookIn:=xlValues).Column
    lrbd = .Cells(.Rows.Count, fa).End(xlUp).Row
    nvt = .Range("1:1").Find("NOM_VALIDE_TAXREF", LookIn:=xlValues).Column
    fl = .Range("1:1").Find("floraison", LookIn:=xlValues).Column
    tablo0 = .Range(.Cells(1, nvt), .Cells(lrbd, nvt)): tablo1 = .Range(.Cells(1, fl), .Cells(lrbd, fl))
        For i = LBound(tablo0) To UBound(tablo0)
            If tablo1(i, 1) <> "" Or tablo1(i, 1) <> "-" Then
                dict1(tablo0(i, 1)) = tablo1(i, 1)
            End If
        Next i
End With
' recopie du dictionnaire
With Sheets("BdD")
    .Cells(1, 1).CurrentRegion.Offset(0, 1).Clear
    i = 1
    For Each cle In dict1
        .Cells(i, 2) = cle
        .Cells(i, 3) = dict1(cle)
        i = i + 1
    Next
End With
End Sub
9bdd.xlsm (31.62 Ko)

Ensuite, dans ton fichier de recherche, tu pourras rappeler le dictionnaire sans ouvrir le fichier (je n'ai pas refait la macro pour recherche dans le dictionnaire ...on pourrait faire un tri du dictionnaire et une recherche par dichotomie)

Sub importerSansOuvrir()

With Sheets("BdD")
    .Range("B1:C1").Copy Destination:=.Range("B2:C" & .Range("A1"))
End With

End Sub
8recherche-bd.xlsm (21.40 Ko)

Bonjour,

Je vois, dans mon cas ça ne fonctionnerait pas, je recherche des informations dans des dictionnaires en fonction des données contenues dans mon document de travail. Le but est de n'importer que les informations recherchées et trouvées dans chaque dictionnaire.

Je vous remercie pour ces informations !

Bonne journée

Rechercher des sujets similaires à "temps execution macros utilisation documents ferme"