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 :

Excel ne répond pas et dès le lancement


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2013
    Messages : 114
    Points : 57
    Points
    57
    Par défaut Excel ne répond pas et dès le lancement
    Bonjour,

    Je sais que cette erreur ou problème est dut à mon système d'exploitation ou PC.

    Mais ce qui est claire c'est que c'est bien la première que ça m'arrive.

    A peine j'appuie sur le bouton pour actionner la macro, que mon Excel plante.

    Je vous mets le code, en espérant que quelqu'un aura une réponse afin de résoudre ce problème.

    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
    Sub formatage()
     
    Dim nbre_ligne_data, DernLigne, cpt_ligne_data As Long
    Dim test As Boolean
    Dim DernColonne, nbre_ligne_pf, j  As Integer
    Dim item_pf, item_data  As String
     
    Application.ScreenUpdating = False
     
    nbre_ligne_data = Workbooks("PICPDP.xlsm").Sheets("DATA").Cells(Rows.Count, 1).End(xlUp).Row
    nbre_ligne_pf = Workbooks("PICPDP.xlsm").Sheets("LISTE PF").Cells(Rows.Count, 1).End(xlUp).Row
     
    For cpt_ligne_data = 2 To nbre_ligne_data
     
        test = False
     
        For j = 2 To nbre_ligne_pf
            item_pf = Workbooks("PICPDP.xlsm").Sheets("LISTE PF").Cells(j, 1).Value
            item_data = Workbooks("PICPDP.xlsm").Sheets("DATA").Cells(cpt_ligne_data, 5).Value
     
            If item_data = item_pf Then
                test = True
                Exit For
            End If
     
         Next
     
    If test = False Then
        'ici, traitement pour le cas où la valeur n'est pas trouvée
        Workbooks("PICPDP.xlsm").Sheets("DATA").Rows(cpt_ligne_data).ClearContents
    End If
     
       Application.StatusBar = cpt_ligne_data
     
     
    Next
     
    DernLigne = Range("A" & Rows.Count).End(xlUp).Row
    'dernière colonne ligne 1
    DernColonne = Cells(1, Cells.Columns.Count).End(xlToLeft).Column
     
    Cells.Select
        ActiveWorkbook.Worksheets("DATA").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("DATA").Sort.SortFields.Add Key:=Range("A1"), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("DATA").Sort
            .SetRange Range(Cells(2, 1), Cells(DernLigne, DernColonne))
            .Header = xlNo
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
     
    Workbooks("PICPDP.xlsm").Sheets("DATA").Columns(23).Delete
    Workbooks("PICPDP.xlsm").Sheets("DATA").Columns(22).Delete
    Workbooks("PICPDP.xlsm").Sheets("DATA").Columns(17).Delete
    Workbooks("PICPDP.xlsm").Sheets("DATA").Columns(13).Delete
    Workbooks("PICPDP.xlsm").Sheets("DATA").Columns(11).Delete
    Workbooks("PICPDP.xlsm").Sheets("DATA").Columns(4).Delete
    Workbooks("PICPDP.xlsm").Sheets("DATA").Columns(3).Delete
    Workbooks("PICPDP.xlsm").Sheets("DATA").Columns(2).Delete
    Workbooks("PICPDP.xlsm").Sheets("DATA").Columns(1).Delete
     
    End Sub

    Merci d'avance pour votre aide

    Vincent

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 595
    Points : 34 271
    Points
    34 271
    Par défaut
    Salut,

    pense à te simplifier la vie en passant par une variable de type workbook.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim wbk as Workbook
    set wbk = Workbooks("PICPDP.xlsm")
    sinon tu feras comment le jour où ton classeur change de nom ? tu te taperas les 150 occurrences de nom à changer ?

    Ensuite, c'est mal de passer par des Range sans en préciser le classeur, surtout lorsque tu en manipules plusieurs.

    Donc ce bout de code est à revoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DernLigne = Range("A" & Rows.Count).End(xlUp).Row ' quel classeur est sensé fonctionner ?
    'dernière colonne ligne 1
    DernColonne = Cells(1, Cells.Columns.Count).End(xlToLeft).Column
     
    Cells.Select
    Enfin, pour en savoir un peu plus sur la possible cause du crash, je te recommande de passer par des Debug.Print ou à l'écriture de logs dans un fichier texte à interval régulier pour savoir jusqu'où le code tourne et où il plante
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    J'ajoute à ce que pointe du doigt Jean-Philippe André, que je salue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim nbre_ligne_data, DernLigne, cpt_ligne_data As Long ' -----> fait que seule cpt_ligne_data est typée en Long
     
    Dim DernColonne, nbre_ligne_pf, j  As Integer ' -----> fait que seule j est typée en Integer (est-ce d'ailleurs suffisant ?)
    Dim item_pf, item_data  As String  ' -----> fait que seule item_data est typée en String
    et toutes les autres variables ici déclarées seront donc de type Variant, avec, pour conséquences possibles, des dépassements de limite ! --->> plantage !
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  4. #4
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par guismoman60 Voir le message
    Je sais que cette erreur ou problème est dut à mon système d'exploitation ou PC.
    Perso, quand j'ai un code qui plante, ma première hypothèse (qui, à ce jour, ss'est toujours vérifiée), c'est que c'est moi qui ait fait une connerie quelque part.
    Ca me fait beaucoup rire quand je lis dans les demandes de ce forum que si un code déraille, c'est Excel / le PC / Windows / autre (rayer les mentions inutiles) qui a un bug.

    peut-être pourrais-tu commencer à retirer la ligne suivante, histoire d'avoir une chance d'attraper un info si elle apparait ou de voir jusqu'où va le process.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating = False
    Ensuite, essaye de faire tourner en pas-à-pas pour voir sur quelle ligne Excel plante.

    Il y a aussi ceci qui semble étrange :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For cpt_ligne_data = 2 To nbre_ligne_data
       test = False
       Application.StatusBar = cpt_ligne_data
    Next
    Pourquoi faire une boucle pour mettre successivement plusieurs valeurs dans une propriété qui, de toute façon, ne conserve que la dernière ?
    Si c'est pour faire un compteur, il va falloir avoir de bons yeux vu la vitesse à laquelle ça va sans doute défiler.

    Mais il y a surtout ça :
    et l'ensemble des lignes qui suivent.
    Tu fais des opérations lourdes (tris) sur l'ensemble des cellules (pas seulement celles utilisées) de la feuilles, ce qui en fait plusieurs centaines de millions.

    A mon avis, tu devrais le remplacer par :
    Au moins ça limiterait les tris aux cellules utilisées.

    Mais, étant donné que tu as relativement peu de champs de tri, il serait encore mieux de remplacer le Sort de Worksheet par celui de Range (plus simple et moins gourmand) appliqué à la référence de tes cellules.
    https://msdn.microsoft.com/fr-fr/VBA...t-method-excel

    Il serait judicieux aussi de supprimer les colonnes surnuméraires (les Delete qui suivent) AVANT de faire le tri : c'est toujours ça de moins à trier.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

Discussions similaires

  1. [XL-2010] Excel ne répond pas VBA données à partir du WEB
    Par orectum dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 31/10/2016, 18h25
  2. [XL-2010] Microsoft Excel menus.xltm ne répond pas
    Par BUDGETS dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 17/06/2016, 20h40
  3. Microsoft EXCEL (Ne répond pas)
    Par GOLDINGMAROC dans le forum Excel
    Réponses: 3
    Dernier message: 17/06/2016, 13h58
  4. [XL-2013] DisplayAlerts ne fonctionne pas en cas de lancement de plusieurs fichiers Excel
    Par yuumua dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 10/02/2015, 10h11
  5. [WD-2003] macro word lancée par excel ne répond pas correctement
    Par QuestVba dans le forum VBA Word
    Réponses: 8
    Dernier message: 12/07/2012, 13h32

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