Prendre une feuille VBA
Résolu
1boeuf
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour, je cherche comment faire en sorte que mon code ci-dessous ne fonctionne plus avec une selection mais sur toute une feuille, est-ce possible ( la feuille est Feuil1 )
Merci
Merci
Sub frequences() Dim cellule As Range: Dim frequence As Byte Dim ligne As Byte: Dim colonne As Byte Dim cellule2 As Range For Each cellule In Selection frequence = 0 ligne = cellule.Row: colonne = cellule.Column For Each cellule2 In Selection If (ligne <> cellule2.Row Or colonne <> cellule2.Column) Then If (cellule.Value = cellule2.Value) Then frequence = frequence + 1 End If End If Next cellule2 If (frequence > 0) Then cellule.Font.Bold = True cellule.Font.Size = 11 + frequence * 2 End If Next cellule End Sub
A voir également:
- Prendre une feuille VBA
- Prendre une photo avec son pc - Guide
- Prendre une photo avec son mac - Guide
- Bruler une feuille de laurier - Guide
- Comment supprimer une feuille sur word - Guide
- Feuille de pointage excel - Télécharger - Tableur
2 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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.
1boeuf
Ah Merci !!!
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 ?