Comment transformer une Fonction en sub Macro VBA

Fermé
vieuxray - Modifié par vieuxray le 31/10/2016 à 16:58
 vieuxray - 3 nov. 2016 à 07:20
Salut a tous, Forum salut



Je souhaiterai svp transformer le code VBA excel 2007 ci-dessous en une macro Sub VBA

je vous remercie de votre aide, bonne fin d'après midi a vous

Cdlt Ray


Function Majuscules(ByVal Dossier As String) As Long
Dim Fso As Object, F As Object, Txt As String, Pos As Integer

Set Fso = CreateObject("Scripting.FileSystemObject")
For Each F In Fso.GetFolder(Dossier).Files
If LCase(Right(F.Name, 4)) = ".avi" Then
Txt = F.Name
Pos = InStrRev(Txt, ".")
Txt = UCase(Left(Txt, Pos - 1)) & ".avi"
Name F.Path As Dossier & "\" & Txt
End If
Next F
Set Fso = Nothing
End Function
A voir également:

5 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
31 oct. 2016 à 17:38
Etant donné que la fonction ne retourne rien (il n'y a pas de "Majuscules=..."), il n'y a qu'à remplacer Function par Sub et virer le As long.
2
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
1 nov. 2016 à 08:43
Bonjour,

Une petite recherche sur le net:
Chaine de caractères en vba et tu tombes sur ce site:

https://silkyroad.developpez.com/VBA/ManipulerChainesCaracteres/#LI-K


ce qui donne:

Dim chaine As String
chaine = "le bal des maudits"
MsgBox StrConv(chaine, vbProperCase)


Voilà, il ne te reste plus qu'a faire une boucle sur ta colonne où tu mettras ce code

Recherche:

Boucle sur colonne en vba
1
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
2 nov. 2016 à 12:11
En suivant mes conseils tu aurais pu faire cela:

Sub For_X_to_Next_Ligne()
Dim FL1 As Worksheet, NoCol As Integer
Dim NoLig As Long, Var As Variant
    Set FL1 = Worksheets("Feuil1")
    NoCol = 1 'lecture de la colonne 1
    For NoLig = 1 To Split(FL1.UsedRange.Address, "$")(4)
        Var = FL1.Cells(NoLig, NoCol)
      Var = StrConv(Var, vbProperCase) 'on met les majuscules
     FL1.Cells(NoLig, NoCol) = Var ' on met la nouvelle chaine
    Next
    Set FL1 = Nothing
End Sub


d'après ceci:

https://excel.developpez.com/actu/47690/Boucles-pour-parcourir-une-colonne-une-ligne-une-plage-de-donnees-deux-nouvelles-methodes/


A mettre après la Sub qui supprime .AVI dans la chaine de caractère.
Il est bien entendu qu'i s'agit de la colonne A dans la Feuille 1

Bon courage

@+ Le Pivert
0
vieuxray > cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024
3 nov. 2016 à 07:20
Salut cs_Le Pivert,

Merci beaucoup pour le petit code, j'ai fait des essais et merci ca fonctionne bien et c'est rapide, en plus je suis gâter, tu m'a mis des commentaires, c'est très apprécier.

Entre temps j'ai regarder pourquoi au moment de l'affichage de la (durée) des fichiers c'est si long a s'afficher en colonne (C).

Voudrais tu svp si tu a le temps bien sur, essayer de voir pourquoi l'affichage n'ai pas plus rapide que ca.

En tout cas merci encore pour la SUB, une excellente journée a toi, ici a Rouen première gelées.

Le programme sur ci-joint est dispo pour 21 jours sur ce lien

http://www.cjoint.com/c/FKbpnzI0oPz

Cordialement Ray
0
Salut NHENRY,

Merci pour ta réponse mais autant pour moi, je me suis tromper de code je suis désoler.

Mais ca ne change rien c'est pour faire une sub macro quand même.

le but étant de mettre une MAJUSCULE devant chaque mot d'une liste de vidéos.

encore merci et désolé pour cette erreur, celui ci est le bon.

bonne soirée
Cdlt Ray



Function Majuscule_Devant_Chaque_Mot(ByVal Dossier As String) As Long
Dim Fso As Object, F As Object, Txt As String, Pos As Integer, Var As Integer

Set Fso = CreateObject("Scripting.FileSystemObject")
'NombreFichiers = FSO.GetFolder(Dossier).Files.Count

For Each F In Fso.GetFolder(Dossier).Files

If LCase(Right(F.Name, 4)) = ".avi" Then
Txt = F.Name
Pos = InStrRev(Txt, ".")
If Left(Txt, Len(Txt) - 4) = UCase(Left(Txt, Len(Txt) - 4)) Then
Txt = Application.Proper(Left(Txt, Len(Txt) - 4)) & ".avi"
ElseIf Txt = LCase(Txt) Then
Var = UCase(Left(Txt, Pos - 1))
Txt = UCase(Left(Txt, Pos - 1)) & ".avi"
End If
Name F.Path As Dossier & "\" & Txt
End If
Next F
Set Fso = Nothing
End Function
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
31 oct. 2016 à 18:42
Même réponse.
0
Salut NHenry, Salut a tous

Merci pour la réponse, j'ai essayer en suivant tes conseils d'adapter ce code mais ca ne fonctionne pas, il marchais bien sur un autre logiciel mais je n'ai plus ce programme et je n'ai pas réussi a modifier ce code pour mon besoin.

le but étant de mettre une MAJUSCULE devant (chaque mot) d'une liste de titre vidéos.

Liste plage (A1:AA) ce donnerai Ex:

le bal des maudits.avi serait remplacer par >>> Le Bal Des Maudits.avi

Te serait t'il possible svp de modifier le code en macro sub.

Merci pour ton aide, bonne journée.

Cdlt Ray
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
1 nov. 2016 à 11:19
Cela change de la demande d'origine.

Le code présenté sert à changer les noms de fichiers, pas à être utilisé dans les cellules Excel.

La plage A1:AA n'est pas valide, je pense.

2 possibilités soit faire une macro qui change le contenu des cellules ou une fonction (appelée dans une cellule avec une formule) qui retourne le nom modifié.

Dans les 2 cas, il faut que tu isoles le code de mise en forme.

Txt = F.Name
            Pos = InStrRev(Txt, ".")
            If Left(Txt, Len(Txt) - 4) = UCase(Left(Txt, Len(Txt) - 4)) Then
                Txt = Application.Proper(Left(Txt, Len(Txt) - 4)) & ".avi"
            ElseIf Txt = LCase(Txt) Then
                Var = UCase(Left(Txt, Pos - 1))
                Txt = UCase(Left(Txt, Pos - 1)) & ".avi"
            End If


Ensuite, enregistre une macro et regarde comment Excel accède aux données.
0

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

Posez votre question
Salut a vous,

Merci pour vos réponses, malgré mes efforts je n'y arrive pas, je ne comprends trop comment ca marche.

Mon programme est a base de codes trouver ici ou la puis j'arrive a mes débrouiller.

Pour la petite histoire, j'ai une liste de vidéos sur mon disque dur (H:\)
j'ai récupérer cette liste avec un code qui l'affiche dans excel 2007 puis a l'aide d'autres codes trouvés sur le net, j'essais d'adapter pour faire ce dont j'ai besoin.

J'ai lu et fait des essais mais là, c'est compliquer pour moi, 64 ans les neurones galère un peu.

Bon ce n'ai pas grave le but était d'améliorer la lisibilité d'affichage dans excel

Merci tout de même a vous, c'est sympa, je vous souhaite une très bonne après midi.

Cordialement Ray
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
1 nov. 2016 à 15:11
D'accord, comment sont affiché les noms des fichier et comment veux-tu les voir s'afficher ?
Ensuite, on peut voir pour adapter le code.
0
vieuxray > NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024
Modifié par vieuxray le 1/11/2016 à 16:51
Re NHenry,

Merci pour ton aide, c'est gentil a toi.

Je te joint le lien ci dessous pour avoir le fichier (98.2 Ko excel 2007 sous lequel je travaille, le fichier fonctionne très bien chez moi mais je n'ai surement pas tout bon.

http://www.cjoint.com/c/FKbpnzI0oPz

http://www.cjoint.com/c/FKbpnzI0oPz

(1) lance le code puis clic sur le rectangle bleu (Chargement des films) une fenêtre s'ouvre pour sélectionner le D-D ou se trouve les vidéos pour moi c'est (H:\ ) il ni a que des fichiers (.avi) sur le D-D
(2) puis le programme démarre en affichant sur la feuil1 plage (A4000) la liste des fichiers .avi
(3) puis une macro sub est appeler elle sert a effacer les noms d'extension des fichiers (.AVI)
(4) puis poursuit en affichant le poids de chaque fichier
(5) puis poursuit en affichant la durée de chaque fichier (Là c'est un peu plus long a s'afficher, je ne sais pas pourquoi ???)

j'ai mis pas mal de commentaires dans le programme en cours.
la macro sub que j'ai poster se trouve dans le module 3.

PS: Une macro Sub m'arrangerai bien si possible, je pourrai l'appeler en cas de besoin.
pour l'affichage voulu EX: dans la colonne (A) uniquement afficher sous ce format

La Guerre Des Boutons >>> chaque mot première lettre en majuscule
Le Bal Des Maudits
Etc Etc

Je remercie beaucoup pour ton aide, prends ton temps rien ne me presse.

Cdlt Ray
0