Excel VBA Macro qui fait freeze Excel

Résolu
PC74cook32 Messages postés 459 Statut Membre -  
PC74cook32 Messages postés 459 Statut Membre -
Bonjour à tous/toutes,

J'ai un fichier Excel avec plusieurs macro. J'utilise l'une d'entres elles pour copier des résultats depuis une page internet, les mettre dans un tableau, et recommencer. Suivant des détails techniques, elle reconnait automatiquement si le texte est une adresse, le range dans la case adresse, et fait de même pour l'adresse.
Il fait ça page par page, donc 10 entrées à la fois.
J'ai créé une autre macro qui boucle cela, mais je me suis rendu compte que je ne peux pas copier automatiquement plus de 5 pages par tour de boucle.
Si je mets 6, Excel va copier normalement la 5ème et au moment d'attaquer la 6ème, il se bloque et ne répond plus. Obligé de devoir le fermer. J'ai optimisé ma macro au possible et impossible de dépasser ce seuil de 5 pages par boucle.

Ma question est : ce freeze automatique à 5 pages est il dû à une limitation logicielle (Excel qui prendrait trop de processeur et/ou de RAM?) ou du logiciel en lui même et donc à un paramètre dans le tableur ?

Si quelqu'un connaît la réponse à ma question et/ou une solution, je suis preneur.

Merci d'avance, bonne soirée.

--
L'Intelligence est une montagne dont le sommet est souvent confondu avec la base.

