Prendre une feuille VBA
Résolu/Fermé
1boeuf
-
Modifié le 14 janv. 2022 à 13:54
yg_be Messages postés 23470 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 février 2025 - 15 janv. 2022 à 17:52
yg_be Messages postés 23470 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 février 2025 - 15 janv. 2022 à 17:52
A voir également:
- Prendre une feuille VBA
- Comment supprimer une feuille sur word - Guide
- Feuille de pointage excel - Télécharger - Tableur
- Prendre une photo avec son pc - Guide
- Prendre une photo avec son mac - Guide
- La poste est prête à prendre en charge votre envoi. dès qu'il nous sera confié, vous pourrez suivre son trajet ici. - Forum Consommation & Internet
2 réponses
yg_be
Messages postés
23470
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 février 2025
Ambassadeur
1 568
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.
Utilisateur anonyme
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
23470
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 février 2025
1 568
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
23470
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 février 2025
1 568
>
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