Excel VBA Macro qui fait freeze Excel
Résolu
PC74cook32
Messages postés
459
Statut
Membre
-
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.
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.
A voir également:
- Vba freeze
- Pc freeze - Guide
- Deep freeze - Télécharger - Sécurité
- Excel compter cellule couleur sans vba - Guide
- Dépassement de capacité vba ✓ - Forum Excel
- Vba ouvrir un fichier excel avec chemin ✓ - Forum VB / VBA
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 SubExplications disponibles ici : ICI
Merci d'y penser dans tes prochains messages.
Je peux faire boucler cette macro 5 fois au maximum. Si elle boucle une 6ème fois, Excel freeze.
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" ?
Oui, simple erreur de commentaire
Que voulez vous dire par "fichier model"?
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?????