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 :
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
2) Un module avec toutes les variable dont on a besoin en public
3) Ouverture du classeur ou seront les procédures
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.
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.