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 :

Déterminer le type de donnée stockée dans une cellule [XL-2019]


Sujet :

Macros et VBA Excel

  1. #1
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 410
    Billets dans le blog
    3
    Par défaut Déterminer le type de donnée stockée dans une cellule
    Bonjour,

    J'essaie d'analyser le contenu de cellules et j'aimerais faire un code VBA qui arrive a déterminer le type de données le plus probable stocké dans la cellule
    Les types différenciés que je voudrais identifier sont :
    Type Texte
    Type Nombre entier
    Type Nombre décimal
    Type Date (sans heure)
    Type Heure (sans date)
    Type Date Heure

    Je pensais commencer par analyser le format de cellule appliqué à la cellule, et si le format est Standard, analyser la valeur stockée
    Je me demandais si je me compliquais la vie et qu'il y avait une méthode magique dont j'ignorais l'existence, ou si ça vous semble cohérent comme approche

    Merci

  2. #2
    Invité de passage
    Homme Profil pro
         ​​​  
    Inscrit en
    Décembre 2025
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité :      ​​​  

    Informations forums :
    Inscription : Décembre 2025
    Messages : 21
    Par défaut
    Bonjour,

    Pourquoi VarType n'a pas marché ou tu veux convertir les données à partir du texte brute

  3. #3
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 410
    Billets dans le blog
    3
    Par défaut
    Bonjour,

    non, si les données sont en texte brut, je veux que ça soit considéré comme du texte
    ce qui m'intéresse c'est la façon dont la cellule l'interprète
    vartype est intéressant, merci,
    mais vartype refait une conversion, j'aurais aimé savoir le type déjà interprété par la cellule
    et vartype a des limites (ça pourrait être une bonne base tout de même)
    vartype renvoie date pour les dates seules et les date heure
    vartype renvoie nombre décimal pour les heures seules

  4. #4
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 410
    Billets dans le blog
    3
    Par défaut
    Re,

    mais vartype refait une conversion
    Pour être plus précis, il n'y a pas de type heure en VBA, bien qu'Excel semble interpréter les heures correctement
    Donc on a un petit décalage de type de ce côté là

  5. #5
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 634
    Par défaut
    bonjour,
    tu es sous quelle système d'exploitation, windows, Mac ?

    tu peux fournir un fichier annonimisé ?

  6. #6
    Membre émérite Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 541
    Par défaut
    Bonjour à tous,
    C'est possible avec une petite fonction qui utilise la fonction VBA 'TypeName'

    Pour la fonction TypeName c'est par ici...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function GetTypeOff(cellule As Range) As Variant
        If cellule.Value <> vbNullString Then
            GetTypeOff = TypeName(cellule.Value)
        End If
    End Function
    Nom : EXCEL_o5cQzVu3ZK.png
