[Catégorie encore modifiée VB6 -> VBA] taille fichier VB6 [Résolu]

Signaler
Messages postés
45
Date d'inscription
mercredi 20 avril 2011
Statut
Membre
Dernière intervention
26 juillet 2011
-
Messages postés
45
Date d'inscription
mercredi 20 avril 2011
Statut
Membre
Dernière intervention
26 juillet 2011
-
[b]Bonjour à tous ,
j'ai créé dans une interface un bouton permettant de parcourir mes fichiers afin d'en sélectionner un. Le chemin et le nom du fichier s'affichent dans deux textbox respectives. J'aimerais qu'une troisième textbox affiche la taille du fichier.
Ensuite, j'aimerais que suivant la valeur de la taille du fichier, il soit accepté ou non ( taille max 500 Ko), lors du clique d'un bouton "send", que j'ai déjà créé.
Pourriez vous m'éclairer? Je travaille sous Excel 2000.
Pour l'instant mon code est :

Private Sub CommandButton1_Click()

Dim NAO As String

NAO = Application.GetOpenFilename

For i = Len(NAO) To 1 Step -1
If Mid(NAO, i, 1) "" Then lendossier i: GoTo suite
Next
suite:
TextBox1.Value = Mid(NAO, 1, lendossier - 1)
TextBox2.Value = Mid(NAO, lendossier + 1, (Len(NAO) + 1) - lendossier)

End Sub

Merci de votre aide,
Cavrom
/b

11 réponses

Messages postés
14723
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
17 septembre 2020
144
Bonjour,

Pour récupérer la taille d'un fichier, rien qu'une recherche sur Google est largement suffisante.

Sinon, le GOTO est à EVITER le plus possible (sauf On Error bien entendu) dans ton cas, un Exit For est suffisant.

Sinon pour une question de lisibilité, on évite les IF en une ligne quand on doit exécuter plusieurs instruction, utilises la syntaxe :
If ... Then
..
End If

Mon site
Messages postés
14723
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
17 septembre 2020
144
Bonjour,

Ton code est un mélange d'éléments sans cohérence.

Déjà, je vois :
For
If
Next
End If

On ne peut pas fermer un bloc avant de fermer ceux contenus.

Ca doit donner :
For
If
End If
Next

Ton Goto est toujours là alors que je t'ai dit de le remplacer par un exit for.

Ensuite, à la fin, tu fais
If
Else

Mais pas en End If

Qu'est sensé faire
GO = Application.GetFileLen
?

De plus pourquoi l'avoir mis en chaine et pas en numérique? car tu l'utilises comme tel.

Car ensuite, tu appelle une fonction GO (déjà, évite les doublons de noms, ça complexifie la lecture) qu'est-elle sensé faire ?

Pour savoir comment utiliser les fonctions que t'a suggéré Jack, un tour dans l'aide devrait t'éclairer.

Voici une suggestion de présentation :
Dim NAO As String
Dim i as Long

NAO = Application.GetOpenFilename
i=InstrRev(NAO,"")
if i>0 then
TextBox1.Value=Left$(NAO,i-1)
TextBox2.Value=Mid$(NAO,i+1)
end if

textebox3.Value=FileLen(NAO)


Mon site
Messages postés
45
Date d'inscription
mercredi 20 avril 2011
Statut
Membre
Dernière intervention
26 juillet 2011

Je ne savais pas comment remplacer Go To, donc j'ai juste à les remplacer par Exit ... ? Si oui, ça va me faciliter la vie!
En tout cas merci pour votre aide, pb résolu !
Bonne journée à tous.

Rappel du code, pour les personnes que ça pourrait aider ultérieurement :
Private Sub CommandButton1_Click()

Dim NAO As String
Dim i As Long

NAO = Application.GetOpenFilename
i = InStrRev(NAO, "")

If i > 0 Then
    TextBox1.Value = Left$(NAO, i - 1)
    TextBox2.Value = Mid$(NAO, i + 1)
End If

TextBox3.Value = FileLen(NAO)

If Val(TextBox3) > 256000 Then  '
  MsgBox "la taille du fichier dépasse 250ko"
  TextBox1 = ""   ' permet de réinitialiser les TextBox
  TextBox2 = ""
  TextBox3 = ""