1 réponse

  1. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
     
    Sans plus de détail, dur de répondre, peux-tu montrer ton code ?
    0
    1. PC74cook32 Messages postés 459 Statut Membre 35
       
      Sub COMPLETauto()
      
      Application.ScreenUpdating = False
      '======================================
      
      'MACRO PG SUIV
      
      Call ImportListePgSuiv
      
      '======================================
      
      'MACRO NOM
      
      'Déclaration d'une variable entière pour stocker le nombre de ligne de ton tableau
      Dim NombreLigneNom As Integer
      
      'Sélection de la feuille sur laquelle se trouve les données à traiter
      Sheets(Sheets.Count).Select
      
      'Enregistrement du nombre de ligne de ton tableau
      NombreLigneNom = 160
      
      'Boucle qui va de 1 au nombre total de ligne
      For I = 1 To NombreLigneNom
      
          'Si la cellule de la ligne i et de la 1ere colonne (A) est égale à A (nom), alors
          If Cells(I, 1) = "A" Then
              Cells(I, 1).Select
              ActiveCell.Offset(1, 0).Select
              Selection.Copy
              Sheets("Liste").Select
              ActiveSheet.Paste
              ActiveCell.Offset(1, 0).Select
              Sheets(Sheets.Count).Select
          End If
          
          If Cells(I, 1) = "B" Then
              Cells(I, 1).Select
              ActiveCell.Offset(1, 0).Select
              Selection.Copy
              Sheets("Liste").Select
              ActiveSheet.Paste
              ActiveCell.Offset(1, 0).Select
              Sheets(Sheets.Count).Select
          End If
          
          If Cells(I, 1) = "C" Then
              Cells(I, 1).Select
              ActiveCell.Offset(1, 0).Select
              Selection.Copy
              Sheets("Liste").Select
              ActiveSheet.Paste
              ActiveCell.Offset(1, 0).Select
              Sheets(Sheets.Count).Select
          End If
          
          If Cells(I, 1) = "D" Then
              Cells(I, 1).Select
              ActiveCell.Offset(1, 0).Select
              Selection.Copy
              Sheets("Liste").Select
              ActiveSheet.Paste
              ActiveCell.Offset(1, 0).Select
              Sheets(Sheets.Count).Select
          End If
          
          If Cells(I, 1) = "E" Then
              Cells(I, 1).Select
              ActiveCell.Offset(1, 0).Select
              Selection.Copy
              Sheets("Liste").Select
              ActiveSheet.Paste
              ActiveCell.Offset(1, 0).Select
              Sheets(Sheets.Count).Select
          End If
          
          If Cells(I, 1) = "F" Then
              Cells(I, 1).Select
              ActiveCell.Offset(1, 0).Select
              Selection.Copy
              Sheets("Liste").Select
              ActiveSheet.Paste
              ActiveCell.Offset(1, 0).Select
              Sheets(Sheets.Count).Select
          End If
          
          If Cells(I, 1) = "G" Then
              Cells(I, 1).Select
              ActiveCell.Offset(1, 0).Select
              Selection.Copy
              Sheets("Liste").Select
              ActiveSheet.Paste
              ActiveCell.Offset(1, 0).Select
              Sheets(Sheets.Count).Select
          End If
          
          If Cells(I, 1) = "H" Then
              Cells(I, 1).Select
              ActiveCell.Offset(1, 0).Select
              Selection.Copy
              Sheets("Liste").Select
              ActiveSheet.Paste
              ActiveCell.Offset(1, 0).Select
              Sheets(Sheets.Count).Select
          End If
          
          If Cells(I, 1) = "I" Then
              Cells(I, 1).Select
              ActiveCell.Offset(1, 0).Select
              Selection.Copy
              Sheets("Liste").Select
              ActiveSheet.Paste
              ActiveCell.Offset(1, 0).Select
              Sheets(Sheets.Count).Select
          End If
          
          If Cells(I, 1) = "J" Then
              Cells(I, 1).Select
              ActiveCell.Offset(1, 0).Select
              Selection.Copy
              Sheets("Liste").Select
              ActiveSheet.Paste
              ActiveCell.Offset(1, 0).Select
              Sheets(Sheets.Count).Select
          End If
          
      'Fin de la boucle For
      Next
      
      Sheets("Liste").Select
      
      'POSITIONNEMENT AUTO VERS DROITE
      ActiveCell.Offset(-10, 1).Select
      'ActiveCell.Offset(0, 1).Select
      'POSITIONNEMENT AUTO VERS HAUT
      'ActiveCell.Offset(-10, 0).Select
      
      '======================================
      
      'MACRO ADRESSE
      
      
      'Déclaration d'une variable entière pour stocker le nombre de ligne de ton tableau
      Dim NombreLigneAdr As Integer
      
      'Sélection de la feuille sur laquelle se trouve les données à traiter
      Sheets(Sheets.Count).Select
      
      'Enregistrement du nombre de ligne de ton tableau
      NombreLigneAdr = 160
      
      'Boucle qui va de 1 au nombre total de ligne
      For I = 1 To NombreLigneAdr
      
          'Si la cellule de la ligne i et de la 10eme colonne (J) est égale à 10 (adr), alors
          If Cells(I, 17) = "4" Then
              Cells(I, 1).Select
              Selection.Copy
              Sheets("Liste").Select
              ActiveSheet.Paste
              ActiveCell.Offset(1, 0).Select
              Sheets(Sheets.Count).Select
          End If
          
          If Cells(I, 17) = "5" Then
              Cells(I, 1).Select
              Selection.Copy
              Sheets("Liste").Select
              ActiveSheet.Paste
              ActiveCell.Offset(1, 0).Select
              Sheets(Sheets.Count).Select
          End If
          
          If Cells(I, 17) = "6" Then
              Cells(I, 1).Select
              Selection.Copy
              Sheets("Liste").Select
              ActiveSheet.Paste
              ActiveCell.Offset(1, 0).Select
              Sheets(Sheets.Count).Select
          End If
          
          If Cells(I, 17) = "7" Then
              Cells(I, 1).Select
              Selection.Copy
              Sheets("Liste").Select
              ActiveSheet.Paste
              ActiveCell.Offset(1, 0).Select
              Sheets(Sheets.Count).Select
          End If
          
          If Cells(I, 17) = "8" Then
              Cells(I, 1).Select
              Selection.Copy
              Sheets("Liste").Select
              ActiveSheet.Paste
              ActiveCell.Offset(1, 0).Select
              Sheets(Sheets.Count).Select
          End If
          
          If Cells(I, 17) = "9" Then
              Cells(I, 1).Select
              Selection.Copy
              Sheets("Liste").Select
              ActiveSheet.Paste
              ActiveCell.Offset(1, 0).Select
              Sheets(Sheets.Count).Select
          End If
          
      'Fin de la boucle For
      Next
      
      Sheets("Liste").Select
      
      'POSITIONNEMENT AUTO VERS DROITE
      ActiveCell.Offset(-10, 2).Select
      'ActiveCell.Offset(0, 2).Select
      'POSITIONNEMENT AUTO VERS HAUT
      'ActiveCell.Offset(-10, 0).Select
      
      '======================================
      
      'MACRO TEL
      
      
      'Déclaration d'une variable entière pour stocker le nombre de ligne de ton tableau
      Dim NombreLigne As Integer
      Dim i2 As Integer
      
      'Sélection de la feuille sur laquelle se trouve les données à traiter
      Sheets(Sheets.Count).Select
      
      'Enregistrement du nombre de ligne de ton tableau
      NombreLigne = 160
      
      'Boucle qui va de 1 au nombre total de ligne
      For i2 = 1 To NombreLigne
      
          'Si la cellule de la ligne i et de la 10eme colonne (J) est égale à 10 (tel), alors
          If Cells(i2, 17) = "10" Then
              Cells(i2, 1).Select
              Selection.Copy
              Sheets("Liste").Select
              ActiveSheet.Paste
              ActiveCell.Offset(1, 0).Select
              Sheets(Sheets.Count).Select
          End If
          
      'Fin de la boucle For
      Next
      
      '======================================
      
      'MACRO SUPPR PAGE
      
      Sheets("Nombres").Select
      Call SuprrDernFeuille
      Sheets("Liste").Select
      ActiveCell.Offset(0, -3).Select
      
      Application.ScreenUpdating = True
      
      End Sub
      


      EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
      Explications disponibles ici : ICI

      Merci d'y penser dans tes prochains messages.
      0
    2. PC74cook32 Messages postés 459 Statut Membre 35
       
      Voici la macro qui copie les noms, adresses et numéros de tel.
      Je peux faire boucler cette macro 5 fois au maximum. Si elle boucle une 6ème fois, Excel freeze.
      0
    3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour,

      'Si la cellule de la ligne i et de la 10eme colonne (J) est égale à 10 (adr), alors
      If Cells(I, 17) = "4" Then

      Sauf erreur de commentaire 17=Q pas J

      Beaucoup trop de select. Vous pouvez mettre un fichier model pour voir le comportement de votre code et si possible vous "l'ameliorer" ?
      0
    4. PC74cook32 Messages postés 459 Statut Membre 35
       
      Bonjour,

      Oui, simple erreur de commentaire

      Que voulez vous dire par "fichier model"?
      0
    5. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,

      Fichier model: une feuille avec les donnees (non confidentielles) a tester et copier et une feuille liste pour avoir le format

      Mantenant, avez vous essayez de copier plus de 5 fois la meme feuille de donnees?????
      0