Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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.




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.

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



3) J'ai ajouter le code dans le "ThisWorkbook"


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
 

GClaire

XLDnaute Occasionnel
Supporter XLD
CC Patrick

Désolé je n'ai pas envoyé ma réponse a votre message

Merci pour l'encouragement, lol.

Cela fonctionne bien le XLMA, j'ai pu installé cela sur 3 postes (Mon chef, le mien et un poste commun pour tout le monde, avec identification sur le PC de mon identifiant

Le XLMA est mis sur un disque qui est en réseau, et les fichiers pointe dessus.

Et c'est la que cela se complique, car votre proposition de macro pour mettre et enlever les références me serait importante, car dés qu'un des 3 postes ouvre un Excel, et bien je ne peu modifier si besoin le XLMA, cela n'arrive pas souvent, mais cela peut arriver, mais mon chef un Excel est ouvert toute la journée (Gestion des différentes fabrications).

Merci

Passez une bonne et belle journée.

G'Claire
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…