Problème d'éxécution de macros dès le 1er coup

Morino

XLDnaute Nouveau
Bonjour,

J'ai deux macros :
- La 1ère (Actualiser_classeur) doit juste actualiser un TCD et le classeur : son problème est qu'elle ne s'éxécute pas dès le 1er clic, je suis toujours amené à cliquer 2 ou 3 fois pour la mancer !!
- La 2ème doit créer des nouvelles feuilles selon les données du fichier source :son problème est qu'elle prend beaucoup de temps à tourner surtout lorsque le nombre de feuilles dépasse le 10

les 2 macros fonctionnent correctement mais présentent les problèmes indiqués ci-dessus, pouvez vous m'aider à les améliorer svp ?
Ci-joint un exemple de fichier simplifié
Merci d'avance
 

Pièces jointes

  • Fichier Test.xlsm
    73.8 KB · Affichages: 49
  • Fichier Test.xlsm
    73.8 KB · Affichages: 52

Papou-net

XLDnaute Barbatruc
Re : Problème d'éxécution de macros dès le 1er coup

Bonjour Morino, et bienvenue sur le site,

Concernant le 1er point, le phénomène me paraît normal dans le sens que tu positionnes le ScreenUpDating à False sans le rétablir à True en fin de procédure. Je te propose donc de modifier ton code comme ceci:

Code:
Sub Actualiser_classeur()
Dim ws As Worksheet
Sheets("Fichier source").Select
Sheets("MODE EMPLOI").Select
Application.ScreenUpdating = False
For Each ws In ActiveWorkbook.Worksheets
ws.Activate
  If ws.Name = "Fichier source" And ws.Name = "MODE EMPLOI" And ws.Name = "Ecart" And ws.Name = "Controle" Then
    Call Actualiser
  End If
Next
Application.ScreenUpdating = True ' =====> Ligne à ajouter
End Sub

Public Sub Actualiser_TCD()
Dim pt As PivotTable, pf As PivotField
'    With Application            |
'        .ScreenUpdating = False |=====> Lignes à supprimer
'   End With                     |
    Set pt = ActiveSheet.PivotTables("Tableau croisé dynamique4")
    Set pf = pt.PivotFields("SIREN")
    pt.ManualUpdate = True
    With pf
        .ClearAllFilters
        .CurrentPage = "(All)"
        .EnableMultiplePageItems = True
        .PivotItems("(blank)").Visible = False
    End With
    pt.ManualUpdate = False
    Set pf = Nothing: Set pt = Nothing
End Sub
Concernant le deuxième point, ceci devrait accélérer le processus de création des feuilles:

Code:
Sub Ajout_feuilles()
Application.ScreenUpdating = False
Sheets("TAB_CTR").Visible = True
Sheets("TAB_CTR").Rows("9:10").EntireRow.Hidden = False
Dim curRange As Range
With Sheets("Fichier source")
  Set curRange = .Columns(3).SpecialCells(xlCellTypeConstants)
End With
Dim i As Integer
i = 1
While curRange.Cells(i, 1).Value <> vbNullString
  Dim sheetName As String
  sheetName = curRange.Cells(i, 1).Value
  If Not SheetExists(sheetName) Then
    ThisWorkbook.Sheets("TAB_CTR").Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
    ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name = sheetName
  End If
  Range("C13").Select
  ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotFields("Code" _
    ).ClearAllFilters
  On Error Resume Next
  ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotFields("Code" _
    ).CurrentPage = ActiveWorkbook.ActiveSheet.Name
  On Error Resume Next
  ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotCache.Refresh
  Columns("C:C").EntireColumn.AutoFit
  Columns("B:B").EntireColumn.AutoFit
 Rows("9:10").Select
 Selection.EntireRow.Hidden = True
 Range("c4").Select
i = i + 1
Wend
ThisWorkbook.Sheets("Fichier source").Select
Sheets("TAB_CTR").Select
Rows("9:10").Select
Selection.EntireRow.Hidden = True
Range("c4").Select
Application.ScreenUpdating = True
MsgBox ("Les tableaux sont crées")
End Sub
Ta façon de rechercher la plage de cellules remplies (UsedRange) n'était pas adaptée au contexte.

