Desavtiver les macros dun classeur apartir dun autre classeur

Fermé
blalaa Messages postés 167 Date d'inscription mercredi 18 avril 2018 Statut Membre Dernière intervention 24 mars 2020 - 5 juin 2019 à 16:26
blalaa Messages postés 167 Date d'inscription mercredi 18 avril 2018 Statut Membre Dernière intervention 24 mars 2020 - 6 juin 2019 à 11:19
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 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
6 juin 2019 à 10:38
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 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
6 juin 2019 à 10:40
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 mercredi 18 avril 2018 Statut Membre Dernière intervention 24 mars 2020
6 juin 2019 à 11:19
Re

merci bcp pour ts ces conseils

merci encore une fois et excellente journée
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
5 juin 2019 à 16:51
Bonjour,

Avec :
Application.AutomationSecurity = msoAutomationSecurityForceDisable 

0
blalaa Messages postés 167 Date d'inscription mercredi 18 avril 2018 Statut Membre Dernière intervention 24 mars 2020
Modifié le 5 juin 2019 à 16:56
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 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
Modifié le 5 juin 2019 à 19:50
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 mercredi 18 avril 2018 Statut Membre Dernière intervention 24 mars 2020
6 juin 2019 à 09:20
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 mercredi 18 avril 2018 Statut Membre Dernière intervention 24 mars 2020
6 juin 2019 à 09:57
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 mercredi 18 avril 2018 Statut Membre Dernière intervention 24 mars 2020
6 juin 2019 à 10:09
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