IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Freeze excel après chargement macro [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 4
    Par défaut Freeze excel après chargement macro
    Bonjour à tous,

    J'ai réalisé une macro automatique pour mon entreprise qui récupère les données des planning de tous le monde et les range dans un fichier "synthèse".

    Lors de ma programmation en local tout fonctionne très bien. une fois en place sur le réseau la macro s’exécute correctement mais ensuite le fichier de synthèse gèle pendant quelques secondes a interval régulier.

    Je ne connais pas bien le VBA mais je pense que ma macro continue de travailler après sont exécution et je n'arrive pas à l’arrêter.

    Une fois les données triées dans mon fichier de synthèse je n'ai pas besoin de mise a jour car j'envisageai un bouton pour relancer la macro au besoin.

    Ci joint le code principale qui appel les plannings:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
     
    Sub LancerMacroClasseur2()
          Dim Ligne As Long
          Dim Jour As Long
          Dim Delai As Long
     
          Ligne = 2
          Jour = Day(Date)
          Delai = 2
     
          Range("A2:P1100").Select
          Selection.ClearContents
     
    Application.ScreenUpdating = False
     
    ' Plannings
     
    On Error Resume Next
    Call ACACIO(Jour, Ligne, Delai)
     
    On Error Resume Next
    Call BIBI(Jour, Ligne, Delai)
     
    On Error Resume Next
    Call DAVID(Jour, Ligne, Delai)
     
    On Error Resume Next
    Call DOMINIQUE(Jour, Ligne, Delai)
     
    On Error Resume Next
    Call JOSEPH(Jour, Ligne, Delai)
     
    On Error Resume Next
    Call JULIE(Jour, Ligne, Delai)
     
    On Error Resume Next
    Call MARIECLAIRE(Jour, Ligne, Delai)
     
    On Error Resume Next
    Call PHILLIPE(Jour, Ligne, Delai)
     
    On Error Resume Next
    Call SEBASTIEN(Jour, Ligne, Delai)
     
    On Error Resume Next
    Call VICTOR(Jour, Ligne, Delai)
     
    On Error Resume Next
    Call ZORAN(Jour, Ligne, Delai)
     
    ' Fin Plannings
     
     
     
        Columns("B:B").Select
        Range("A2:G837").Sort Key1:=Range("B1"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
     
     
        Range("H2").Select
        ActiveWorkbook.Saved = True
     
    Application.ScreenUpdating = True
     
    End Sub
    Puis le code d'un planning pour exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
     
    Sub DAVID(Jour, Ligne, Delai)
     
          Workbooks.Open Filename:="Q:\planning production\DAVID-" & Jour & ".xls", UpdateLinks:=False
          Sheets("DAVID").Select
     
          Range("A8:G26").Copy
          ThisWorkbook.Sheets("SYNTHESE").Cells(Ligne, 1).PasteSpecial _
             xlPasteValuesAndNumberFormats, Operation:= _
             xlNone, SkipBlanks:=True, Transpose:=False
          Ligne = Ligne + 19
     
          Range("A28:G33").Copy
          ThisWorkbook.Sheets("SYNTHESE").Cells(Ligne, 1).PasteSpecial _
             xlPasteValuesAndNumberFormats, Operation:= _
             xlNone, SkipBlanks:=True, Transpose:=False
          Ligne = Ligne + 6
     
          Range("J7:P23").Copy
          ThisWorkbook.Sheets("SYNTHESE").Cells(Ligne, 1).PasteSpecial _
             xlPasteValuesAndNumberFormats, Operation:= _
             xlNone, SkipBlanks:=True, Transpose:=False
          Ligne = Ligne + 17
     
          Range("J26:P42").Copy
          ThisWorkbook.Sheets("SYNTHESE").Cells(Ligne, 1).PasteSpecial _
             xlPasteValuesAndNumberFormats, Operation:= _
             xlNone, SkipBlanks:=True, Transpose:=False
          Ligne = Ligne + 17
     
          Range("J45:P61").Copy
          ThisWorkbook.Sheets("SYNTHESE").Cells(Ligne, 1).PasteSpecial _
             xlPasteValuesAndNumberFormats, Operation:= _
             xlNone, SkipBlanks:=True, Transpose:=False
          Ligne = Ligne + 17
     
          ThisWorkbook.Sheets("SYNTHESE").Cells(Delai, 9).Value = "DAVID"
     
          If Range("A1").Value = "1" Then
          ThisWorkbook.Sheets("SYNTHESE").Cells(Delai, 10).Value = "4-8 JOURS"
          ElseIf Range("A1").Value = "2" Then
          ThisWorkbook.Sheets("SYNTHESE").Cells(Delai, 10).Value = "8-10 JOURS"
          Else
          ThisWorkbook.Sheets("SYNTHESE").Cells(Delai, 10).Value = "10-12 JOURS"
     
          End If
     
          Range("C52").Copy
          ThisWorkbook.Sheets("SYNTHESE").Cells(Delai, 11).PasteSpecial _
             xlPasteValuesAndNumberFormats, Operation:= _
             xlNone, SkipBlanks:=True, Transpose:=False
          Delai = Delai + 1
     
          Application.DisplayAlerts = False
          ActiveWorkbook.Close False
     
    End Sub
    Merci par avance pour votre aide.

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 170
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ai simplement survolé le code et je me demande pourquoi avoir autant de procédure qu'il n'y a de personne alors qu'il suffirait de passer un argument supplémentaire.
    Ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call DAVID(Jour, Ligne, Delai)
    pourrait-être remplacé par une procédure générale nommée par exemple majPlanning avec l'argument Nom
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call majPlanning("DAVID", Jour, Ligne, Delai)
    Ici j'ai tapé le nom en constante mais bien entendu on pourrait placer tous les noms dans une table par un Array
    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     Dim tblNom(), name As Integer
     tblNom = Array("ACACIO", "DAVID", "BIBI", "DOMINIQUE")
     For name = 0 To UBound(tblNom)
       Call majPlanning(tblNom(name), Jour, Ligne, Delai)
     Next
    et au lieu d'un Array, il serait encore plus simple de placer la liste des noms des personnes dans une feuille du classeur et lire cette liste ainsi la gestion de nouvelles arrivées ou départs des employés ne nécessiterait pas une modification des programmes ce qui rend pérenne une application.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 4
    Par défaut
    Merci pour ta réponse !

    Cela ne règle pas mon problème mais améliore ma programmation. J'en prend note et modifie mon code de suite.

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 170
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Cela améliore la maintenance et permettra certainement de voir plus clair au débogage.
    J'ajouterais qu'il est parfaitement inutile d'utiliser les Select, Selection, Activate etc...
    et pour améliorer encore la maintenance et la lisibilité du code il serait plus intéressant d'utiliser des variables objets pour les feuilles à déclarer en début de module ou de procédure suivant le cas ou éventuellement utiliser le CodeName de la feuille.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim shtSynthese as WorkSheet
    Set shtSynthese = ThisWorkbook.Sheets("SYNTHESE")
    Ainsi on utilise cette variable shtSynthese dont on peut modifier la valeur plus simplement.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 4
    Par défaut
    Je ne savais pas que je pouvais me passer des select...
    Je vais essayer de le refaire sans les ajouter.

    Je n'avais pas songé à renommer la feuille mais tu as raison il est préférable que je le mette en variable si jamais un jour cela change.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 4
    Par défaut
    Bonjour,

    Pour les gens que cela interessent j'ai résolu mon problème.

    Les fichiers de planning étant ouvert par les employé le fichier les ouvrai en lecture seul mais continuai à les surveiller pour connaitre le moment ou la personne ferme sont planning.

    Il m'a suffit d'ajouter "ReadOnly:=True" après chaque ouverture de fichier pour lui dire de les ouvrir en lecture seul quoi qu'il arrive et le fichier ne travail plus après l’exécution de la macro. Celui ci ne ralenti donc plus.

    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Controle défaillant après chargement de feuille Excel
    Par sandoz dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 30/12/2014, 09h47
  2. Réponses: 0
    Dernier message: 13/05/2014, 16h09
  3. [XL-2003] Macro supprimer des classeurs Excel après une exportation
    Par greenfire15 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/08/2012, 10h54
  4. lancer une macro excel après réception d'un pop-up
    Par nonoesa dans le forum Windows
    Réponses: 0
    Dernier message: 09/03/2009, 18h30
  5. Erreur 400 après lancement Macro VBA Excel
    Par ananar dans le forum Macros et VBA Excel
    Réponses: 36
    Dernier message: 23/08/2008, 14h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo