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 dans un tableau : incompatibilité de type. [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur BIM
    Inscrit en
    Juillet 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur BIM

    Informations forums :
    Inscription : Juillet 2019
    Messages : 5
    Par défaut Erreur d'exécution 13 dans un tableau : incompatibilité de type.
    Bonjour à tous,

    j'ai un petit soucis (surement du au fait que je débute un peu en vba). J'essaie de remplir un tableau en faisant le produit des valeurs d'une feuille excel, le tout avec une petite boucle for. Et lorsque j'exécute, je récolte une erruer d'écuéction 13 : Incompatibilité de type.
    Voici le code:
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    Sub Programme()
           'Définit une variable qui va représenter une cellule
            Dim Cell1 As Range
            Dim Cell2 As Range
            Dim L_tot As Double
     
     
            'Définit les tableaux
            Dim pte As ListObject
            Dim stk As ListObject
            Dim lg As ListObject
     
            Set pte = ActiveSheet.ListObjects("Tableau1")
            Set stk = ActiveSheet.ListObjects("Tableau2")
            'Définit les longueurs des curves (murs)
            Set lgcurves = ActiveSheet.ListObjects("Tableau3")
     
            'Dernière lignes des pte
            Dim dlpte390 As Integer, dlpte240 As Integer, dlpte170 As Integer
            dlpte390 = ActiveSheet.Range("A1").End(xlDown).Row - 1
            dlpte240 = ActiveSheet.Range("B1").End(xlDown).Row - 1
            dlpte170 = ActiveSheet.Range("C1").End(xlDown).Row - 1
    '        LastRow = ActiveSheet.ListObjects("Tableau1").Range.Rows.Count
     
            'Dernière lignes des stock
            Dim dlstk390 As Integer, dlstk240 As Integer, dlstk170 As Integer
            dlstk390 = ActiveSheet.Range("F1").End(xlDown).Row - 1
            dlstk240 = ActiveSheet.Range("G1").End(xlDown).Row - 1
            dlstk170 = ActiveSheet.Range("H1").End(xlDown).Row - 1
            Dim lg390(), lg240(), lg170()
     
            'Boucle pour les produit des 390
            For i = 0 To dlstk390 * dlpte390
                For j = 1 To dlpte390
                    For k = 1 To dlstk390
                        lg390(i) = Range("A" & j) * Range("F" & k)
     
                        Next k
                Next j
            Next
    MsgBox Range("A10")
     
     
    '            'Boucle sur chaque cellule des tableaux
    '            For Each Cell1 In pte
    '                For Each Cell2 In stk
    '
    '                L_tot = Cell1 * Cell2
    '
    '                'Produit stock x longueur des 390
     
    '            Next Cell
     
    End Sub
    Pour info, lors du debogage, la ligne est la suivante : lg390(i) = Range("A" & j) * Range("F" & k)

    j'espère que je n'ai pas été trop confus.

    Merci pour votre aide

  2. #2
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 563
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 563
    Par défaut
    Bonjour

    Si tu travailles sur de ListOjects manipule-les avec la code Ad hoc en utilisant listrow et dataBodyRange plutôt que End(xlDown)

    Selon la taille des tableaux, utiliser Long plutôt que Integer

    Vérifier les contenus des colonnes A et F

    Une boucle initialisée à 0 ne peut marcher comme référence de row et une boucle initialisée à 1 renvoie sans doute vers la ligne de titre...

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur BIM
    Inscrit en
    Juillet 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur BIM

    Informations forums :
    Inscription : Juillet 2019
    Messages : 5
    Par défaut
    Bonjour Chris,

    en fait je n'utilise pas les ListObject, c'était un test.

    Que veux-tu dire par vérifier le contenu des colonnes?

    J'ai modifié mon code pour écrire non plus dans un tableau mais directement dans la feuille, et ça donne ça :
    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
    27
    28
     
    Dim dlpte390 As Integer, dlpte240 As Integer, dlpte170 As Integer
            dlpte390 = ActiveSheet.Range("A1").End(xlDown).Row - 1
            dlpte240 = ActiveSheet.Range("B1").End(xlDown).Row - 1
            dlpte170 = ActiveSheet.Range("C1").End(xlDown).Row - 1
    '        LastRow = ActiveSheet.ListObjects("Tableau1").Range.Rows.Count
     
            'Dernière lignes des stock
            Dim dlstk390 As Integer, dlstk240 As Integer, dlstk170 As Integer
            dlstk390 = ActiveSheet.Range("F1").End(xlDown).Row - 1
            dlstk240 = ActiveSheet.Range("G1").End(xlDown).Row - 1
            dlstk170 = ActiveSheet.Range("H1").End(xlDown).Row - 1
            Dim lg390() As Double, lg240() As Double, lg170() As Double
            'Longueur des tableaux de longueurs
            Dim llg390 As Integer, llg240 As Integer, llg170 As Integer
            llg390 = dlstk390 * dlpte390
     
    '        ReDim lg390(llg390)
            'Boucle pour les produit des 390
            For k = 2 To dlstk390
                For j = 2 To dlpte390
                    For i = 1 To llg390
                        Range("M" & i) = Range("A" & j).Value * Range("F" & k).Value
                        'lg390(i) = Range("A" & j).Value * Range("F" & k).Value
     
                        Next i
                Next j
            Next
    Là ça fonctionne mais il écrit la meme valeur dans chacune des lignes de la colonne, et non pas une valeur différente égale au produit de chacune des lignes des deux colonnes de la formule... Une idée du pourquoi?

  4. #4
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 563
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 563
    Par défaut
    RE

    Parce tes boucles semblent inversées : i parcours toute la plage sans que j et k ne changent

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ingénieur BIM
    Inscrit en
    Juillet 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur BIM

    Informations forums :
    Inscription : Juillet 2019
    Messages : 5
    Par défaut
    oui c'est en effet ce que je me suis dit. Du coup j'ai supprimé le i et j'ai seulement gardé mon j et k... mais je pense que je m'embrouille avec les indices. j'ai ça pour le moment :

    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
    'Dernière lignes des pte
            Dim dlpte390 As Integer, dlpte240 As Integer, dlpte170 As Integer
            dlpte390 = ActiveSheet.Range("A1").End(xlDown).Row
            dlpte240 = ActiveSheet.Range("B1").End(xlDown).Row
            dlpte170 = ActiveSheet.Range("C1").End(xlDown).Row
    '        LastRow = ActiveSheet.ListObjects("Tableau1").Range.Rows.Count
     
            'Dernière lignes des stock
            Dim dlstk390 As Integer, dlstk240 As Integer, dlstk170 As Integer
            dlstk390 = ActiveSheet.Range("F1").End(xlDown).Row
            dlstk240 = ActiveSheet.Range("G1").End(xlDown).Row
            dlstk170 = ActiveSheet.Range("H1").End(xlDown).Row
            Dim lg390() As Double, lg240() As Double, lg170() As Double
            'Longueur des tableaux de longueurs
            Dim llg390 As Integer, llg240 As Integer, llg170 As Integer
            llg390 = dlstk390 * dlpte390
     
     
     
              For j = 2 To dlpte390
                For k = 2 To dlstk390
     
                        Range("M" & j + k - 2) = Range("A" & j).Value * Range("F" & k).Value
     
                Next k
            Next
    je truc c'est que ça ne marche évidement pas, puisque le nombre de ligne dans la colonne M n'est pas égal à dltsk390 x dlpte390...

  6. #6
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 563
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 563
    Par défaut
    Re

    Vu de l'extérieur ton code parait curieux : tu sembles avoir des tableaux de A à à C, puis de F à H et je ne vois pas l'intérêt de calculer des longueurs pour chaque colonne.
    Si tes colonnes sont indépendantes les uns des autres et c'est une mauvaise pratique de les accoler...

    Dans la mesure où tu veux multiplier A par F ces deux colonnes sont supposées avec la même hauteur, non ?

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

Discussions similaires

  1. [XL-2010] Erreur d'exécution '9' sur un tableau.
    Par gecko404 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/05/2015, 09h57
  2. [XL-2007] Erreur d'exécution dans un Tableau Croisé Dynamique
    Par ChChatou dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 10/01/2014, 17h35
  3. [AC-2003] Erreur d'exécution 3134 dans un SQL
    Par phoon dans le forum Requêtes et SQL.
    Réponses: 13
    Dernier message: 03/11/2009, 15h46
  4. Erreur de format "TOTAL" dans un tableau.
    Par bmad1 dans le forum QlikView
    Réponses: 1
    Dernier message: 20/05/2009, 15h18
  5. erreur d'exécution '48' dans access 2003
    Par SANGLIER dans le forum Access
    Réponses: 1
    Dernier message: 25/01/2007, 19h01

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