Conflit VBA

hypo78

XLDnaute Impliqué
Bonjour,

Dans un premier classeur j'ai une macro (un vulgaire copier / coller vers un autre classeur)

Code:
Sub Copie_personnel()

Dim DOSROT As String
DOSROT = Mid(ThisWorkbook.Path, 1, InStrRev(ThisWorkbook.Path, "\") - 5)


Range("DU11:DU42").Select
Selection.Copy

  Workbooks.Open Filename:=DOSROT & "rotation piquets.xls"
   Sheets("aide").Activate
    Range("B11").Select
      Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    
End Sub

Mon problème c'est que dans ce classeur de destination j'ai un code qui se lance à l'ouverture (récupération de données dans plusieurs classeurs)

Code:
Private Sub Workbook_Open()

Application.Calculation = xlCalculationManual

Dim i As Integer


Sheets("Piquets2").Activate


'recherche des dates 6 mois antérieurs

For i = 2 To 150
Cells(i, 1) = Date - (140 - i)
Next i



Call MAJPiquets

End Sub


Private Sub MAJPiquets()


Dim gardedujour As String
Dim j As Integer


For j = 2 To 150

jourgarde = Cells(j, 1)
jourgarde = Format(jourgarde, "dd/mm/yyyy")

gardedujour = ThisWorkbook.Path & "\" & Format(jourgarde, "yyyy") & "\" & Format(jourgarde, "mmmmyyyy") & "\"

'chef de garde
Cells(j, 2) = "='" & gardedujour & "\[" & Format(jourgarde, "ddmmmmyyyy"".xls") & "]01'!$AC$4"
'ronde
Cells(j, 3) = "='" & gardedujour & "\[" & Format(jourgarde, "ddmmmmyyyy"".xls") & "]01'!$AX$7"
'stationnaire jour
Cells(j, 4) = "='" & gardedujour & "\[" & Format(jourgarde, "ddmmmmyyyy"".xls") & "]01'!$AR$4"
'stationnaire nuit
Cells(j, 5) = "='" & gardedujour & "\[" & Format(jourgarde, "ddmmmmyyyy"".xls") & "]01'!$AZ$4"
'sous off de jour
Cells(j, 6) = "='" & gardedujour & "\[" & Format(jourgarde, "ddmmmmyyyy"".xls") & "]01'!$AM$7"


Next j



Application.Calculation = xlCalculationAutomatic


End Sub

Et là çà pose problème. Je pense que le conflit vient de

sheets("aide").activate VS sheets("piquets2") non?

Comment contourner ce problème?
 

camarchepas

XLDnaute Barbatruc
Re : Conflit VBA

Bonjour,

Désactive les évenementiels le temps d'executer la macro 1

Code:
Option Explicit

Sub Copie_personnel()

Dim DOSROT As String
DOSROT = Mid(ThisWorkbook.Path, 1, InStrRev(ThisWorkbook.Path, "\") - 5)

'Bloque les événementiels
Application.EnableEvents = False


Range("DU11:DU42").Select
Selection.Copy

  Workbooks.Open Filename:=DOSROT & "rotation piquets.xls"
   Sheets("aide").Activate
    Range("B11").Select
      Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
   
   
   
'ici il y aura surement un
Workbooks("rotation piquets.xls").Close True
   
'rétabli les événementiels
Application.EnableEvents = True
   
End Sub
 

hypo78

XLDnaute Impliqué
Re : Conflit VBA

Bonjour,

çà ne fonctionne pas, je pense que çà bloque l'évènementiel du classeur contenant la macro mais pas celui destinataire du copy qui a une macro dans le workbook open.

Je pensais lancer la macro avec un truc du genre

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Application.Intersect(Target, Range("B8")) Is Nothing Then
avec B8 faisant partie des cellules de destination du copy, c'est possible?
 

hypo78

XLDnaute Impliqué
Re : Conflit VBA

Re,

en fin de compte j'ai mis ma macro dans un module et ajouter cette ligne dans le premier classeur
Code:
Application.Run "'rotation piquets.xls'!Module1.chargement"

et çà fonctionne.

Par contre si quelqu'un sait simplifier mon code pour éviter d'écrire une formule dans une cellule pour récupérer la valeur dans un autre classeur, je suis preneur.

Code:
 Cells(j, 2) = "='" & gardedujour & "\[" & Format(jourgarde, "ddmmmmyyyy"".xls") & "]01'!$AC$4"

il y en a une quarantaine.....

Cordialement
 

camarchepas

XLDnaute Barbatruc
Re : Conflit VBA

Bonjour ,

Je viens de refaire l'essai et cela fonctionne parfaitement dans la mesure ou c'est bien la macro copie personnel qui est lancé.

donc soit le problème n'est pas clairement posé ,(le code de la macro étant partiel), soit la solution pas correctement implantée.
 

hypo78

XLDnaute Impliqué
Re : Conflit VBA

Re,

pour ma part je n'ai pas besoin de la fermeture car l'utilisateur a besoin de consulter une feuille de ce classeur.
Je joins le fichier mais sans le dossier qui contient les classeurs des 150 derniers jours pas facile de tester.

J'ai 2 problèmes avec ce fichier :
- 1 fois par an je suis obligé d'intervenir pour créer les formules de l'année à venir : problème résolu avec la macro qui crée les formules sur la feuille piquets2 (code de ce post)
- mon second problème, c'est que l'ouverture est très longue : certainement à cause des données à récupérer dans 150 classeurs, et là je n'ai pas de solution dans l'immédiat.

Cordialement
 

Pièces jointes

  • Rotation piquets.xls.zip
    79.2 KB · Affichages: 22

Discussions similaires

Réponses
11
Affichages
292
Réponses
0
Affichages
153
Réponses
17
Affichages
837

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 183
dernier inscrit
karelhu35