Erreur d'éxècution '13'

néné06

XLDnaute Accro
Bonsoir le Forum,

Si je place un nombre < à 65537, cela fonctionne, mais au dessus , le message "Erreur d'éxècution '13', Incompatibilité de type" arrive !

Quelle modification à apporter dans cette ligne ?
Range("A2").Resize(dico.Count) = Application.Transpose(dico.keys)

Private Sub Workbook_Open()
' ********** Tirage de valeurs différentes et écriture en colonne A et B ***************
Set dico = CreateObject("Scripting.Dictionary")
While dico.Count < 1065537
Randomize
S = Int((10000000 * Rnd)) + 1
dico(S) = S
Wend
Range("A2").Resize(dico.Count) = Application.Transpose(dico.keys)
Range("B2").Resize(dico.Count) = Application.Transpose(dico.keys)
'********** Trier la colonne B par ordre croissant **************
Columns("B:B").Select
Selection.Sort Key1:=Range("B1"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
'******** Instale des pointeurs pour trouver ligne en recherche VlookUp en colonne C ************
For i = 2 To 65537: Cells(i, 3) = i - 1: Next i
End Sub

D'avance Merci

A+

René
 

Pièces jointes

  • Classeur1.xlsm
    16.1 KB · Affichages: 48
  • Classeur1.xlsm
    16.1 KB · Affichages: 49
Dernière édition:

néné06

XLDnaute Accro
Re : Erreur d'éxècution '13'

Bonsoir Patrick,
Merci pour ta réponse!
Je pense avoir fait une erreur en plaçant " 1065537" alors que Excel accepte mois de cellules.
Même avec un chiffre supérieur à 65535, le programme plante !

Je pense que cela provient de la syntaxe!

Merci pour le réponse et je modifie le programme.

A+

René
 

néné06

XLDnaute Accro
Re : Erreur d'éxècution '13'

Bonsoir à tous,


J'ai changé les nombre dans le post # 1 comme le suggère Patrick car , même en "xlsm", le nombre était trop élevé!

Comme le dit Roland, au dessus de 65536, nous avons des problèmes avec " integer."

Code:
je crois que l'on peut pas dépasser 65536 !?

Reste à savoir si il y a un moyen de dépasser 65536 ?

A+

René
 

Paf

XLDnaute Barbatruc
Re : Erreur d'éxècution '13'

Bonjour néné06, Victor21, Roland_M,

Comme le précise Roland_M, application transpose ne peut dépasser les 65536. Une solution possible : une boucle pour simuler transpose:

Code:
Sub Macro()
 Dim MonTab(), x As Long
 Set dico = CreateObject("Scripting.Dictionary")
 While dico.Count < 1065537
    Randomize
    S = Int((10000000 * Rnd)) + 1
    dico(S) = S
 Wend
 ReDim MonTab(1 To dico.Count, 1 To 2)
 For Each Cle In dico.keys
    x = x + 1
    MonTab(x, 1) = Cle
    MonTab(x, 2) = dico(Cle)
 Next

 Range("A2").Resize(dico.Count, 2) = MonTab
End Sub

ou, puisque la clé du dico=item du dico et si une deuxième colonne est nécessaire

Code:
Sub Macro()
 Dim MonTab(), x As Long
 Set dico = CreateObject("Scripting.Dictionary")
 While dico.Count < 1065537
    Randomize
    S = Int((10000000 * Rnd)) + 1
    dico(S) = S
 Wend
 ReDim MonTab(1 To dico.Count)
 For Each Cle In dico.keys
    x = x + 1
    MonTab(x, 1) = Cle
 Next

 Range("A2").Resize(dico.Count) = MonTab
 Range("B2").Resize(dico.Count) = MonTab
End Sub

A+

Edit : je n'ai pas fait le test avec plus de 65535 éléments étant sous XL 2003, et donc pas corrigé la limite de dico.Count

re edit : mais ça doit fonctionner avec comme limite 1 048 576 -1 puisqu'on veut afficher à partir de ligne 2
 
Dernière édition:

néné06

XLDnaute Accro
Re : Erreur d'éxècution '13'

Bonsoir,

En deux mots, je cherche à remplir une colonne A et B avec 1000000 de valeurs (aléatoires en si possible sans doublons), les trier en colonne B.
Par la suite , je compte exécuter des testes de rapidité de recherche par la fonction VlookUp (Voir ce lien).

Lien supprimé

Par cette fonction, j'ai constaté qu'une recherche de 50000 valeurs parmi 65000 valeurs ne prenait que 1 seconde 25, ce que je trouve acceptable.:eek:
Avec la méthode For.. Next, je crains que je n'aurais jamais le résultat.:confused:

A+

René
 
Dernière édition:

Paf

XLDnaute Barbatruc
Re : Erreur d'éxècution '13'

re,

la boucle For Next est juste proposée afin de s'affranchir de la limitation de application.transpose. c'est sûr que ça demande quelques centièmes de seconde. mais l'autre solution en utilisant application.transpose par tranche de 65536 risue d'être aussi gourmande.

Pour l'histoire de la recherche, une idée qui n'est peut-être pas exploitable dans ce cas ( pas de lien valide):

dans le dico, mettre en clé le nombre aléatoire et en item le N° de ligne; la recherche pourrait se faire directement dans le dico ( accès instantané ) pour récupérer le N° de ligne ...

A+
 

Discussions similaires

Réponses
14
Affichages
1 K

Statistiques des forums

Discussions
312 334
Messages
2 087 384
Membres
103 530
dernier inscrit
dieubrice