Espérant avoir répondu.

Cordialement.
 

Morino

XLDnaute Nouveau
Re : Problème d'éxécution de macros dès le 1er coup

Bonjour Papou-net et merci pour votre réponse,
en testant la 1ere macro marche correctement, par contre la 2ème ne fait pas exactement la tâche demandée puisque je souhiate faire un filtre sur le SIREN de chaque feuille selon le nom de la feuille : dans la feuille '99999999', je dois avoir que les codes appartenant à cette SIREN (filtre au niveau du TCD), fonction qui existe dans ma macro initiale
Si possible juste me dire ce que je dois modifier pour que la macro ne soit pas lourde et ne tourne pas en boucle pendant longtemps?
Merci d'avance
 

Papou-net

XLDnaute Barbatruc
Re : Problème d'éxécution de macros dès le 1er coup

Ok, j'avais pas tout lu.

Qu'à celà ne tienne, il suffit de décaler CurRange de 2 colonnes vers la gauche comme suit:

Code:
With Sheets("Fichier source")
  Set curRange = .Columns(3).SpecialCells(xlCellTypeConstants).Offset(0, -2)
End With
Note que j'utilise la colonne 3 pour la recherche car la colonne 1 ne contient que des formules, ce qui étend inutilement la zone de recherche et donc le temps d'exécution.

Cette nouvelle approche m'a conduit à réexaminer le code et j'en ai donc profité pour le simplifier. Tu pourras voir le résultat dans la copie ci-jointe.

Sache que, d'une manière générale, tu peux agir sur des feuilles ou des cellules sans avoir besoin de les sélectionner au préalable. D'autre part, il est toujours plus compréhensible de déclarer les variables en début de module plutôt qu'en plein milieu.

Enfin, je pense qu'il est inutile d'afficher les lignes 9:10 pour les masquer à la fin, j'ai donc mis les lignes concernées en commentaires. Un seul On Error Resume Next suffit et il vaut mieux le placer début de code. Tu rends la feuille modèle TAB_CTR visible avant de la copier et tu ne la masques pas par la suite?

Maintenant je te laisse le soin de tester ces modifications, et je reste à ta disposition si besoin.

Bonne soirée.

Cordialement.
 

Pièces jointes

  • Copie de Fichier Test-1.xlsm
    78.6 KB · Affichages: 39

Morino

XLDnaute Nouveau
Re : Problème d'éxécution de macros dès le 1er coup

Merci beaucoup,

ça marche très sauf qu'il renomme aussi la feuille principale 'TAB_CTR' en code, or que je veux qu'il garde le nom de cette feuille puisqu'elle est utilisée dans d'autres macros ensuite
Merci encore pour votre aide
 

Papou-net

XLDnaute Barbatruc
Re : Problème d'éxécution de macros dès le 1er coup

Peux-tu préciser ta pensée car je ne vois pas bien le problème?

Pour moi, la feuille TAB_CTR n'est pas renommée, elle existe toujours mais elle est masquée à l'affichage.

A te lire.

Cordialement.
 

Morino

XLDnaute Nouveau
Re : Problème d'éxécution de macros dès le 1er coup

Bonjour,

Effectivement la feuille TAB_CTR est masquée mais il y a une feuille similaire qui est renommé en code
si vous pouvez supprimer cette feuille et garder la feuille TAB_CTR affichée ?
Merci
 

Papou-net

XLDnaute Barbatruc
Re : Problème d'éxécution de macros dès le 1er coup

Bonjour Morino,

Voici ton fichier modifié, mais je suppose que tu n'aurais eu aucune difficulté à le faire par toi-même?

Cordialement.
 

Pièces jointes

  • Copie de Fichier Test-2.xlsm
    73.6 KB · Affichages: 41

Discussions similaires

Statistiques des forums

Discussions
312 196
Messages
2 086 101
Membres
103 116
dernier inscrit
kutobi87