XL 2013 (Résolu) Utiliser et mémoriser un tableau sur plusieurs sub

aurelien.r

XLDnaute Nouveau
Bonjour à tous,

Je suis débutant en VBA et ça fait quelques heures que je m'arrache les cheveux sur une question.
Je créé un programme qui s'appuie sur une base de donnée externe (un fichier excel également).

Avec un sub Auto_Open, je créé un tableau des clients (base de données) dès l'ouverture du fichier mère, voici le code :
Code:
Sub crea_tab()
    Dim WB_princi As Workbook
    Dim plage As String
    chemin = "C:\Users\....\" 
    fichier_clients = "clients.xlsx"
    fichier_mere = "fichier_princi.xlsm"  
    Set WB_princi = ActiveWorkbook
    Workbooks.Open chemin & fichier_clients 'Ouvre le fichier clients
    Workbooks(fichier_clients).Activate
        'Tri le Fichier clients par ordre alphabétique pour le listing futur
        ActiveWorkbook.Worksheets("Feuil1").AutoFilter.Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Feuil1").AutoFilter.Sort.SortFields.Add Key:=Range _
        ("B1:B2"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
        With ActiveWorkbook.Worksheets("Feuil1").AutoFilter.Sort
            .Orientation = xlTopToBottom
            .Apply
        End With
        
        'Trouve la dernière ligne du fichier clients
        num_lig = 1
        While Sheets("Feuil1").Cells(num_lig, 1) <> ""
            num_lig = num_lig + 1
        Wend
        num_lig = num_lig - 1
        
        'Créé le tableau
        plage = "A2:T" & num_lig
        tab_cli = Range(plage)
        Workbooks(fichier_mere).Activate
        Workbooks(fichier_clients).Close savechanges:=False
End Sub

Sub Auto_Open()
    Call crea_tab
End Sub

J'ai déclaré le plupart des variables en amont, pour qu'elles soient publiques.
Code:
Public chemin As String
Public fichier_clients As String
Public fichier_mere As String
Global tab_cli As Variant
Global num_lig As Long


Ma question est la suivante :
Je ne parviens pas a ré-utiliser le tableau fictif "tab_cli" dans d'autres sub malgré le fait de l'avoir mis en global. J'aurais besoin de l'utiliser dans d'autres sub mais également dans une ou plusieurs userform.
La seule solution que je vois pour le moment est de copier mon fichier source dans un onglet caché de mon fichier mère, mais je pense que cette manip est assez gourmande en mémoire vive, non ?

Merci d'avance pour votre aide ;)
 
Dernière modification par un modérateur:

aurelien.r

XLDnaute Nouveau
Re : Utiliser et mémoriser un tableau sur plusieurs sub

Bonjour et merci pour l'accueil ainsi que la réponse rapide.

Pour le moment mon code total ne comprend qu'un seul module (Module1) et un UserForm (Interface). L'interface ne comprend que quelques lignes de code (qui ne marche pas encore, mais c'est lié à la question que j'ai posé avant je suppose).
Dans le module, je déclare mes variables comme ci dessus au début, puis j'ai le code de la création du tableau fictif.

Cependant, si à la suite je met un nouveau sub du style :
Code:
Sub test()
    Cells(1, 1) = tab_cli(1, 1)
    Cells(3, 3) = tab_cli(3, 3)
    
End Sub
(Je précise que j'ai essayé ce code déjà en mettant des sheets("feuil1") ou des module1.tab_cli pour être plus précis sans que cela change qqch jusque maintenant)

Alors j'ai le droit à un joli message d'Excel sur la première ligne (Cells(1,1)=tab_cli(1,1)):
9a3952123755481e7f03b71f8963c594.png
 
Dernière modification par un modérateur:

Papou-net

XLDnaute Barbatruc
Re : Utiliser et mémoriser un tableau sur plusieurs sub

RE:

Un tableau se déclare en mode dynamique, avec des "()".

Je te propose de corriger ton code comme suit:

Code:
Public tab_cli()
Public plage As Range

Sub test()
Set plage = Range("A2:T" & num_lig)
tab_cli= plage.Value

End Sub
Tu ne devrais plus avoir d'erreur.

Cordialement.
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 810
dernier inscrit
mohammedaminelahbali