Microsoft 365 Avoir des classeurs maitres et les procédures dans un autre classeur.

GClaire

XLDnaute Occasionnel
Supporter XLD
Hello les exceliennes et exceliens

J'ai une dizaine (ce nombre va évoluer) de classeurs (Des besoin matériel pour des fabrications et de calculer les quantités de chaque matériel par ref) ) qui sont tous identiques même feuille de calcule (y'en a qu'une) et même procédures.

Comme il m'arrive de faire évoluer le code de ces procédures je me disais qu'il serait possible d'avoir les classeurs des nomenclatures et un classeur pour les procédures de manière a ne pas être oblige de me taper l'évolution d'un code dans tous les classeurs...

Donc ma question, est-il possible a partir d'un classeur, d'appeler des procédures dans un autre classeur?

Voici un des codes que j'utilise :

VB:
Sub RechercherefDesSomQtesTot()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim refCell As Range
    Dim dict As Object
    Dim ref As Variant
    Dim qty As Double
    Dim totalQty As Double
    Dim resultRow As Long

    ' Définir la feuille de calcul
    Set ws = ThisWorkbook.Sheets("Feuil1")

    ' Dernière ligne de données dans la colonne C
    lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row

    ' Initialiser un dictionnaire pour stocker les références et les quantités
    Set dict = CreateObject("Scripting.Dictionary")
    
Application.ScreenUpdating = False

    ' Écriture des résultats triés dans la colonne H
    ws.Range("I5").Value = "REFERENCES"
    ws.Range("J5").Value = "DESIGNATIONS"
    ws.Range("K5").Value = "QUANTITE TOTALES"

    ' Parcourir les lignes de la colonne C
    For Each refCell In ws.Range("C6:C" & lastRow)
        ' Vérifier que la cellule n'est pas vide
        If Not IsEmpty(refCell.Value) Then
            ref = refCell.Value
            qty = refCell.Offset(0, 1).Value ' Qté est dans la colonne D

            ' Vérifier si la référence est déjà dans le dictionnaire
            If dict.Exists(ref) Then
                ' Ajouter la quantité à la référence existante
                dict(ref) = dict(ref) + qty
            Else
                ' Ajouter la référence au dictionnaire avec la quantité
                dict.Add ref, qty
            End If
        End If
    Next refCell

    ' Afficher les résultats dans les colonnes I, J et K à partir de la ligne 6
    resultRow = 6
    For Each ref In dict.keys
        ws.Cells(resultRow, "I").Value = ref ' Référence
        ws.Cells(resultRow, "J").Value = ws.Cells(ws.Range("C:C").Find(what:=ref, LookIn:=xlValues).Row, "B").Value ' Valeur associée en colonne B
        ws.Cells(resultRow, "K").Value = dict(ref) ' Somme des quantités
        resultRow = resultRow + 1
    Next ref

    ' Libérer la mémoire du dictionnaire
    Set dict = Nothing

    ' Appel à une procédure de formatage si nécessaire
    AppliquerFormat
    
Application.ScreenUpdating = True

    MsgBox "Traitement terminé !"
End Sub

Ce que j'ai pensais dans un premier temps et qu'il fallait déclarer les variables (Pour renseigner le nom du classeur, le nom de la feuille etc...) du classeur maitre en public afin de les utiliser dans le classeur ou seront les procédures.
ce qu'il donnerait.

1) Variable pour le nom du classeur a l'ouverture de celui-ci
Code:
Private Sub Workbook_Open()
    WB_Base = ThisWorkbook.Name
    'MsgBox WB_Base
End Sub

2) Un module avec toutes les variable dont on a besoin en public

Code:
Option Explicit

Public ws As Worksheet
Public lastRow As Long
Public refCell As Range
Public dict As Object
Public ref As Variant
Public qty As Double
Public totalQty As Double
Public resultRow As Long
Public CheminFichier As String
Public NomDuFichierBase As String
Public wb As Workbook
Public WB_Base As String

3) Ouverture du classeur ou seront les procédures

Code:
Sub RechercherefDesSomQtesTot()

'Définir le chemin du fichier
CheminFichier = "C:\Users\jz52353491\OneDrive-Conduent\BANCS\'MODEL-SORTIES MATERIEL-Procedures VBA.xlsm"

WB_Base = ThisWorkbook.Name

MsgBox CheminFichier 'OK
MsgBox WB_Base 'OK

' Ouvrir le classeur et l'assigner à la variable publique
'Set wb = Workbooks.Open(CheminFichier)

Application.ScreenUpdating = False

Application.Run "CheminFichier!Mdl_RechercheRefDesSomQtesTot.RechercherefDesSomQtesTot"

Application.ScreenUpdating = True

MsgBox "Traitement terminé !"

End Sub

Alors je ne sais si ce que j'ai fais est correct, j'ai un doute car j'ai déjà un beau message d'erreur.

1719829315404.png

1719829339944.png


Si vous avez une idée, car pourtant pour moi aprés le test avec les messagebox, cela pointe bien au bon endroit.

Aprés je verrai pour le reste.

je vous remercie par avance.

Passez une belle et bonne journée.
 

GClaire

XLDnaute Occasionnel
Supporter XLD
CC Patrick, Le forum

Bon je dois être une burne c'est pas possible.

J'ai pris un fichier vierge, avec juste la feuille de ce dont j'ai besoin.

1) Je n'ai rien activé, ni dans les options, ni dans les références.
1720089309213.png

2) J'ai mis le module activation_xla et j'ai juste modfié le code pour y mettre le nom de mon fichier xlam

1720089395772.png


3) J'ai ajouter le code dans le "ThisWorkbook"
1720089461001.png


VB:
Sub ActiverReferencebyvbprojectref()
    On Error Resume Next
    ThisWorkbook.VBProject.References.AddFromFile Excel.Application.UserLibraryPath & "Procedures VBA_Pour Nomenclature.xlam"
End Sub


Sub deactive_xla()
On Error Resume Next
VBprojname = Workbooks("Procedures VBA_Pour Nomenclature.xlam").VBProject.Name
Set ref = ThisWorkbook.VBProject.References(VBprojname)
ThisWorkbook.VBProject.References.Remove ref
Err.Clear
Workbooks("Procedures VBA_Pour Nomenclature.xlam").Close
End Sub

4) Je ferme et ré ouvre le fichier, Et bien rien ne s'active, lol.

Snif.

Il doit y avoir un truc ou je fais du cacabouda dans le processe

Merci, G'Claire
 

patricktoulon

XLDnaute Barbatruc
re
Bonjour @GClaire
regarde si dans tes macros , tu fait bien référence au bon nom de feuille, etc...
après peut être que selon les version Excel les méthodes se modifient un peu
mais à la limite c'est pas trop grave si tu sais le faire à la main
tu a appris en deux coups de cuillère à pot à créer et te servir d'un xlam c'est bien déjà non ?
il y en a qui vont moins vite que toi
:)
 

Discussions similaires

Réponses
0
Affichages
214

Statistiques des forums

Discussions
313 125
Messages
2 095 503
Membres
106 276
dernier inscrit
sou'