Desavtiver les macros dun classeur apartir dun autre classeur

blalaa Messages postés 167 Date d'inscription   Statut Membre Dernière intervention   -  
blalaa Messages postés 167 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,



j'ai une macro qui se trouve dans le classeur A elle ouvrent 5 autres classeurs pour faire limportation de donnée, ce que je souhaite c a louverture des 5 classeurs aucun evenement ni aucune macro se lance, autrement dit desactiver les macros de 5 fclasseurs afin de ne pas afficher les different messages de 5 classuers

je ne sais pas si c possibles ou nn
je vous remercie d'avance pour vos reponses

merci

2 réponses

Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
Bonjour,

La programmation exige beaucoup de rigueur, je vais commencer par quelques conseils qui t'éviterons bien des déboires :
commences tous les modules par Option Explicit, cela oblige à déclarer toutes les variables
• déclares les variables avec le type ad hoc (i.e. pas toutes en Variant)
• limites leur portée au strict nécessaire (i.e. locale, privée, publique ou globale) ;
• envisages tous les types potentiels de chaque variable pour éviter les erreurs ;
• dans le doute prévois un gestionnaire d"erreur ;
n'utilises jamais .Select, évites d'utiliser les objets actifs : Selection, Activecell, Activesheet, ... ;
• évites les références implicites(i.e. partielles), privilégies les références explicites (i.e. suffisamment complètes),
--- par exemple, au lieu de
= Cells(1,2)
écrire
= Worksheets(1).Cells(1,2).Value
,
donc, précises toujours la feuille pour un objet Range (Cells, Rows, ...) et la propriété cible (Value, Text, ...)
• n'hésites pas à utiliser des variables pour représenter les objets, ça facilite l'écriture et la lecture du code,
--- par exemple :
Set MaPlage = Me.Range("B2:C8")
;
• pour les mêmes raisons, n'hésites pas à utiliser aussi
With
et
End With
;
• évites d'utiliser des propriétés ou méthodes d'objet héritées qui pourraient ne pas exister,
--- par exemple, au lieu de :
Sheets(1).Range("A1")
écrire
Workheets(1).Range("A1")
,
en effet l'objet Range n'appartient pas à Sheet mais à Worksheet ;
• éviter d'utiliser le Presse-Papier, préfères la copie directe avec une destination
Source.Copy Destination
ou
bien, pour copier uniquement les valeurs :
Destination.valeur = Source.Valeur
.

Voila du pain sur la planche ....
Ceci dit, pour éviter le 1° message d'erreur, il suffit de désactiver les liaisons à l'ouverture du classeur, au lieu de :
Workbooks.Open Filename:=Chemin & NomFichier
' ....
' ....
Windows(wb1).Activate
ActiveWorkbook.Close False

J'aurais écrit :
Dim monClasseur As Workbook
Set monClasseur = Workbooks.Open(Filename:=Chemin & NomFichier, UpdateLinks:=0)
' ....
' ....
monClasseur.Close False


1
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
PS : un excellent cours gratuit pour débutant et plus :
ftp://ftp-developpez.com/bidou/Cours/VBA/formationVBA.pdf
0
blalaa Messages postés 167 Date d'inscription   Statut Membre Dernière intervention  
 
Re

merci bcp pour ts ces conseils

merci encore une fois et excellente journée
0
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
Bonjour,

Avec :
Application.AutomationSecurity = msoAutomationSecurityForceDisable 

0
blalaa Messages postés 167 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour

ce code fonctionne que pour les evenements qui se declancheront lors de louerture de fichier mais pas pour tt les autres evenement


merci
0
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
msoAutomationSecurityForceDisable. Désactive toutes les macros contenues dans tous les fichiers ouverts par programmation sans afficher d'avertissement de sécurité.

Y compris les macros évènementielles de ces classeurs !
0
blalaa Messages postés 167 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour

merci pour votre reponse mais ca ne marche tjrs pas

voici e code que jai mis , peut etre ca vas vous donner une idee

Sub feuil_macro_1()
Dim test2, test3, test4, test5, test6, test7, test8, test9, test10, test11 As Integer
wsh1 = Worksheets("NEW_VB_config").Range("o2") 'nom de la 1ere feuille
wsh2 = Worksheets("NEW_VB_config").Range("o3") 'nom de la 2eme feuille
wsh3 = Worksheets("NEW_VB_config").Range("o4") 'nom de la 3eme feuille
wsh4 = Worksheets("NEW_VB_config").Range("o5") 'nom de la 4eme feuille
wsh5 = Worksheets("NEW_VB_config").Range("o6") 'nom de la 5eme feuille
wsh6 = Worksheets("NEW_VB_config").Range("o7") 'nom de la 6eme feuille
wsh7 = Worksheets("NEW_VB_config").Range("o8") 'nom de la 7eme feuille
wsh8 = Worksheets("NEW_VB_config").Range("o9") 'nom de la 8eme feuille
wsh9 = Worksheets("NEW_VB_config").Range("o10") 'nom de la 9eme feuille
wsh10 = Worksheets("NEW_VB_config").Range("o11") 'nom de la 10eme feuille
wsh11 = Worksheets("NEW_VB_config").Range("o12") 'nom de la 11eme feuille

wb = ActiveWorkbook.Name
wsh = Workbooks(wb).Worksheets("NEW_VB_config").Range("o13")
wb1 = Workbooks(wb).Worksheets(wsh).Range("a2")

Workbooks(wb1).Application.AutomationSecurity = msoAutomationSecurityForceDisable

chemin_1 = Workbooks(wb).Worksheets(wsh).Range("a9")
'chemin
Chemin = chemin_1
NomFichier = wb1

Workbooks.Open Filename:=Chemin & NomFichier

Call Feuil_1(wsh1, test2, last1)
Call Feuil_1(wsh2, test3, last2)
Call Feuil_1(wsh3, test4, last3)
Call Feuil_1(wsh4, test5, last4)
Call Feuil_1(wsh5, test6, last5)
Call Feuil_1(wsh6, test7, last6)
Call Feuil_1(wsh7, test8, last7)
Call Feuil_1(wsh8, test9, last8)
Call Feuil_1(wsh9, test10, last9)
Call Feuil_1(wsh10, test11, last10)
Call Feuil_1(wsh11, test12, last11)


Windows(wb1).Activate
ActiveWorkbook.Close


End Sub


merci encore
0
blalaa Messages postés 167 Date d'inscription   Statut Membre Dernière intervention  
 
Re

effictivement ca desactive les macros
excusez moi jai confondu les messages des macros avec ceux de la fermeture des classeur

je ne sais pas si ya moyen de desactiver ces 2 messages :
le premier a chque louverture a cause des laisons
le 2 eme a la fermeture des classeur ou il demade si jenrigistre les modif ou nn




merci davance
0
blalaa Messages postés 167 Date d'inscription   Statut Membre Dernière intervention  
 
jai trouver un code pour fermer le classuer sans que le 2 eme message (message de demande d'enregistrement) s'affiche

Workbooks("NomFichier").Close SaveChanges:=False

jai une autre question

quand je mis le code en haut pour desactiver les macro je soiuhaiterais que avant la fermeture de mon classeur activer les macros parceque au 2 eme essai il ya un message derrure parceque les macros desactive sont enregisteree

merci et excusez moi pour ces messages
0