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 :

API StrFormatByteSizeW ou StrFormatByteSize ne renvoie rien


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    Par défaut API StrFormatByteSizeW ou StrFormatByteSize ne renvoie rien
    Bonjour à tous,

    J'utilise l'API

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Declare PtrSafe Function StrFormatByteSizeW Lib "shlwapi" 
                                                         (ByVal qdwLow As Long,_
                                                          ByVal qdwHigh As Long,_
                                                          pwszBuf As Any,_
                                                          ByVal cchBuf As Long) As Long
     
    Private Declare PtrSafe Function StrFormatByteSize Lib "shlwapi" Alias _
                            "StrFormatByteSizeA" (ByVal dw As Long, _
                                                  ByVal pszBuf As String, _
                                                  ByVal cchBuf As Long) As Long
    Mais mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      sSize = Space$(30)
               ....
               If MatchSpec(WFD.cFileName, fp.sFileNameExt) Then
                         lSize = WFD.nFileSizeLow + WFD.nFileSizeHigh
                         Call StrFormatByteSizeW(lSize, ByVal StrPtr(sSize), 30)
                         Call StrFormatByteSize(lSize, ByVal StrPtr(sSize), 30)...
    ne renvoie pas rien

    Merci pour votre aide

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Le premier paramètre de ta première fonction est prévu pour être typé en LonLong
    Bien que le type LongLong soit utilisé par l'application VBA elle-même (et j'en ai la preuve), il n'est pas utilisable en développement VBA.
    Tu peux essayer (sans garantie du gouvernement) de lui substituer le type Currency

    Le premier paramètre de ta deuxième fonction est prévu pour être typé en Dword !

    EDIT : et tout ce tsoin-tsoin pourquoi ? Pour simplement mettre en forme un affichage de valeur !
    Tu ne peux pas faire toi-même cette petite (vraiment petite) fonction en VBA ? Tu en es certain ?

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    Par défaut
    Si fait, j'ai ajouté une procédure de formatage mais c'était pour l'exercice...

    On ne pourrait pas utiliser un type longPtr qui est un type longlong sous 64bits.
    Merci encore unparia

    Bonjour chez toi

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    On ne pourrait pas utiliser un type longPtr qui est un type longlong sous 64bits.
    je n'en sais rien et ne vais pas perdre de temps à vérifier, alors qu'un simple calcul, y compris avec vba, fait la "chose" très facilement.

    Je te propose de regarder ce que fait ce tout petit exemple, en lieu et place de ces fonctions de l'Api de Windows :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub CommandButton1_Click()
      MsgBox affiche_joli(Range("A1").Value)
    End Sub
     
     
    Private Function affiche_joli(taille As Currency) As String
      Dim titi, titid, titio
      titi = Array("", "octets", "Kilo-octets", "Mega-octets", "Giga-octets", "Tera-octets")
      titid = Array(0, 0, 0, 0, 3, 3, 3, 6, 6, 6, 9, 9, 9, 12, 12, 12)
      titio = Array(1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5)
      affiche_joli = Format(taille / 10 ^ titid(VBA.Len(taille)), "##0.0#") & "  " & titi(titio(VBA.Len(taille)))
    End Function
    Fais varier A1 (mets-y des nombres entiers) et clique sur le bouton de commande. Tu verras.

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    Par défaut
    Merci unparia mais j'avais celle-ci

    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
    Private Function FormatFileSize(ByVal lngFileSize As Long) As String
     
      Dim x  As Integer:      x = 0
      Dim Suffix As String:  Suffix = ""
      Dim Result As Single:  Result = lngFileSize
     
      Do Until Int(Result) < 1000
         x = x + 1
         Result = Result / 1024
      Loop
     
      Result = Round(Result, 2)
     
      Select Case x
             Case 0
                  Suffix = "Bytes"
             Case 1 'KiloBytes
                  Suffix = "KB"
             Case 2 'MegaBytes
                  Suffix = "MB"
             Case 3 'GigaBytes
                  Suffix = "GB"
             Case 4 'TeraBytes
                  Suffix = "TB"
             Case 5 'PetaBytes
                  Suffix = "PB"
             Case 6 'ExaBytes
                  Suffix = "EB"
             Case 7 'ZettaBytes
                  Suffix = "ZB"
             Case 8 'YottaBytes
                  Suffix = "YB"
             Case Else
                  Suffix = "Too big to compute :)"
      End Select
      FormatFileSize = Format(Result, "#,##0.00") & " " & Suffix
     
    End Functionb
    Ou celle-ci

    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 Function MEF_Octet_Short(lgValeur As Long) As String
    '---------------------------------------------------------------------------------------
    ' Procédure : MEF_Octet_Short
    ' Auteur    : Dolphy35 - http://dolphy35.developpez.com/
    ' Modif par : joe.levrai
    '---------------------------------------------------------------------------------------
    Dim tableau, i
        tableau = Array("Oct", "Ko", "Mo", "Go")  ' stockage des unités
     
        While (lgValeur / 1024 > 1) And i < UBound(tableau)  ' itération des divisions par 1024
            i = i + 1  ' décalage de l'unité
            lgValeur = lgValeur / 1024
        Wend
     
        MEF_Octet_Short = Format(Round(lgValeur), "#,##0.00") & " " & tableau(i)
     
    End Function

Discussions similaires

  1. Fonction qui ne renvoie rien
    Par philippef dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/11/2006, 18h12
  2. [PostgreSql] requête simple qui ne renvoie rien ?
    Par tuxout dans le forum Langage SQL
    Réponses: 6
    Dernier message: 03/08/2006, 14h06
  3. fonction php qui ne me renvoie rien
    Par renaudjuif dans le forum Langage
    Réponses: 10
    Dernier message: 01/08/2006, 10h27
  4. Ma requête ne me renvoie rien
    Par dessinateurttuyen dans le forum Langage SQL
    Réponses: 8
    Dernier message: 24/07/2006, 17h42
  5. [SQL-Server] mssql_query ne renvoie rien !
    Par Sophy75 dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 06/04/2006, 10h59

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