Fonction qui prend trop de temps à être réalisée [Résolu/Fermé]

Signaler
Messages postés
341
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
7 novembre 2019
-
mijean94
Messages postés
341
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
7 novembre 2019
-
Bonjour,

Y a-t-il une solution pour raccourcir le temps d’exécution de ma fonction ?

Aujourd’hui, il faut 35 secondes pour faire cette boucle.
Codeb, cofin,lideb,lifin sont le numéros des lignes et colonnes.

Dim lideb As Long, codeb As Long, lifin As Long, cofin As Long
Dim co As Long, li As Long


For co = codeb To cofin
For li = lideb To lifin
If Cells(li, co) <> "" Then
Range(Cells(li, co).Address).Value = "x"
End If
Next li
Next co


Merci pour l’aide

Bien cordialement

5 réponses

Messages postés
3341
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
450
Je vois que tu persiste à ne mettre qu'une ébauche de procédure ...

Essaie avec
Sub Test()
Dim lideb As Long, codeb As Long, lifin As Long, cofin As Long
Dim co As Long, li As Long
Dim T
codeb = 1
cofin = 1000
lideb = 1
lifin = 1000
T = Range(Cells(lideb, codeb), Cells(lifin, cofin))
For i = 1 To UBound(T, 1)
For j = 1 To UBound(T, 2)
If T(i, j) <> "" Then
T(i, j) = "x"
End If
Next j
Next i
Range(Cells(lideb, codeb), Cells(lifin, cofin)) = T
End Sub

A+
mijean94
Messages postés
341
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
7 novembre 2019
7
Re,

Merci pour la Réponse.

Effectivement j'ai mis qu’une ébauche pour ne pas compliquer. c'est pas bien ?
Pour le Dim T, il doit resté sans rien ?
Il faut aussi mettre un Dim i et j en As long ?

à l'utilisation du code erreur 1004 sur T = Range(Cells(lideb, codeb), Cells(lifin, cofin))

Bien cordialement
Gyrus
Messages postés
3341
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
450 > mijean94
Messages postés
341
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
7 novembre 2019

Lorsque tu déclares une variable sans spécifier le type, par défaut celui-ci est variant.
Dim T <=> Dim T as Variant

Pour les variables i et j, le type est fonction du nombre de lignes et colonnes utilisées.
Par défaut, on prend généralement le type adapté au maximum de la feuille :
i as Long puisque le max de lignes est 1 048 576
(Long autorise jusqu'à 2 147 483 647)
j as integer puisque le max de colonnes est 16 384
(integer autorise jusqu'à 32 767).

Concernant l'erreur 1004, commence par regarder les valeurs de codeb, cofin, lideb et lifin).

A+
mijean94
Messages postés
341
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
7 novembre 2019
7 > Gyrus
Messages postés
3341
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016

Re,

Merci pour les explications.

j'ai trouvé l'erreur qui est de ma faute car je n'ai pas supprimé les lignes :

codeb = 1
cofin = 1000
lideb = 1
lifin = 1000

ça marche nickel, merci pour l'aide.

Bien cordialement