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 :

Contourner une incompatibilité de type [XL-2000]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    544
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 544
    Par défaut Contourner une incompatibilité de type
    Bonjour,
    J'ai une formule qui devrait calculer l'année de naissance de X à partir de l'année d'un événement et de l'âge de X à ce moment-là (les 2 valeurs stockées dans des cellules de tableau XL). En arithmétique courante on fait
    année de l'événement - âge de X = année de naissance de X.
    Dans ma formule, l'opération
    Année de naissance = Cells(ligne, col1).Value - Cells(ligne, col2).Value provoque une erreur d'incompatibilité de type.
    J'ai essayé d'extraire d'abord les 2 nombres appelés Xa (l'année) et Ya (l'âge). Ca ne marche pas mieux. Voici la ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GED = GED & "2 CONT" & " " & "né vers " & (Xa - Ya) & Chr(10)
    J'ai essayé de convertir l'année de naissance (cellule au format nombre et non pas date) en integer avec la fonction CInt mais ça ne marche pas. De même en traitant les 2 nombres de la même façon. Y a-t-il une solution à ce problème ?
    Merci d'avance pour toute suggestion.
    Cordialement
    Pierre

  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,

    il s'agit de s'intéresser à deux points que nous ne voyons pas dans ton message :

    - comment sont déclarées les variables ? y compris les col et ligne
    - un jeu de valeur exemple pour le contenu des deux cellules qui permettent de réaliser ce calcul


    nous montrer la procédure complète devrait te permettre d'obtenir de l'aide plus facilement qu'avec juste cette ligne de code.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Comme j'ai 20 ans!
    debug.print DateSerial(Year(Date) - 20, Month(Date),day(Date))Bien évidemment j'ai pas compté les 1/2, 1/4 3/4

  4. #4
    Membre éclairé Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    544
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 544
    Par défaut Contourner une incompatibilité de type
    Bonjour à joe levrai et rdurupt,
    Et merci,
    Mon tableau contient des données généalogiques, des données tirées d'actes de naissance. Il a 72 colonnes et 203 enregistrements, donc je m'abstiens de le reproduire en entier !
    Le but de la sub est de transformer les données XL en un fichier texte au format standard d'échange de données généalogiques (GEDCOM, format à tags, que j'abrège en GED). A la fin le fichier est passé à Word.
    Le colonne O (No 15) contient l'année de l'événement au format AAAA (en l'occurrence une naissance).
    La colonne BC (No 55) contient l'âge d'un témoin de naissance lors de l'événement. je veux calculer son année de naissance.
    La colonne 53 contient le nom du témoin
    La colonne 54 son prénom

    Déclarations:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Public L As Integer, C As Integer
    Public Annee_Naiss As Variant  'colonne 15
    Public Aujourdhui, Xv, Yv, Zv As Variant
    Le passage du code concerné est le suivant. Il s'agit d'ajouter dans la source (au sens généalogique) les individus pour lesquels cette source apporte aussi des renseignements (en plus du nouveau-né): Père, mère, témoins.

    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
     
    '=================adjonction à tester
    GED = GED & Chr(10) & "1 TEXT Source aussi valable pour " & Chr(10)
    GED = GED & "2 CONT" & "Père: " & Cells(ligne, 23).Value & " " & Cells(ligne, 24).Value & " en vie le " & Cells(ligne, 12).Value & ", " & Chr(10)
    GED = GED & "2 CONT" & "conjoint de: " & Cells(ligne, 31).Value & " " & Cells(ligne, 32).Value & " mariage avant le " & Cells(ligne, 12).Value & Chr(10)
    GED = GED & "2 CONT" & "Mère: " & Cells(ligne, 31).Value & " " & Cells(ligne, 32).Value & " en vie le " & Cells(ligne, 12).Value & ", " & Chr(10)
    GED = GED & "2 CONT" & "conjointe de: " & Cells(ligne, 23).Value & " " & Cells(ligne, 24).Value & " mariage avant le " & Cells(ligne, 12).Value & Chr(10)
    If Cells(ligne, 55).Value = "majeur" Then
    GoTo temoin2:
    End If
    If Cells(ligne, 55).Value = "" Then
    GoTo temoin2
    End If
     
    X = Cells(ligne, 15).Value
    Xv = CVar(X)
    Y = Cells(ligne, 55).Value
    Yv = CVar(Y)
     
    temoin2:
    If Cells(ligne, 62).Value = "majeur" Then
    GoTo fin_temoin
    End If
    If Cells(ligne, 62).Value = "" Then
    GoTo fin_temoin
    End If
     
    Zv = Cells(ligne, 62).Value
     
    Annee_Naiss = Xv - Yv
    GED = GED & "2 CONT" & Cells(ligne, 53).Value & " " & Cells(ligne, 54).Value & " " & "en vie le " & Cells(ligne, 12).Value _
    & " " & "né vers " & Annee_Naiss & Chr(10)
    Annee_Naiss = Xv - Zv
    GED = GED & "2 CONT" & Cells(ligne, 60).Value & " " & Cells(ligne, 61).Value & " " & "en vie le " & Cells(ligne, 12).Value _
    & " " & "né vers " & Annee_Naiss & Chr(10)
     
    fin_temoin:
    Le code reflète plusieurs essais. Tous donnent une incompatibilté de type.

    A rdurupt: je n'ai pas bien compris l'astuce (en-dehors des vingt ans, que je n'ai plus non plus !)

    Merci d'avance, pardon pour la longueur de ce post.
    Joyeuses Pâques
    Pierre

  5. #5
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour !

    Une erreur d'incompatibilité de type ne se contourne pas, juste corriger le code car
    c'est juste une erreur de conception de débutant ou un contexte non prévu par l'auteur du code !

    Commencer par vérifier le format des cellules comme le type de données des variables.
    Par exemple une valeur numérique dans une cellule au format texte n'est donc pas une valeur numérique mais du texte …

    ______________________________________________________________________________________________________
    Je suis Paris, Charlie, Bruxelles, …

  6. #6
    Membre éclairé Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    544
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 544
    Par défaut [XL-2000] Contourner une incompatibilité de type
    Bonsoir, Marc-L.
    Bien sûr que mon vocabulaire n'est pas approprié car tu as raison, je ne vois pas non plus d'autre solution que de modifier mon code, mais comment ? J'ai déjà fait quelques tentatives. Mais d'abord je me suis assuré que les 2 champs concernés étaient au format nombre (AAAA était d'abord au format date). J'ai d'abord essayé ma formule en utilisant directement l'expression Cells(x, y).Value puis, suite à l'erreur d'incompatibilité de type, en affectant la valeur des 2 cellules à des variables de type Integer, puis de type Variant. L'erreur subsiste. Et comme je suis effectivement un débutant, je ne vois pas ce que je peux faire d'autre, d'où ma question. Merci à qui m'aidera à trouver la réponse.
    Cordialement
    Pierre

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

Discussions similaires

  1. [XL-2010] For"if and if"next - Mes ifs indiquent une incompatibilité de type?
    Par pruneenurp dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 15/09/2014, 18h03
  2. [XL-2003] MsForms incorporé à une feuille : Incompatibilité de type à la déclaration
    Par O.Courtot dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/07/2010, 07h41
  3. Incompatibilité de type avec une requête Select
    Par desilo dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 04/04/2008, 17h45
  4. "Incompatibilité de type" dans une formule
    Par Log_polmed dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 19/06/2007, 15h03
  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