Automatisation d'un procédé

thomlau

XLDnaute Occasionnel
Bonjour à toutes et à tous.

Je fais appel à vos lumières car j'ai un problème que je n'arrive pas à résoudre.
J'ai créé une macro qui me permet de classer dans des colonnes, divers nombres.
Pour chaque cellule d'une colonne (de la ligne 10 à 1000), si la valeur de la cellule est supérieure ou égale à 7, je remplace cette valeur par le chiffre 1, si la cellule est non vide est que sa valeur est inférieure à 7, je divise cette valeur par 7.
La macro fonctionne, mais le hic c'est le temps d'éxécution...

Voici à quoi ressemble ce code :
Code:
Sub demo()
Dim cell

For Each cell In Range("A10:A1010")

    If cell.Value <= 7 Then
    
        cell.Value = 1
        
    ElseIf cell.Value <> "" And cell.Value < 7 Then
    
        cell.Value = cell.Value / 7
        
    End If
    
Next
End Sub

Y'aurait t'il quelqu'un qui pourrait m'aider?

D'avance merci
 
G

Guest

Guest
Re : Automatisation d'un procédé

Bonjour Thomlau,

Les parcours sur les tableaux sont toujours plus rapide que les parcours sur une plage de cellule.

aussi je te propose ceci, avec un temps d'éxécution < à 1 seconde chez moi.

Code:
Sub demo()
    Dim cell
    Dim i As Integer, cpt As Integer
    Dim t
    t = Range("A10:A1010")
    cpt = UBound(t)
    For i = 1 To cpt
        If IsNumeric(t(i, 1)) Then
            If t(i, 1) >= 7 Then t(i, 1) = 1 Else t(i, 1) = t(i, 1) / 7
        End If
    Next
    Range("A10:A1010").Value = t
End Sub

P.S. ton énnoncé
si la valeur de la cellule est supérieure ou égale à 7, je remplace cette valeur par le chiffre 1
est différent de ta macro
Code:
    If cell.Value <= 7 Then  cell.Value = 1

A+
 

thomlau

XLDnaute Occasionnel
Re : Automatisation d'un procédé

Bonjour Hasco

Je te remercie pour ta réponse très précise et très rapide

J'ai passé un peu de temps pour l'adaptation car le code que tu m'a fourni a été intégré dans une boucle...
La plage de mon exemple était
Code:
Range("A10:A1010")

Mais en fait, c'est celle-ci
Code:
t = Range(Range("K" & m).Value & l, Range("K" & m).Value & 2000)

J'utilisais aussi la variable i, ce sont ces deux raisons qui me font répondre assez tardivement.

La condition était la suivante
Code:
If cell.Value >= 7 Then  cell.Value = 1

J'aurai du me relire

Au final, tu va me faire gagner un temps précieux au quotidien. Je te remercie encore.

A bientôt Hasco.
Bonne journée à tous
 

Discussions similaires

Réponses
21
Affichages
344
Réponses
2
Affichages
156
  • Résolu(e)
Microsoft 365 FORMULE Excel VBA
Réponses
17
Affichages
854

Statistiques des forums

Discussions
312 454
Messages
2 088 557
Membres
103 881
dernier inscrit
malbousquet