VBA, module de déclaration
Fermé
tom
-
16 déc. 2016 à 16:14
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 22 déc. 2016 à 18:57
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 22 déc. 2016 à 18:57
A voir également:
- VBA, module de déclaration
- Déclaration de revenus - Guide
- Hkcmd module ✓ - Forum Virus
- Incompatibilité de type vba ✓ - Forum Programmation
- Pas de module ci - Forum TV & Vidéo
- Module d'expérience locale francais ✓ - Forum Matériel & Système
5 réponses
yg_be
Messages postés
23427
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
14 janvier 2025
Ambassadeur
1 559
Modifié par yg_be le 16/12/2016 à 21:34
Modifié par yg_be le 16/12/2016 à 21:34
Je suggère ceci:
Dans le module de déclaration:
Dans le module de déclaration:
Option Explicit Public Function Fichier1() As Workbook Fichier1 = Workbooks("Suivi du temps") End Function Public Function Fichier2() As Workbook Fichier2 = Workbooks("Aléas") End FunctionEt dans un autre module:
Option Explicit Sub test() Dim un_fichier As Workbook, autre_fichier as Workbook Set un_fichier = Fichier1() Set autre_fichier = Fichier2() End SubQu'en penses-tu?
Utilisateur anonyme
16 déc. 2016 à 21:46
16 déc. 2016 à 21:46
Bonjour tom,
Au début de Module1, mets tes déclarations de variables publiques
avant ta première Sub :
Dans Module1, tu peux mettre uniquement tes déclarations
de variables publiques, et mettre ta 1ère Sub dans Module2.
----------------------------------
Dans ThisWorkbook, mets ce code VBA :
Attention :
Ce code sera exécuté uniquement à l'ouverture du classeur ;
les variables publiques seront alors correctement initialisées.
N'oublie jamais que si ton programme plante, alors cette
brusque interruption fera que le contenu des variables en
mémoire sera perdu : tes variables publiques ne seront plus
valables ! Il faudra fermer le classeur puis le ré-ouvrir pour
que tes variables publiques soient de nouveau correctes.
----------------------------------
Si ton problème est réglé, merci de l'indiquer,
pour que le sujet puisse être passé en résolu.
Cordialement. :)
Au début de Module1, mets tes déclarations de variables publiques
avant ta première Sub :
Option Explicit Public Fichier1 As Workbook Public Fichier2 As Workbook Public Fichier3 As Workbook Public Fichier4 As Workbook ' Sub Essai() MsgBox Fichier1.Name & vbLf & Fichier2.Name & vbLf _ & Fichier3.Name & vbLf & Fichier4.Name End Sub
Dans Module1, tu peux mettre uniquement tes déclarations
de variables publiques, et mettre ta 1ère Sub dans Module2.
----------------------------------
Dans ThisWorkbook, mets ce code VBA :
Option Explicit Private Sub Workbook_Open() Set Fichier1 = Workbooks("Suivi du temps") Set Fichier2 = Workbooks("Aléas") Set Fichier3 = Workbooks("Reste a faire") Set Fichier4 = Workbooks("Emp") End Sub
Attention :
Ce code sera exécuté uniquement à l'ouverture du classeur ;
les variables publiques seront alors correctement initialisées.
N'oublie jamais que si ton programme plante, alors cette
brusque interruption fera que le contenu des variables en
mémoire sera perdu : tes variables publiques ne seront plus
valables ! Il faudra fermer le classeur puis le ré-ouvrir pour
que tes variables publiques soient de nouveau correctes.
----------------------------------
Si ton problème est réglé, merci de l'indiquer,
pour que le sujet puisse être passé en résolu.
Cordialement. :)
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 250
Modifié par eriiic le 17/12/2016 à 00:25
Modifié par eriiic le 17/12/2016 à 00:25
Bonjour,
comment je procède en général. Dans un module Standard :
Avantage :
si plantage lors de la mise au point (ou plus tard) les variables se ré-initialiseront car initOk sera repassé aussi à False.
Note à Albkan : Workbook_Open() doit être un des rares événements qui peuvent se lancer par F5, donc sans fermer le fichier.
eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
comment je procède en général. Dans un module Standard :
Option Explicit Public initOk As Boolean Public Fichier1 As Workbook Public Fichier2 As Workbook Public Fichier3 As Workbook Public Fichier4 As Workbook Sub init() Set Fichier1 = Workbooks("Suivi du temps") Set Fichier2 = Workbooks("Aléas") Set Fichier3 = Workbooks("Reste a faire") Set Fichier4 = Workbooks("Emp") initOk = True End Sub ' dans les sub principaux et éventuellement workbook_Open() : Sub machin_truc() If Not initOk Then init ' etc End Sub
Avantage :
si plantage lors de la mise au point (ou plus tard) les variables se ré-initialiseront car initOk sera repassé aussi à False.
Note à Albkan : Workbook_Open() doit être un des rares événements qui peuvent se lancer par F5, donc sans fermer le fichier.
eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 250
17 déc. 2016 à 00:24
17 déc. 2016 à 00:24
il faut « Workbooks ».
Tout à fait. J'ai fait un copié-collé de son code sans regarder.
Je corrige
Merci
Tout à fait. J'ai fait un copié-collé de son code sans regarder.
Je corrige
Merci
Bonjour,
Merci pour vos retour très intéressant, je vais tester cela,
j'utilise également le code suivant pour vérifier si le fichier est déjà ouvert, sinon l'ouvrir.
On Error Resume Next
je peux mettre ce type de code dans le module de déclaration et en spécifiant 1 chemin d’accès a un workbook de façon a ne pas le répéter dans les différents modules et de pouvoir changer le chemin d’accès facilement si besoin.. ?
Merci pour vos retour très intéressant, je vais tester cela,
j'utilise également le code suivant pour vérifier si le fichier est déjà ouvert, sinon l'ouvrir.
On Error Resume Next
je peux mettre ce type de code dans le module de déclaration et en spécifiant 1 chemin d’accès a un workbook de façon a ne pas le répéter dans les différents modules et de pouvoir changer le chemin d’accès facilement si besoin.. ?
yg_be
Messages postés
23427
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
14 janvier 2025
1 559
18 déc. 2016 à 12:30
18 déc. 2016 à 12:30
bonjour, tu pourrais mettre ceci dans le module de déclaration:
Option Explicit Public Function NomFichier1() As String NomFichier1 = "Suivi du temps" End FunctionTu pourrais ensuite utiliser
NomFichier1()où tu veux.
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 250
18 déc. 2016 à 13:30
18 déc. 2016 à 13:30
Bonjour,
et en spécifiant 1 chemin d’accès a un workbook de façon a ne pas le répéter dans les différents modules et de pouvoir changer le chemin d’accès facilement si besoin.. ?
j'ai compris la question autrement.
Dans un module standard tu peux déclarer une constante Public qui sera visible dans tous les modules. La déclarer au début du module, avant toute procédure :
eric
et en spécifiant 1 chemin d’accès a un workbook de façon a ne pas le répéter dans les différents modules et de pouvoir changer le chemin d’accès facilement si besoin.. ?
j'ai compris la question autrement.
Dans un module standard tu peux déclarer une constante Public qui sera visible dans tous les modules. La déclarer au début du module, avant toute procédure :
Public Const chemin As String = "c:\tmp\"
eric
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Merci pour les infos, dans un module de déclaration j'ai procédé comme ci dessous,
En plaçant le FichierSOk dans les autres modules qui peuvent appeler les workbook déclaré ci dessous,
Cependant il y a une erreur :
Erreur de compilation :
Nom ambigu détecté
le nom de la constante doit être différent de la variable workbook ?
Merci pour vos conseils
Option Explicit
'Affectation constante
Public Const Fichier2 As String = "X:\
Public Const Fichier3 As String = "X:\
Public Const Fichier4 As String = "X:\
Public Const Fichier5 As String = "X:\
Public Const Fichier6 As String = "X:\
Public FichierSOk As Boolean
Public Fichieranalyse As Workbook
Public Fichier2 As Workbook
Public Fichier3 As Workbook
Public Fichier4 As Workbook
Public Fichier5 As Workbook
Public Fichier6 As Workbook
Sub FichierSOk()
Set Fichieranalyse = Workbooks("Fichier analyse")
Set Fichier1 = Workbooks("Suivi du temps")
Set Fichier2 = Workbooks("Aléas")
Set Fichier3 = Workbooks("Reste a faire")
Set Fichier4 = Workbooks("Emp")
FichierSOk = True
End Sub
Merci pour les infos, dans un module de déclaration j'ai procédé comme ci dessous,
En plaçant le FichierSOk dans les autres modules qui peuvent appeler les workbook déclaré ci dessous,
Cependant il y a une erreur :
Erreur de compilation :
Nom ambigu détecté
le nom de la constante doit être différent de la variable workbook ?
Merci pour vos conseils
Option Explicit
'Affectation constante
Public Const Fichier2 As String = "X:\
Public Const Fichier3 As String = "X:\
Public Const Fichier4 As String = "X:\
Public Const Fichier5 As String = "X:\
Public Const Fichier6 As String = "X:\
Public FichierSOk As Boolean
Public Fichieranalyse As Workbook
Public Fichier2 As Workbook
Public Fichier3 As Workbook
Public Fichier4 As Workbook
Public Fichier5 As Workbook
Public Fichier6 As Workbook
Sub FichierSOk()
Set Fichieranalyse = Workbooks("Fichier analyse")
Set Fichier1 = Workbooks("Suivi du temps")
Set Fichier2 = Workbooks("Aléas")
Set Fichier3 = Workbooks("Reste a faire")
Set Fichier4 = Workbooks("Emp")
FichierSOk = True
End Sub
Pour tes 5 constantes : faudra pas oublier ton guillemet final !
Ah ben oui, ça, il vaut mieux éviter qu'un nom de constante soit le même
que celui d'une variable (qu'elle soit publique ou non) ! Donc pas de :
Public Const Fichier2 As String = "X:\..." ET Public Fichier2 As Workbook
De même, il vaut mieux éviter qu'un nom de Sub soit le même que celui
d'une variable (qu'elle soit publique ou non) ! Donc pas de :
Public FichierSOk As Boolean ET Sub FichierSOk()
yg_be
Messages postés
23427
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
14 janvier 2025
1 559
22 déc. 2016 à 17:25
22 déc. 2016 à 17:25
bonjour, Je pense que tu dois choisir : soit travailler avec des constantes publiques, comme suggéré (https://forums.commentcamarche.net/forum/affich-34186266-vba-module-de-declaration#8) par Eric, soit travailler avec des Workbook publics, et une fonction, comme suggéré (https://forums.commentcamarche.net/forum/affich-34186266-vba-module-de-declaration#3) par ... le même Eric.
Je suggére les constantes publiques.
Je suggére les constantes publiques.
Public Const Fichier2 As String = "Aléas"
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 250
22 déc. 2016 à 18:57
22 déc. 2016 à 18:57
Bonjour,
J'ajouterai que c'est le B.A.BA et que programmer ne s'improvise pas.
Fait l'effort de consulter les initiations à VBA qui ne manquent pas sur le net, c'est quand même le minimum.
Ce n'est pas le but des forums que de t'apprendre le basic du basic.
eric
J'ajouterai que c'est le B.A.BA et que programmer ne s'improvise pas.
Fait l'effort de consulter les initiations à VBA qui ne manquent pas sur le net, c'est quand même le minimum.
Ce n'est pas le but des forums que de t'apprendre le basic du basic.
eric