Else
End If
End Sub
Messages postés
14723
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
17 septembre 2020
144
Bonjour,

Windows t'affiche des ko qui sont en fait des kio, je crois que Linux affiche en kio aussi (à vérifier).

Mon site
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
Salut

Le code que tu as écrit te renvoi le nombre de lettre du nom du fichier, et pas sa taille.
Taille d'un fichier de moins d'1Go : FileLen("C:\Le fichier.txt")

Les instructions InstrRev, Left$ et Mid$ te seraient très pratique pour remplacer cette horrible boucle.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
45
Date d'inscription
mercredi 20 avril 2011
Statut
Membre
Dernière intervention
26 juillet 2011

Bonjour à vous !
Je comprends bien mais je n'arrive pas à mettre en forme :
Pour l'instant je me retrouve avec un code tel que :

Private Sub CommandButton1_Click()

Dim NAO As String, GO As String
NAO = Application.GetOpenFilename
GO = Application.GetFileLen
For i = Len(NAO) To 1 Step -1
If Mid(NAO, i, 1) "" Then lendossier i: GoTo suite
Next
suite:
TextBox1.Value = Mid(NAO, 1, lendossier - 1)
TextBox2.Value = Mid(NAO, lendossier + 1, (Len(NAO) + 1) - lendossier)
End If


   If GO(sPathFile) = INVALID_FILE_ATTRIBUTES Then
        GO = -1
    Else
      GO = FileLen(sPathFile)
    textebox3.Value = GO
End Sub

Problème: c'est brouillon et surtout, ça ne marche pas ! Je suis bien consciente de mes lacunes. Je ne saurai pas utiliser les trois instructions citées précédemment. Qu'écriveriez vous ?
De plus, je souhaite placer un message d'erreur qui s'afficherai dans une MsgBox, dans le cas où la taille du fichier dépasserais 500 Ko. Une idée, une piste?
Merci à vous et bonne journée.
Cavrom
Messages postés
45
Date d'inscription
mercredi 20 avril 2011
Statut
Membre
Dernière intervention
26 juillet 2011

Je n'avais pas penser à l'exprimer en numérique.
GO n'était pas une fonction, mais devait être la variable correspondant à la taille du fichier (en effet peu judicieux).
Ce code marche très bien, et la taille s'affiche correctement (juste pour info il y avait une petite faute dans "TextBox3").
Je cherche maintenant à établir une boucle If, me permettant, si le fichier est inférieur à 500 ko, de continuer comme si de rien n'était, mais s'il dépasse, d'afficher une MsgBox "la taille du fichier dépasse 500ko". Je pensais à un code du style :

If TextBox3.Value>105200 Then     '500 ko = 105200 o
MsgBox("la taille du fichier dépasse 500ko", 0,"taille fichier")

If TextBox3.Value<105200 Then Go To End If
End If


Je pense que cela est faux, mais en quoi?
Encore merci de votre aide,
Cavrom
Messages postés
14723
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
17 septembre 2020
144
Bonjour,

Evite les comparaisons entre entiers et texte, c'est pas terrible, préfères utiliser la valeur source.

Sinon, ARRETE d'utiliser GOTO à tout bout de champ.
Ca fait un code peu lisible et potentiellement instable.
La seul exception à cela c'est pour la gestion d'erreur : On Error Goto

Pour sortir de la Sub : Exit Sub
Sinon, dis qu'est-ce que ça doit faire.

Mon site
Messages postés
14723
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
17 septembre 2020
144
Bonjour,

Si le pb est résolu, marque en "Réponse acceptée" le ou les messages qui t'ont aidés.

Sinon concernant un détail :
1ko=1000octets
1kio=1024 octets
1Mo=1000 ko
1Mio=1024kio


Mon site
Messages postés
45
Date d'inscription
mercredi 20 avril 2011
Statut
Membre
Dernière intervention
26 juillet 2011

Ah c'est donc ça ! Donc là dans mon code ce sont bien des octets qui sont exprimés? Et lorsque je clique sur les propriétés d'un fichier, sa taille m'est donnée en ko ou kio?
Messages postés
45
Date d'inscription
mercredi 20 avril 2011
Statut
Membre
Dernière intervention
26 juillet 2011

Merci,
Bonne soirée !