Prendre une feuille VBA
Résolu/Fermé
1boeuf
-
Modifié le 14 janv. 2022 à 13:54
yg_be Messages postés 22838 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 31 mai 2024 - 15 janv. 2022 à 17:52
yg_be Messages postés 22838 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 31 mai 2024 - 15 janv. 2022 à 17:52
A voir également:
- Prendre une feuille VBA
- Feuille de pointage excel - Télécharger - Tableur
- Prendre une photo avec son pc - Guide
- Supprimer une feuille word - Guide
- Prendre une photo avec son mac - Guide
- Feuille a5 - Guide
2 réponses
yg_be
Messages postés
22838
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
31 mai 2024
1 471
Modifié le 14 janv. 2022 à 18:28
Modifié le 14 janv. 2022 à 18:28
bonjour,
remplace alors Selection (deux fois) par
Si tu ne veux pas travailler sur les cellules vides, tu peux tester la valeur avant de commencer la boucle interne.
remplace alors Selection (deux fois) par
ActiveSheet.UsedRangeou par
Sheets("Feuil1").UsedRange, suivant que tu veux travailler sur la feuille active ou sur la feuille nommée. Cela ne travaillera que sur la partie (zone rectangulaire) utilisée de la feuille.
Si tu ne veux pas travailler sur les cellules vides, tu peux tester la valeur avant de commencer la boucle interne.
Whismeril
Messages postés
19048
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
30 mai 2024
913
14 janv. 2022 à 16:37
14 janv. 2022 à 16:37
Bonjour
Une feuille excel fait 1 048 576 lignes par 16 384 colonnes, soit un peu plus de 17 milliards de cellules.
Faire ce calcul sur toute une feuille, alors que probablement seule une « petite » partie le nécessiterait (même un million de cellules c’est petit) va te prendre un temps fou.
Voir planter excel ou carrément le pc.
Actuellement, tu balayes toute ta sélection et pour chaque cellule tu rebalayes toute ta sélection, si ta zone fait 4 cellules => 20 itérations, si elle fait 10 cellules, 110 itérations, 1000 cellules => 1 001 000 itérations, 17 milliards de cellules 289 milliards de milliards d’itérations.
Je pense qu’il y a moyen d’optimiser le temps d’exécution en utilisant un tableau
https://silkyroad.developpez.com/vba/tableaux/ car tu vas gagner les accès aux cellules à chaque comparaison de valeurs, mais malgré cela se sera extrêmement gourmand en temps et en ressources.
Es tu vraiment sur de vouloir faire ça sur toutes la feuille, ou sur toutes les cellules contenant quelque chose ?
Une feuille excel fait 1 048 576 lignes par 16 384 colonnes, soit un peu plus de 17 milliards de cellules.
Faire ce calcul sur toute une feuille, alors que probablement seule une « petite » partie le nécessiterait (même un million de cellules c’est petit) va te prendre un temps fou.
Voir planter excel ou carrément le pc.
Actuellement, tu balayes toute ta sélection et pour chaque cellule tu rebalayes toute ta sélection, si ta zone fait 4 cellules => 20 itérations, si elle fait 10 cellules, 110 itérations, 1000 cellules => 1 001 000 itérations, 17 milliards de cellules 289 milliards de milliards d’itérations.
Je pense qu’il y a moyen d’optimiser le temps d’exécution en utilisant un tableau
https://silkyroad.developpez.com/vba/tableaux/ car tu vas gagner les accès aux cellules à chaque comparaison de valeurs, mais malgré cela se sera extrêmement gourmand en temps et en ressources.
Es tu vraiment sur de vouloir faire ça sur toutes la feuille, ou sur toutes les cellules contenant quelque chose ?
yg_be
Messages postés
22838
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
31 mai 2024
1 471
14 janv. 2022 à 18:33
14 janv. 2022 à 18:33
Pas d'inqutude: avec les n° de lignes et de colonnes déclarés comme Byte, pas de risque de trop consommer avant d'avoir un overflow.
yg_be
Messages postés
22838
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
31 mai 2024
1 471
>
1boeuf
15 janv. 2022 à 17:52
15 janv. 2022 à 17:52
Il y a sans doute moyen de faire cela, si tu adaptes ton code en conséquence.
15 janv. 2022 à 17:13