Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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?
 
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
 
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?
 
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
 
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.
 
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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
332
Réponses
33
Affichages
3 K
Retour