Affichages : 84
Taille : 5,3 Ko
    Jean-Paul sous Office 365 et Windows 10/11 (Intel I7 16Go)

    Si vous avez trouvé réponse à votre question penser à la passer en :resolu: Vous avez aimé la discussion alors un :plusser: fait toujours plaisir.
    Le savoir n'a de valeur que s'il est partagé.
    La vérité de demain se nourrit de l'erreur d'hier. Antoine de Saint-Exupéry

  7. #7
    Invité de passage
    Homme Profil pro
         ​​​  
    Inscrit en
    Décembre 2025
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité :      ​​​  

    Informations forums :
    Inscription : Décembre 2025
    Messages : 21
    Par défaut
    Il est très difficile pour reconnaître le type Time qu'à part le nombre format qui est enregistré comme double.
    donc soit cell.NumberFormat
    ou évaluer la formule Cellule("format'), pour récupérer la catégorie du format
    MsgBox Evaluate("=CELL(""format"",A3)")

  8. #8
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 410
    Billets dans le blog
    3
    Par défaut
    Bonjour,

    Merci de vos réponses
    tu es sous quelle système d'exploitation, windows, Mac ?
    Windows 10
    Fichier joint (juste des cellules avec les différents types que j'aimerais identifier)

    TypeName a les mêmes résultats que VarType,
    pas de différenciation Entier/Décimal (ça va pas trop difficile à compléter par des tests)
    pas de différentiation Date/Date Heure (ça va aussi)
    pas de différentiation Décimal/Heure (là je vais être obligé de lire le Numberformat de la cellule, je pense)
    Fichiers attachés Fichiers attachés

  9. #9
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 410
    Billets dans le blog
    3
    Par défaut
    Re,

    Voilà ce que ça donne (ajouté les booléens, vides et une catégorie autre)
    Merci de vos propositions qui m'ont mis sur la voie

    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
    Enum TypCol
        EstVide = -1
        EstTexte = 0
        EstEntier = 1
        EstDec = 2
        EstDate = 3
        EstHeure = 4
        EstDateHeure = 5
        EstBooleen = 6
        EstAutre = 7
    End Enum
     
    Function AnalyseTypeCel(Cellule As Range) As TypCol
        If VarType(Cellule.Value) = 10 Then 'message d'erreur
            AnalyseTypeCel = EstAutre
        Else
            If Cellule.Value <> "" Then
                Select Case VarType(Cellule.Value)
                    Case 5 'Décimal
                        If Int(Cellule.Value) = Cellule.Value Then
                            AnalyseTypeCel = EstEntier
                        Else
                            If Cellule.NumberFormat Like "*h*" Then
                                AnalyseTypeCel = EstHeure
                            Else
                                AnalyseTypeCel = EstDec
                            End If
                        End If
                    Case 7 'Date
                        If Int(Cellule.Value) = Cellule.Value Then
                            AnalyseTypeCel = EstDate
                        Else
                            AnalyseTypeCel = EstDateHeure
                        End If
                    Case 8 'Texte
                        AnalyseTypeCel = EstTexte
                    Case 11 'Booleen
                       AnalyseTypeCel = EstBooleen
                    Case Else
                       AnalyseTypeCel = EstAutre
                End Select
            Else
                AnalyseTypeCel = EstVide
            End If
        End If
    End Function

  10. #10
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 634
    Par défaut
    bonjour,
    Valeur Constante Type
    0 vbEmpty Non initialisé
    1 vbNull Null
    2 vbInteger Integer (16 bits)
    3 vbLong Long (32 bits)
    4 vbSingle Single
    5 vbDouble Double
    6 vbCurrency Currency
    7 vbDate Date
    8 vbString String
    9 vbObject Object
    10 vbError Erreur Excel
    11 vbBoolean Boolean
    12 vbVariant Variant
    13 vbDataObject DataObject
    14 vbDecimal Decimal (dans Variant)
    17 vbByte Byte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
    Debug.Print MyType(ActiveCell), MyType(ActiveCell, True)
    End Sub
    Function MyType(Cellule As Range, Optional txt As Boolean)
    Dim Tp: Tp = Array(" Non initialisé", "Null", "Integer", "Long", "Single", "Double", "Currency", "Date", "String", "Object", "Erreur Excel", "Boolean ", "Variant ", "DataObject", "Decimal (dans Variant) ", "Byte", "LongLong (VBA 64 bits) ")
     Select Case VarType(Cellule.Value)
        Case 5: MyType = IIf(Int(Cellule) = Cellule, 2, 5)
        Case Else: MyType = VarType(Cellule.Value)
     End Select
     If txt Then MyType = Tp(MyType)
    End Function

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/04/2024, 21h34
  2. [XL-2010] Ouvrir un fichier dont le chemin variable est stocké dans une cellule.
    Par Binarys dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/03/2017, 11h35
  3. test d'une valeur stocké dans une table
    Par EssaiEncore dans le forum ASP
    Réponses: 3
    Dernier message: 18/02/2005, 12h39
  4. Réponses: 3
    Dernier message: 21/09/2004, 08h35
  5. changement de type pour un champ dans une table
    Par Missvan dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 23/02/2004, 16h26

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