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

Résolu
cavrom Messages postés 45 Date d'inscription mercredi 20 avril 2011 Statut Membre Dernière intervention 26 juillet 2011 - 16 mai 2011 à 17:18
cavrom Messages postés 45 Date d'inscription mercredi 20 avril 2011 Statut Membre Dernière intervention 26 juillet 2011 - 17 mai 2011 à 17:05
[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

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
16 mai 2011 à 18:58
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
3
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
17 mai 2011 à 09:54
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
3
cavrom Messages postés 45 Date d'inscription mercredi 20 avril 2011 Statut Membre Dernière intervention 26 juillet 2011
17 mai 2011 à 13:51
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
3
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
17 mai 2011 à 17:04
Bonjour,

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

Mon site
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
16 mai 2011 à 19:19
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)
0
cavrom Messages postés 45 Date d'inscription mercredi 20 avril 2011 Statut Membre Dernière intervention 26 juillet 2011
17 mai 2011 à 09:27
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
0
cavrom Messages postés 45 Date d'inscription mercredi 20 avril 2011 Statut Membre Dernière intervention 26 juillet 2011
17 mai 2011 à 11:42
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
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
17 mai 2011 à 12:40
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
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
17 mai 2011 à 14:30
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
0
cavrom Messages postés 45 Date d'inscription mercredi 20 avril 2011 Statut Membre Dernière intervention 26 juillet 2011
17 mai 2011 à 14:33
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?
0
cavrom Messages postés 45 Date d'inscription mercredi 20 avril 2011 Statut Membre Dernière intervention 26 juillet 2011
17 mai 2011 à 17:05
Merci,
Bonne soirée !
0
Rejoignez-nous