Incompatibilité de type 13

lolo62000

XLDnaute Junior
Bonjour,

dans un long code vba, j'ai réussi à isoler la partie de mon code qui me pose une erreur d'incompatibilité:

Private Sub UserForm_Initialize() '**** section à problème *****
Dim Plage As String
Dim L As Long, Tbl As Variant
Call TriFeuil2
With Sheets("Tango logs")
Tbl = .Range("F2:F" & .Range("F65536").End(xlUp).Row)
End With
Set mondico = CreateObject("Scripting.Dictionary")
For L = 1 To UBound(Tbl, 1)
If Not mondico.Exists(Tbl(L, 1)) Then mondico.Add Tbl(L, 1), Tbl(L, 1)
Next L
Me.DDRrech3.List = mondico.items

En fait, dans la feuille "Tango logs", qui est une base de données avec en ligne 1 = noms des colonnes, si les lignes 2 et 3 sont remplies (ce qui sera le cas quasiment tout le temps), le code fonctionne.
Par contre, quand j'efface toutes les données de la base de données, ou que seule la ligne 2 comporte des données, j'ai une erreur d'incompatibilité de type 13.
Il sera très rare que moins de deux lignes soient remplies dans la DB, mais au cas où, j'aimerais connaître la raison qui fait en sorte que la macro plante.
Merci.
Bonne journée.
Laurent.
 

Modeste

XLDnaute Barbatruc
Re : Incompatibilité de type 13

Bonsoir Laurent,

Comme on le dit souvent, sans fichier, on ne peut que faire des hypothèses. Impossible aussi de faire des tests pour confirmer/infirmer l'hypothèse. Et donc faire une proposition ... pas la peine d'y penser :)

As-tu essayé le mode "pas-à-pas" pour vérifier ce que valent tes variables lorsque F3 est vide et F2 "garnie" par exemple? Ton Tbl ne doit pas être un tableau ... et Ubound(d'un truc qui n'est pas un tableau) ... ne saurait fonctionner.
Si la colonne F est supposée servir de repère pour le nombre de lignes, il me semble que je ferais un test juste avant (ou après, nous, on ne peut pas savoir!) ton Call TriFeuil2 et j'ajouterais donc quelque chose comme
Code:
If Sheets("Tango logs").[F2] = "" Then Exit Sub
de manière que, s'il n'y a pas au moins une valeur sous le titre, le code ne soit pas exécuté ... à voir!?
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Incompatibilité de type 13

Bonsoir lolo62000, Modeste :),

Pour illustrer les propos de Modeste, des exemples dans le fichier joint :

Userform1
-> UserForm_Initialize teste si Tbl est un tableau ou non avec un inconvénient cependant si la colonne F ne contient aucune donnée à part l'intitulé en F1.

Userform2 -> UserForm_Initialize teste si Tbl est un tableau mais tient compte du cas où la colonne F ne contient que l'intitulé en F1.

code UserForm_Initialize de Userform1:
VB:
Private Sub UserForm_Initialize()
Dim Plage As String, L As Long, Tbl As Variant, mondico
  With Sheets("Feuil1")
    Tbl = .Range("F2:F" & .Range("F65536").End(xlUp).Row)
  End With
  Set mondico = CreateObject("Scripting.Dictionary")
  If IsArray(Tbl) Then
    ' Tbl est un tableau
    For L = 1 To UBound(Tbl)
      mondico(Tbl(L, 1)) = vbNullString
    Next L
  Else
    ' Tbl n'est pas un tableau [un seul élément en (ligne 1,colonne1)]
    mondico(Tbl) = vbNullString
  End If
  ListBox1.List = mondico.keys
End Sub


code UserForm_Initialize de Userform2:
VB:
Private Sub UserForm_Initialize()
Dim Plage As String, L As Long, Tbl As Variant, mondico
  With Sheets("Feuil1")
    Tbl = .Range("F1:F" & .Range("F65536").End(xlUp).Row)
  End With
  Set mondico = CreateObject("Scripting.Dictionary")
  If IsArray(Tbl) Then
    For L = 2 To UBound(Tbl)
      mondico(Tbl(L, 1)) = vbNullString
    Next L
  End If
  ListBox1.List = mondico.keys
End Sub
 

Pièces jointes

  • lolo62000-v1.xlsm
    26.2 KB · Affichages: 33
Dernière édition:

Discussions similaires

Réponses
6
Affichages
144
Réponses
0
Affichages
268