Salut Marion,
En l'absence de fichier, je ne peux que te proposer des pistes sans pouvoir les tester.
Néanmoins, pour commencer, je pense que l'utilisation de l'évennement 'Worksheet_Activate()' n'est pas le plus adapté à ton code. En fait, ça dépend de la feuille où tu as placé ce code.
Si c'est dans une des feuilles que tu utilise dans ton code ('planning', ou 'besion en matière'), ça risque de mal marcher.
Je te propose donc d'envisager Workbook_Open qui se déclenchera à chaque ouverture du classeur.
En outre, je te propose quelques changements, qui devraient accélérer ta procédure. De plus, tes feuilles sont déclarées en début de macro, à un endroit unique, ce qui facilite la maintenance et la modification.
Private Sub Workbook_Open()
Dim nbMatieres As Integer, cpt1 As Integer
Application.ScreenUpdating = False
Set org = Sheets('planning')
Set dest = Sheets('besion en matiere')
nbMatieres = org.Range('IV84').End(xlToLeft).Column
dest.Range('a4:c47').ClearContents
For cpt1 = 38 To nbMatieres
If org.Cells(84, cpt1) > 0 Then
org.Cells(84, cpt1).Copy
dest.Range('c65536').End(xlUp)(2).PasteSpecial Paste:=xlValues
org.Cells(3, cpt1).Copy
dest.Range('b65536').End(xlUp)(2).PasteSpecial Paste:=xlValues
org.Cells(2, cpt1).Copy
dest.Range('a65536').End(xlUp)(2).PasteSpecial Paste:=xlValues
End If
Next cpt1
Application.CutCopyMode = False
'Application.ScreenUpdating = True
dest.Select
'Range('a1').Select
End Sub
A te lire à ce sujet.