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 lors de l'utilisation de l'AddIn Aspentech


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
    Opérateur
    Inscrit en
    Mai 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Opérateur

    Informations forums :
    Inscription : Mai 2015
    Messages : 6
    Par défaut Incompatibilité de type lors de l'utilisation de l'AddIn Aspentech
    Bonjour,

    Je cherche a extraire des valeurs d'un automate grâce à l'AddIn Aspentech et à les stocker dans un tableau. (code ci-dessous)

    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
     
    Sub FPPI()
    '
    ' FPPI Macro
    '
        Application.ScreenUpdating = False
        Application.Calculation = xlManual
     
        Dim Hist As Date, pas As Date, nbboucle As Integer, FPPI As Integer, RCP() As Variant
     
     
     
        Hist = InputBox("Depuis quand voulez-vous l'historique ?", "Historique", Date)
        pas = InputBox("Quel pas voulez-vous ?", "Pas", "00:10")
     
     
        nbboucle = (now() - Hist) / pas                 'Calcul du nombre de valeur à extraire
        Range("A1:I60000").ClearContents
        FPPI = 0
     
     
        For i = 1 To nbboucle
     
            ReDim Preserve RCP(i)
     
            RCP(i) = ATGetTimeVal("GG1RCP955EU-", "", "", Hist, 16, 0, 0)               'Extraction de la valeur et stockage dans la ligne "i" du tableau
     
            If RCP(i) < 92 And RCP(i) > 2 Then: FPPI = FPPI + 1
     
            Hist = Hist + pas
     
        Next
     
        Range("D1") = "Cumul FFPI"
        Range("D2") = FPPI
     
     
    End Sub
    Le problème est à la ligne 28 (If RCP(i) < 92 And RCP(i) > 2 Then: FPPI = FPPI + 1), il me met un message d'erreur incompatibilité de type. Après analyse, il s'avère que la formule AtGetTimeVal renvoie une matrice avec du texte. Je ne sais pas comment transformer le texte en nombre pour pouvoir faire des conditions/opérations etc...
    J'ai utilisé =val(), Cdbl,...

    La seul solution que j'ai trouvé est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    For i = 1 To nbboucle
     
            ReDim Preserve RCP(i)
     
            RCP(i) = ATGetTimeVal("GG1RCP955EU-", "", "", Hist, 16, 0, 0)               'Extraction de la valeur et stockage dans la ligne "i" du tableau
            Range("A1") = RCP(i)                                                                           'Copie de RCP(i) dans la cellule A1
            If Range("A1")  < 92 And Range("A1") > 2 Then: FPPI = FPPI + 1
     
            Hist = Hist + pas
     
        Next
    Avec cette solution pas d'incompatibilité de type et il incrémente bien FPPI. Le problème, c'est la différence de rapidité de calcul, avec la première méthode une extraction de 10000 valeurs prend 1/10eme de seconde alors que la seconde presque une minute...

    Est ce que quelqu'un connait une solution pour manipuler RCP(i) avec des If ou des opérations ?

    Merci d'avance ! :-)

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    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 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    ce ne serait pas un problème de séparateur ? (virgule pour france, point pour anglais)

    tu peux nous monter une matrice exemple ?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Opérateur
    Inscrit en
    Mai 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Opérateur

    Informations forums :
    Inscription : Mai 2015
    Messages : 6
    Par défaut
    Le problème c'est que je n'arrive pas à voir ce que me renvoie la fonction AtGetTimeVal sans la copier dans une cellule excel et quand je passe par une cellule excel ça fonctionne... J'ai bien essayé : MsgBox (RCP(i)) mais ça ne fonctionne pas. Dans l'aide AspenTech de excel, je trouve ceci (désolé pour l'anglais...)

    ATGetTimeVal(sTag, sServer, sMap, sTime, nDSetting, nOrientation, nTagDirection)

    Arguments :
    Note: Each argument for ATGetTimeVal is listed with its data type (in parenthesis), definition and usage.

    sTag – (variant) Ici le tag de la valeur que je cherche à savoir : "GG1RCP955EU-"
    sServer – (variant) Le serveur sur lequel chercher
    sMap – (variant) An expression that represents a valid map. An empty string or "fixed" indicates the default map. This argument is ignored if Map is defined in the worksheet together with the tag.
    sTime – (variant) Le moment auquel on veut la valeur

    nDSetting – (integer) Voir ci dessous

    nOrientation – (integer) Numeric expression that defines the orientation of the output of the tag data in the array. Zero (0) = vertical; 1 = horizontal
    nTagDirection – (integer) Numeric expression that defines the direction to read tag information from a cell reference. Zero (0) = tag information is read on the worksheet horizontally, one tag per row. One (1) = tag information is read on the worksheet vertically, one tag per column.


    nDSetting
    The nDSetting argument is the sum of the following contant values.

    Note: Each nDSetting constant is listed below with its numeric value(in parenthesis) and description.

    atTagName – (1) Specify the tag name.

    atServerName – (2) Specify/display the server name for the tag.

    atMap – (4) Specify/display the map for the tag.

    atTime – (8) Specify the time/read the time.

    atValue – (16) Read/write the value.

    Dans mon cas la valeur 16 pour ne renvoyer que la valeur


    nTagDirection

    You can define tags by entering them in the worksheet and by passing the cell range as the tag argument. In this case, a tag is defined as one or more sets of "tag name, server and map," where server and map are optional.

    The data orientation (row or column) for a tag is dependent on the nTagDirection selected. For example, if you want to read the tag information in rows, specify:

    One column range assumes only tag name is defined. The server and map default to the Server and Map specified in the arguments.

    Two column range assumes tag name and server are defined.

    Three column range assumes tag name, server and map are defined. Cells left blank are considered to be the default.

    For instance:



    A B C
    1 Tag name
    or 2 Tag name server
    or 3 Tag name Server Map
    or 4 Tag name Map



    If you specify the nTagDirection in columns (vertically,) the tags are read as follows:



    or or or
    A B C D
    1 Tag name Tag name Tag name Tag name
    2 Server Server
    3 Map Map

    The nDSetting argument is the sum of values that specify the data to be displayed. For example, to display the Tag, Server, and Status as text:

    Assign nDSetting = atTagName + atServerName + atQStatus + atQStatusText

    nDSetting = 1 + 8 + 128 + 256

    nDSetting = 393


    Voilà je sais pas si ça peut aider...

    Par contre la piste . ou , est peut être la bonne vu que ça me semble être un AddIn américain mais je sais pas comment voir ce que me renvoie la formule. En collant dans une cellule A1 j'ai une valeur du genre : 2,315000057
    Par contre, si dans la cellule d'à côté j'utilise =Si(A1<92;1;0) ça me renvoie toujours zéro. Pour que le Si fonctionne je suis obliger de mettre avant =CNUM(A1)...

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Par contre, si dans la cellule d'à côté j'utilise =Si(A1<92;1;0) ça me renvoie toujours zéro. Pour que le Si fonctionne je suis obliger de mettre avant =CNUM(A1)...
    Cela confirme ce que soupçonnais Joe
    J'ai bien essayé : MsgBox (RCP(i)) mais ça ne fonctionne pas
    C'est assez étonnant. Bien que cela ne change rien essayer MsgBox RCP(i) ou MsgBox Val(RCP(I))
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Opérateur
    Inscrit en
    Mai 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Opérateur

    Informations forums :
    Inscription : Mai 2015
    Messages : 6
    Par défaut
    Pareil, les 3 façons j'ai :

    Erreur d'execution '13': Incompatibilité de type...

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le type renvoyé par la fonction est sans doute une chaîne de caractères. Pour en être certain Msgbox TypeName(RCP(I))
    C'est tout de même curieux car MsgBox Val("12.20") renvoie bien 12,2 alors que MsgBox CDbl("12.20") renvoie bien lui Erreur 13 donc Val(RCP(I)) devrait renvoyer une valeur.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

Discussions similaires

  1. [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
  2. [XL-2010] Incompatibilité de type lors de la lecture d'une propriété
    Par ptitcool dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 22/06/2014, 12h20
  3. [C#]Type Mismatch lors de l'utilisation d'un Ocx
    Par Anthares dans le forum Développement Windows
    Réponses: 3
    Dernier message: 18/02/2011, 02h18
  4. Erreur "incompatibilité de type" lors import dans table Access
    Par spud96 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 05/01/2011, 21h40
  5. [DAO]Incompatibilité de type lors d'une concaténation
    Par mouaa dans le forum VBA Access
    Réponses: 19
    Dernier message: 06/04/2007, 10h33

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