[VBA] erreur d éexecution 13 : incompatibilité de type

Hello suite à un plantage de mon excel, mon code qui fonctionnait m'affiche l'erreur sus nommée.

Je me doute que cela est sans doute du à une modification qui n'a pas été sauvegardée mais je ne vois pas où

Private Sub UserForm_initialize()

'déclaration du spine
Set TS_spine = Range("Spines_L3_new").ListObject
Set TS_Trav = Range("t_TRAV").ListObject
Set TS_scop_L3 = Range("scop_L32").ListObject
'déclaration du L2
Set TS_L2 = Range("vlan_avec_L3").ListObject
Set TS_scop_L2 = Range("scop_L22").ListObject

'déclaration des LB
Set TS_lb = Range("conf_LB_new").ListObject
Set TS_scop_LB = Range("scop_LB").ListObject

'déclaration ORION
Set TS_orion = Range("VxLan_avec_L3_new").ListObject
Set TS_scop_orion = Range("scop_orion").ListObject
'formatage de la taille
extractVRF_V2.Width = 262.5
extractVRF_V2.Height = 150

Call Init_BT

'liste_vrf.Clear
liste_vrf.MultiSelect = fmMultiSelectMulti

End Sub

Private Sub valider_Click()
Dim i As Long, j1 As Long, j2 As Long
    Dim cell As Range, cell1 As Range
    Dim ligne As ListRow

    'vidage tableau temporaire si rempli
                Dim tb_TS(3)
                Dim TS As Variant

                Set tb_TS(0) = TS_scop_L3: Set tb_TS(1) = TS_scop_L2: Set tb_TS(2) = TS_scop_LB: Set tb_TS(3) = TS_scop_orion
                For Each TS In tb_TS
                With TS
                    If .ListRows.Count > 0 Then .DataBodyRange.delete
                End With
                Next TS
    

L'erreur se situe au niveau de:

 Set tb_TS(0) = TS_scop_L3: Set tb_TS(1) = TS_scop_L2: Set tb_TS(2) = TS_scop_LB: Set tb_TS(3) = TS_scop_orion

C'est comme si il n'arrivait pas à déclarer mes tableaux... qqn voit-il qqch que je ne vois pas?

Bonjour,

Plutôt que de mettre tout sur une seule ligne, enlevez les : et faites 4 lignes. Déjà là vous verrez où le code vous renvoie l'erreur

NB : sans reproche pour vous mais je ne comprends pas cette habitude de mettre tout sur une ligne dans les instructions, c'est toujours moins lisible à coup sûr

Cordialement

Dan, merci pour ta remarque

Mais j'ai tenté de mettre sur 4 lignes le constat est le même

Set tb_TS(0) = TS_scop_L3

La bloque le code

si je mets en commentaire cette ligne il bloque sur la suivante.

Pourtant, j'ai pas l'impression d'avoir omis de déclarer mes tableaux

Mais j'ai tenté de mettre sur 4 lignes le constat est le même

Non parce que là on sait que le code s'arrête déjà sur cette ligne

Vous avez combien de tableau sur la feuille ?
Dans initialize vous mettez des SET TS, vos variables sont déclarées où ?

Bonjour,

Votre erreur signifie que votre variable TS_scop_L3 en tant qu'objet "ListObject" n'existe plus lors du déroulement de votre code. Elle est donc remplacée par une variable de type Variant qui n'est pas un objet, d'où l'erreur d'incompatibilité.

Je me dois d'avoir une réflexion plus poussée de mon côté, car ce sont tous mes formulaires qui ne fonctionnent plus.

Et pas uniquement celui sur lequel je travaillais hier.

Tous mes formulaires me retournent la même erreur désormais

Erreur 1004:

la méthode Range de l'objet Global a échoué

Je vais essayer d'analyser cela de mon côté.

re

La raison probable vient de ce que thev vous explique et de ce que je vous ai demandé au sujet de la déclaration de vos variables

Bon j'avance dans mon dépannage grâce à vos conseils

Désormais j'ai cette erreur

image

sur la ligne

If .ListRows.Count > 0 Then .DataBodyRange.delete

de l'extrait que je vous ai copié plus tot

edit: j'ai mal nommé un de mes TS du coup il ne le trouve pas et donc ne peut pas supprimer les données

quand je renomme j'en reviens à mon problème initial

Je cherche ;-)

Par rapport à ce que je vous ai écrit essayez ceci

Private Sub valider_Click()
Dim i As Long, j1 As Long, j2 As Long
Dim cell As Range, cell1 As Range
Dim ligne As ListRow

'vidage tableau temporaire si rempli
Dim tb_TS()
Dim j As Byte

tb_TS = Array(Range("scop_L22").ListObject, Range("scop_L32").ListObject, Range("scop_LB").ListObject, Range("scop_orion").ListObject) ', TS_scop_orion)

For j = 0 To UBound(tb_TS)
With tb_TS(j)
        If .ListRows.Count > 0 Then .DataBodyRange.Delete
    End With
Next j

Résolu, pour ce souci là... il s'agissait bien d'un problème de déclaration de mes tableaux.

Certaines modifications n'ayant pas été sauvegardées entre hier et aujourd'hui, il m'a fallu vérifier chaque déclaration et m'apercevoir que des déclarations n'étaient pas complètes.

Merci de m'avoir accordé un peu de temps.

Merci Dan, j'ai pu implémenter votre extrait en remplacement de ce que j'avais.

Le fonctionnement répond bien aux attentes

Rechercher des sujets similaires à "vba erreur eexecution incompatibilite type"