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
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

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:

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
bonjour,
remplace alors Selection (deux fois) par
ActiveSheet.UsedRange
ou 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.
1
Ah Merci !!!
0
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
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 ?
0
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
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.
0
Parce que mon objectif est de trouver une info que j'aurai décidé dans toute les feuilles et sachant que desfois j'ajouterais et retirerais des valeurs il n'y a pas un moyen pour trouver l'info que je veux ?
0
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
Il y a sans doute moyen de faire cela, si tu adaptes ton code en conséquence.
0