Fonction qui prend trop de temps à être réalisée

Résolu/Fermé
mijean94 Messages postés 394 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 8 novembre 2021 - 4 déc. 2016 à 11:47
mijean94 Messages postés 394 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 8 novembre 2021 - 4 déc. 2016 à 13:25
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

1 réponse

Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
4 déc. 2016 à 12:09
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+
0
mijean94 Messages postés 394 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 8 novembre 2021 10
4 déc. 2016 à 12:22
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
0
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523 > mijean94 Messages postés 394 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 8 novembre 2021
4 déc. 2016 à 13:13
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+
0
mijean94 Messages postés 394 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 8 novembre 2021 10 > Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016
4 déc. 2016 à 13:25
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
0