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 la lecture d'une propriété [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2014
    Messages : 25
    Par défaut Incompatibilité de type lors de la lecture d'une propriété
    Bonjour à tous,

    Je travaille sur un fichier qui doit se mettre à jour lors de la mise à jour d'un TCD.
    Dans l'évèment Worksheet_PivotTableUpdate j'ai rédigé le code suivant (version allégée) :

    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
     
    Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
        Dim lpi As PivotItem
        Dim ws As Worksheet
        Dim i As Integer
        Dim j As Integer
        Dim champ(1 To 8) As String
     
        champ(1) = "Et"
        champ(2) = "Operation Accountable"
        champ(3) = "Operation Name"
        champ(4) = "Orderer"
        champ(5) = "Supplier Name"
        champ(6) = "Task Name"
        champ(7) = "start"
        champ(8) = "end"
     
        Set ws = Worksheets("FiltreTCD")
     
        For j = 1 To 8
            i = 1
            For Each lpi In Target.PivotFields(champ(j)).PivotItems
                If lpi.Visible Then
                    ws.Cells(i, j) = lpi.Name
                    i = i + 1
                End If
            Next lpi
        Next j
    End Sub
    Pour résumé, cette macro va, pour chacun des 8 champs filtres de mon TCD, parcourir l'ensemble des éléments, va vérifier s'ils sont filtrer (via la propriété Visible) et les écrire dans une autre feuille si c'est le cas.

    Tout fonctionne bien pour les 6 premiers champ mais cela ne tourne pas pour les deux derniers (qui sont des dates contrairement aux autres).
    En effet, lors de la lecture de la propriété Visible de lpi (ligne 23), Excel retourne l'erreur 13 : Incompatibilité de type.
    J'ai essayé de mettre un espion sur lpi et là visible est bien à True ou False mais si j'espionne directement lpi.Visible je retrouve l'erreur.

    Le problème vient sans aucun doute du fait que ces champs sont des dates mais j'ai aucune idée du fond du problème et de comment le résoudre...

    Merci d'avance

  2. #2
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 344
    Par défaut
    Je ne sais pas si ça vient de là mais ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim champ(1 To 8) As String
    Tu définis ton tableau comme un tableau de chaines de caractères.

    Comme tu le dis si bien, tes 2 derniers champs sont des dates, et non des string. Essaye donc de convertir ces champs en texte, mais je ne sais pas ce que ça va donner derrière dans ton TCD
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2014
    Messages : 25
    Par défaut
    Bonjour illight et merci de ta réponse.

    Mon tableau champ contient les noms des champs de mon TCD. Je l'initialise au début et il me permet juste de récupérer un objet PivotField à partir de son nom. A aucun endroit j'essai d'y mettre une date.

  4. #4
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour.

    C'est un bug qui a été corrigé dans Excel 2013 seulement.

    Sur le lien suivant

    http://dailydoseofexcel.com/archives...th-pivotitems/

    il y a un demo : Sub WhatThe_v2 qui dit comment arriver à modifier la propriété .Visible, mais il ne dit pas comment la lire.

    Une solution à ton problème serait de mettre les paramètres régionaux et linguisitiques de Windows à Anglais (Etats-Unis).

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2014
    Messages : 25
    Par défaut
    Merci pour ta réponse.

    Je vais devoir trouver une alternative pour voir si une date est filtrée ou non (cette appli est pour un client et je ne peux pas lui imposer de mettre sont Windows en Anglais).

    J'éditerai le sujet en résolu demain au cas où quelqu'un ait une solution à fournir ce soir.

    Merci beaucoup


    EDIT : Bon ben j'apporte la réponse. Il faut changer le format des champs date. En changeant le formant de *jj/mm/aaa vers jj/mm/aa vba a réussit à lire la propriété Visible.
    Merci Docmarti de m'avoir mit sur la piste. Quand on sait que le problème est spécifique à l'objet PivotItem et à la propriété Visible, la recherche d'une solution est plus rapide

  6. #6
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    EDIT: Ce matin, je n'arrive à reproduire ton problème que si le séparateur de date (des paramètres régionaux dans Windows) est différent de /
    Quel est le séparateur de date sur le système de ton client?

    Si le séparateur de date du système est - ou . la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pf.NumberFormat = "dd/mm/yyyy"
    provoque une erreur quand je veux lire la propriété Visible des PivotItems de type date.

    Par contre les commandes suivantes qui utilisent un séparateur de date différent de / ne causent pas cette erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     pf.NumberFormat = "dd.mm.yyyy"
     pf.NumberFormat = "dd-mm-yyyy"
     pf.NumberFormat = "dd mm yyyy"
     pf.NumberFormat = "mm dd yyyy"
     pf.NumberFormat = "mmddyyyy"

    C'est probablement pour ça que le code suivant fonctionne car il utilise comme séparateur de date le séparateur de date du système, donc "/" seulement quand le séparateur de date sur le système est "/".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sepDate = Format(Date, "/")
    FormatDate = "m" & sepDate & "d" & sepDate & "yyyy"
    pf.NumberFormat = FormatDate
    EDIT No.2 : Le code ci-dessus ne fonctionne pas si "/" est le séparateur de date du système. Car il produit la valeur "m/d/yyyy", qui est celle qui cause des problèmes lorsque attribuée à pf.NumberFormat .
    1) Il faut définir la valeur de pf.NumberFormat car la valeur par défaut, "General", occasionne des erreurs.
    2) Lorsqu'on définit pf.NumberFormat, on peut utiliser tout format autre que "m/d/yyyy" car c'est le format qui cause les erreurs
    3) Lorsqu'on définit pf.NumberFormat et que le séparateur de date dans Windows n'est pas "/", on doit utiliser dans pf.NumberFormat un séparateur de date différent de "/", sinon encore des erreurs.

    Donc ceci devrait produire un format qui élimine les erreurs 2) et 3) ci-dessus, qu'importe le paramètre de Date courte défini dans Windows:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sepDate = Format(Date, "/") ' pour éviter "/" comme séparateur si le séparateur de date dans Windows n'est pas "/"
    FormatDate = "d" & sepDate & "m" & sepDate & "yyyy" ' pour obtenir d/m/yyyy au lieu de m/d/yyyy
    pf.NumberFormat = FormatDate

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

Discussions similaires

  1. [XL-2010] Incompatibilité de type lors de l'utilisation de l'AddIn Aspentech
    Par J.Le_Roy dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 10/05/2015, 18h42
  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. 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
  4. [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
  5. Lenteur lors de la lecture d'une base Access
    Par Lio590 dans le forum Bases de données
    Réponses: 6
    Dernier message: 16/11/2005, 12h24

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