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 :

Incompatibilité de type sous Excel


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Incompatibilité de type sous Excel
    Bonjour, quelqu'un aurait une idée de pourquoi j'ai une incompatibilité de type avec cette ligne

    -->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    résultat_granulometrie = obj_granulometrie(h + (k * nbr_pièce_testé) - 1).Value



    Voici le code complet !



    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
    Public obj_granulometrie() As Object
    Dim résultat_granulometrie As Double
     
     
    nbr_pièce_testé = Val(nbr_pièces_UserForm.nbr_pièces.Value)
     
     
    For k = 0 To 1
    For h = 1 To nbr_pièce_testé
     
    résultat_granulometrie = obj_granulometrie(h + (k * nbr_pièce_testé) - 1).Value
    Worksheets("Décanteurs_").Range(Chr(caractere) & LaDernièreLigne + h - 1) = résultat_granulometrie
     
    Next h
     
    caractere = caractere + 1
    Next k
    Merci de votre aide

  2. #2
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Bonjour,
    Qu'est-ce que obj_granulometrie ? Où est-ce que tu le définies et comment ?

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Il sagit d'un tableau dans lequel je range différentes valeurs, et le but de ce code est d'afficher une à une les valeurs du tableau :
    C'est un tableu global définie en dehors de ma fonction


    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
    Public obj_granulometrie() As Object
    ReDim obj_granulometrie(nbr_pièce_testé * 10)
     
     
    For t1 = 1 To nbr_pièce_testé * 10
    Set obj_granulometrie(t1 - 1) = Me.Controls.Add("forms.TextBox.1")
     
        If t1 <= nbr_pièce_testé Then
     
            With obj_granulometrie(t1 - 1)
                .Name = "valeur_" & t1
                .Left = 100
                .Top = 30 * t1 + 40
                .Width = 50
                .Height = 20
            End With

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    En soit le tableau ne pose pas problème je crois, le problème apparait dès que j'ajoute la variable nbr_pièce_testé dans la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    résultat_granulometrie = obj_granulometrie(h + (k * nbr_pièce_testé) - 1).Value
    En résumé,

    Cette ligne fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    résultat_granulometrie = obj_granulometrie(h + k  - 1).Value
    Celle me dit que j'ai une incompatibilité de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    résultat_granulometrie = obj_granulometrie(h + (k * nbr_pièce_testé) - 1).Value

  5. #5
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    pourquoi tu déclares ton tableau comme un objet ?
    Pourquoi tu déclares en public cette variable DANS la procédure ?
    Pourquoi on ne voit pas la déclaration de procédure ? (Sub()...)
    que vaut nbr_pièce_testé ?
    Récupérer la valeur d'un tableau ne passe pas par une propriété .Value

    Que vallent tes variables quand la procédure plante ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public obj_granulometrie()
     
    Sub toto()
    nbr_pièce_testé = UnChiffreDeTonChoix
    ReDim obj_granulometrie(nbr_pièce_testé * 10)
    MonToto = obj_granulometrie(14)  ' par exemple
    ....
    End Sub

  6. #6
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Difficile de déterminer avec assurance ce qui ne va pas parmi tant d'imprécisions.
    Je souscris totalement à ce sujet à la remarque de joe.levrai
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Car je me sers de mon tableau dans un de mes formulaires, en fait je génére un formulaire dynamiquement en fonction de la valeur de nbr_pièce_testé ( nbr_pièce_testé est une variable qui prend une valeur rentré par l'utilisateur dans mon tout premier formulaire ).



    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
    Public obj_granulometrie() As Object
     
    Sub Remplissage()
     
    Dim nbr_pièce_testé As Integer
    'On récupère la valeur du nombre de pièce que l'on test
        nbr_pièce_testé = Val(nbr_pièces_UserForm.nbr_pièces.Value)
    'On calcule la dernière ligne pour pouvoir en ajouter une
        LaDernièreLigne = Range("A65536").End(xlUp).Offset(1, 0).Row
     
    '.......
     
    'Déclaration des variables
    Dim résultat_granulometrie As Double
    Dim caractere As Integer
     
     
    caractere = 89
     
    For k = 0 To 1
    For h = 1 To nbr_pièce_testé
     
    résultat_granulometrie = obj_granulometrie(h + (k * nbr_pièce_testé) - 1).Value
    Worksheets("feuil1").Range(Chr(caractere) & LaDernièreLigne + h - 1) = résultat_granulometrie
     
    Next h
    caractere = caractere + 1
    Next k
     
    End Sub
    Quand ca plante nbr_pièce_testé vaut la valeur que je lui ai donné dans le formulaire, h vaut 1 et k vaut 0

  8. #8
    Invité
    Invité(e)
    Par défaut
    bonjour,
    ce qui est important ce n'est pas vraiment où tu utilises ton tableau, quoique! mais avant tout ou tu gère ses instance!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set obj_granulometrie(0)=MonObject

  9. #9
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Ta variable obj_granulometrie n'est pas un objet mais un Tableau

    Là maintenant, nous n'avons même plus la partie de la procédure où tu redimensionnes ton tableau

    La ligne 27 est inutile, autant utiliser caractere + k en ligne 24

    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
    Public obj_granulometrie()
     
    Sub Remplissage()
    Dim résultat_granulometrie As Double
    Dim caractere As Integer
    Dim nbr_pièce_testé As Integer
        nbr_pièce_testé = Val(nbr_pièces_UserForm.nbr_pièces.Value)
        LaDernièreLigne = Range("A65536").End(xlUp).Offset(1, 0).Row
        caractere = 89
     
        For k = 0 To 1
            For h = 1 To nbr_pièce_testé
                résultat_granulometrie = obj_granulometrie(h + (k * nbr_pièce_testé) - 1).Value
                Worksheets("feuil1").Range(Chr(caractere + k) & LaDernièreLigne + h - 1) = résultat_granulometrie
            Next h
        Next k
    End Sub

  10. #10
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    C'est bon avec quelques bidouilles j'ai réussi. En effet le tableau déclaré en objet y était pour quelque chose !
    Merci beaucoup

    Bonne journée

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/10/2016, 11h32
  2. [AC-2007] Incompatibilité de type lors de la manipulation d'Excel
    Par yonnel dans le forum VBA Access
    Réponses: 7
    Dernier message: 07/11/2014, 22h25
  3. [XL-2013] Écart type sous Excel 2013
    Par ExKira dans le forum Excel
    Réponses: 1
    Dernier message: 03/12/2013, 11h00
  4. Incompatibilité de type Excel / SQL server
    Par OliverD dans le forum Développement
    Réponses: 2
    Dernier message: 13/08/2009, 09h50

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