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

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : juin 2013
    Messages : 88
    Points : 51
    Points
    51

    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
    Developpeur VBA migrant tranquillement vers C# et VB.Net =]
    Inscrit en
    juillet 2007
    Messages
    12 326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Developpeur VBA migrant tranquillement vers C# et VB.Net =]
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2007
    Messages : 12 326
    Points : 27 170
    Points
    27 170

    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
    Pas de question technique par MP, je ne réponds pas

    Apprendre à programmer avec Access 2016

    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
    Expert éminent
    Homme Profil pro
    aucune
    Inscrit en
    avril 2016
    Messages
    4 603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : avril 2016
    Messages : 4 603
    Points : 8 019
    Points
    8 019

    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.

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

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : juin 2007
    Messages : 8 148
    Points : 14 869
    Points
    14 869

    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, 19h25
  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, 21h40
  3. Microsoft EXCEL (Ne répond pas)
    Par GOLDINGMAROC dans le forum Excel
    Réponses: 3
    Dernier message: 17/06/2016, 14h58
  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, 11h11
  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, 14h32

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