Bonjour le forum
Dranreb, je n'avais pas vu ton post plus tôt, je n'aime pas trop polémiquer mais je ne peux laisser sans réponse. Pour illustrer ce que j'ai dit, je prends un cas simple:
1000 lignes et 1000 colonnes, je remplis un tableau visual basic avec une boucle (pas la peine de me préciser qu'il y a plus simple pour remplir un tableau, je le sais, c'est pour la démo)
Deux procédures, une avec Evaluate, une avec une référence précise, un code pour mesurer le temps de traitement.
Aucune formule, aucun nom, une valeur texte dans chaque cellule
Si je suis ton affirmation, il ne devrait y avoir aucune différence de temps de traitement.
Bien cordialement
voici les codes :
Sub Remplissage_Tableau_Evaluate()
Dim Heure_Résultat(1 To 4) As Integer, Heu_Deb As Double, Heu_Fin As Double, Heu_Temp As Double
Dim Compteur As Integer, Compteur2 As Integer
Dim Tab_Test(0 To 999, 0 To 999) As String, Message_Résultat As String
'début timer
Heu_Deb = Timer
'début test
For Compteur = 0 To 999
For Compteur2 = 0 To 999
Tab_Test(Compteur, Compteur2) = [A1].Offset(Compteur2, Compteur).Value
Next Compteur2
Next Compteur
'calcul temps d'exécution
Heu_Fin = Timer - Heu_Deb
If Heu_Fin < 0 Then Heu_Fin = Heu_Fin + 86400 'si passe minuit
Heure_Résultat(1) = Fix(Heu_Fin / 3600)
Heure_Résultat(2) = Fix((Heu_Fin - (Heure_Résultat(1) * 3600)) / 60)
Heure_Résultat(3) = Fix(Heu_Fin - ((Heure_Résultat(1) * 3600) + (Heure_Résultat(2) * 60)))
Heure_Résultat(4) = CInt((Heu_Fin - Fix(Heu_Fin)) * 100)
If Heure_Résultat(1) = 0 Then
If Heure_Résultat(2) = 0 Then
If Heure_Résultat(3) = 0 Then
Message_Résultat = "Tableau rempli en " & Right("0" & Heure_Résultat(4), 2) & " centièmes"
Else
Message_Résultat = "Tableau rempli en " & Right("0" & Heure_Résultat(3), 2) & " secondes, " & Right("0" & Heure_Résultat(4), 2) & " centièmes"
End If
Else
Message_Résultat = "Tableau rempli en " & Right("0" & Heure_Résultat(2), 2) & " minutes, " & Right("0" & Heure_Résultat(3), 2) & " secondes, " & Right("0" & Heure_Résultat(4), 2) & " centièmes"
End If
Else
Message_Résultat = "Tableau rempli en " & Right("0" & Heure_Résultat(1), 2) & " heures, " & Right("0" & Heure_Résultat(2), 2) & " minutes, " & Right("0" & Heure_Résultat(3), 2) & " secondes, " & Right("0" & Heure_Résultat(4), 2) & " centièmes"
End If
MsgBox Message_Résultat
End Sub
Sub Remplissage_Tableau_Référencé()
Dim Heure_Résultat(1 To 4) As Integer, Heu_Deb As Double, Heu_Fin As Double, Heu_Temp As Double
Dim Compteur As Integer, Compteur2 As Integer
Dim Tab_Test(0 To 999, 0 To 999) As String, Message_Résultat As String
'début timer
Heu_Deb = Timer
'début test
For Compteur = 0 To 999
For Compteur2 = 0 To 999
Tab_Test(Compteur, Compteur2) = ActiveSheet.Range("A1").Offset(Compteur2, Compteur).Value
Next Compteur2
Next Compteur
'calcul temps d'exécution
Heu_Fin = Timer - Heu_Deb
If Heu_Fin < 0 Then Heu_Fin = Heu_Fin + 86400 'si passe minuit
Heure_Résultat(1) = Fix(Heu_Fin / 3600)
Heure_Résultat(2) = Fix((Heu_Fin - (Heure_Résultat(1) * 3600)) / 60)
Heure_Résultat(3) = Fix(Heu_Fin - ((Heure_Résultat(1) * 3600) + (Heure_Résultat(2) * 60)))
Heure_Résultat(4) = CInt((Heu_Fin - Fix(Heu_Fin)) * 100)
If Heure_Résultat(1) = 0 Then
If Heure_Résultat(2) = 0 Then
If Heure_Résultat(3) = 0 Then
Message_Résultat = "Tableau rempli en " & Right("0" & Heure_Résultat(4), 2) & " centièmes"
Else
Message_Résultat = "Tableau rempli en " & Right("0" & Heure_Résultat(3), 2) & " secondes, " & Right("0" & Heure_Résultat(4), 2) & " centièmes"
End If
Else
Message_Résultat = "Tableau rempli en " & Right("0" & Heure_Résultat(2), 2) & " minutes, " & Right("0" & Heure_Résultat(3), 2) & " secondes, " & Right("0" & Heure_Résultat(4), 2) & " centièmes"
End If
Else
Message_Résultat = "Tableau rempli en " & Right("0" & Heure_Résultat(1), 2) & " heures, " & Right("0" & Heure_Résultat(2), 2) & " minutes, " & Right("0" & Heure_Résultat(3), 2) & " secondes, " & Right("0" & Heure_Résultat(4), 2) & " centièmes"
End If
MsgBox Message_Résultat
End Sub