Prendre une feuille VBA
Résolu
1boeuf
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23437 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
2 réponses
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour,
remplace alors Selection (deux fois) parActiveSheet.UsedRange
ou parSheets("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. -
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 ?