IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Erreur d'exécution '13': Incompatibilité de type - Redim Preserve Tableau multidimensionnel Variant [XL-2019]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 184
    Par défaut Erreur d'exécution '13': Incompatibilité de type - Redim Preserve Tableau multidimensionnel Variant
    Bonjour,

    J'ai une erreur 13 d'incompatibilité de type à la dernière ligne de ce début de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            Dim TblLdS() As Variant
            Dim N as Integer
            
            N = N + 1
            ReDim Preserve TblLdS(2, N)
    Qu'est-ce que j'ai fait de mal?

    Cordialement

  2. #2
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour,

    Avant de préserver il faut définir

    Ce qui te permet de supprimer ton Dim du tableau

  3. #3
    Membre confirmé
    Homme Profil pro
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 184
    Par défaut
    Bonjour,

    Merci beaucoup de la réponse et désolé pour mon retour tardif.

    En effet, ça fonctionne.

    Mais comment ce fait-il alors que ce code fonctionne?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            Dim NomCl() As String
            Dim I As Byte
     
    For I = 1 To Workbooks.Count
            ReDim Preserve NomCl(I)
            NomCl(I) = Workbooks(I).Name
    Next

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 385
    Par défaut
    Bonjour,

    Je pense que la différence vient du fait que dans ton 1er cas ton tableau a 2 dimensions, et l'utilisation de Preserve ne permet de modifier que la dernière dimension d'un tableau (voir aide en ligne)
    Avant que tu corriges, VBA comprenait que tu voulais redimension la première et la deuxième dimension vu que tu n'avais pas initialiser ton tableau, ce qui n'est pas possible.

    Dans ton deuxième code, tu ne redimensionnes qu'une seul dimension à chaque itération (donc la dernière en somme), ce qui ne pose pas de problème à VBA.
    En revanche, tu aurais eu une deuxième dimension, m'est avis que ça aurait bugué.

  5. #5
    Membre confirmé
    Homme Profil pro
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 184
    Par défaut
    Bonjour,

    Je vous remercie de vos réponses.

    Malgré tout, ce code fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
            Dim TblLds() As Variant
     
            Set OLi = Selection
            IntLi = OLi.Row
            IntLiDer = IntLi + OLi.Rows.Count - 1
     
            N = 0
     
        For I = IntLi To IntLiDer
            If Rows(I - 1).OutlineLevel > Rows(I).OutlineLevel Then
                N = N + 1
                ReDim Preserve TblLds(2, N)
                TblLds(1, N) = Rows(I).Row
                If Rows(I).Hidden = True Then TblLds(2, N) = True Else TblLds(2, N) = False
            End If
        Next
     
            Set FlBD = Sheets.add
        With FlBD
            .Range("A1").Value = "Ligne faisant partie d'un plan"
            .Range("B1").Value = "Cachée ou pas"
        For N = 1 To UBound(TblLds, 2)
            .Cells(N + 1, 1) = TblLds(1, N)
            .Cells(N + 1, 2) = TblLds(2, N)
        Next N
        End With
    Quelle différence avec le premier code?

    À vrai dire, je n'arrive pas à reproduire l'erreur.

    Peut-être que j'avais simplement omis les parenthèses lors du dimensionnement :
    Si c'est ça, désolé du dérangement !

    Cordialement

  6. #6
    Membre confirmé
    Homme Profil pro
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 184
    Par défaut
    Citation Envoyé par Dédé6621 Voir le message
    Peut-être que j'avais simplement omis les parenthèses lors du dimensionnement
    Je confirme, c'était ça.

    Citation Envoyé par anasecu Voir le message
    Avant de préserver il faut définir

    Ce qui te permet de supprimer ton Dim du tableau
    En fait, il n'est pas nécessaire de définir la variable tableau avant de préserver.
    En revanche, dans ce cas, il est alors nécessaire de dimensionner avec des parenthèses:
    Je n'ai pas fait attention à ça en retouchant le code dans mon message d'ouverture.

    Merci pour vos réponses!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur d'exécution "13" incompatibilité de type
    Par zenico64 dans le forum VBA Outlook
    Réponses: 1
    Dernier message: 14/12/2010, 10h45
  2. Erreur d'exécution 13 : incompatibilité de type
    Par Ptikir dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 01/04/2009, 15h59
  3. erreur d'exécution 13 incompatibilité de type
    Par glamgeek dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/03/2009, 12h03
  4. "erreur d'exécution 13 : incompatibilité de type"
    Par oliver75 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 19/07/2007, 15h47
  5. erreur d'exécution 13, incompatibilité de type
    Par PHPdudimanche dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 01/06/2007, 15h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo