Changer nom de classeur dans VBAproject

CMoa

XLDnaute Occasionnel
Bonjour le Forum

Je cherche à remplacer le nom de plusieurs classeurs dans une Macro.

Workbooks("tata 2009.xls")

En fait je cherche l'équivalent de "remplacer" dans l'éditeur VBA pour modifier uniquement la dernière partie du nom: "2009".

Cette valeur est connue et contenue dans textbox mais je ne sais pas la renvoyer vers module de vba.

textbox1=2008 donc remplacer tous les noms contenant "tata 2009.xls" en "tata 2008.xls".
textbox1=2010 donc remplacer tous les noms contenant "tata 2009.xls" en "tata 2010.xls".
J'espère avoir été clair et peut-être ya-t-il une autre solution + simple ?
Merci pour votre aide.
 

CMoa

XLDnaute Occasionnel
Re : Changer nom de classeur dans VBAproject

re
peut-être une autre explication de ce que je souhaite obtenir:
voici une partie de macro où je souhaite changer le nom des classeurs en fonction de la valeur contenue dans la textbox8:
..........
With Workbooks("zaza 2009.xls")
.VBProject.VBComponents.Import NomFichModule
End With
..........
J'ai essayé avec workbooks "zaza" & textbox8.value & ."xls"
mais j'obtiens une erreur d'éxécution.
 

smotty

XLDnaute Occasionnel
Re : Changer nom de classeur dans VBAproject

A quoi ressemples exactement les noms de fichier?

Plusieurs solution:

Si tu connais la valeur à remplacer, utilise la fonction: replace() en vba.

si cette valeur n'est pas connue, le code que je t'ai donné fonctionne, je viens de le tester, voici un aménagement du code au cas où tu aurais plusieurs espaces. Si tu as un espace entre le nom et "annee.xls", voici un aménagement du code précédent.

'séparation du nom du fichier et de Annee.xls
tabT=split(NomFichier)

'remplacement de "Annee.xls" par la nouvelle année
tabT(ubound(tabtT))=Annee & ".xls"

'remise en forme du nom de fichier
NouveauNom=join(TabT," ")

En espérant que ça t'aidera.

A+
 

CMoa

XLDnaute Occasionnel
Re : Changer nom de classeur dans VBAproject

Bonsoir à tous(tes)
Personne ne sait modifier une année récupérée dans un textbox?
AVANT:
la textbox8=2009
..........
With Workbooks("zaza 2008.xls")
.VBProject.VBComponents.Import NomFichModule
End With
APRES:
..........
With Workbooks("zaza 2009.xls")
.VBProject.VBComponents.Import NomFichModule
End With

Après m'être trituré l'esprit pour essayer de changer le nom d'un classeur(année) dans vba,sans succès,Merci pour l'aide.
 
Dernière édition:

smotty

XLDnaute Occasionnel
Re : Changer nom de classeur dans VBAproject

Bon dernière tentative,

voici une fonction testée également et qui fonctionne quel que soit le nom de fichier terminant par "annee.xls"

Function ChangerAnnee(ByVal Nomfichier As String, ByVal NewAnnee As String) as String
Dim l As Integer
Dim strFichier, StrA As String

l = Len(Nomfichier)

strFichier = Left(Nomfichier, l - 4)
StrA = Right(strFichier, 4)

ChangerAnnee = Replace(Nomfichier, StrA, NewAnnee)
End Function

Elle fonctionne très bien chez moi, il suffit d'envoyer en parametre le nom du fichier et l'année (en string) et elle te retourne le nom de fichier modifié.

Tu remarqueras que j'ai utilisé la fonction replace():p

PS: les codes que je t'ai envoyés fonctionne, il suffit juste de les adapter légèrement si besoin.

Bonne soirée

Smotty
 

CMoa

XLDnaute Occasionnel
Re : Changer nom de classeur dans VBAproject

Bonjour smotty et le Forum

Tout d'abord un grand merci pour l'intérêt et le temps que tu as passé à essayer de résoudre mon souci.

Ensuite j'ai récupéré ta macro ,mais soit je ne sais pas la faire fonctionner soit elle ne correspond pas à ce que je cherche à faire(manque de clarté dans l'exposé de mon problème).

Alors pour être sûr que j'ai bien exposé mon problème:
Je cherche un moyen de changer des noms de classeurs contenus dans des modules VBA.Ces noms sont connus d'avance et la seule variante est l'année qui se trouve dans une textbox.

Pour résumer,voici ce que j'ai dans mes modules:
With Workbooks("zaza 2009.xls")
.VBProject.VBComponents.Import NomFichModule
End With
et je voudrais remplacer la valeur en rouge par la valeur contenue dans une textbox(la 8) dans mes modules.

Pour finir ,j'ai bien essayé de renomer comme ceci mais hélas sans succès:
"zaza " & textbox8.value & ".xls"
Bonne journée
 
G

Guest

Guest
Re : Changer nom de classeur dans VBAproject

Bonjour CMoa,

voici une fonction pour Remplacer une chaine dans tous les modules de codes du classeur.

Un simple Contrôl+H serait tout aussi bien.

A utiliser avec précaution.
Appeler comme ceci:


RemplacerTexteDansCodeModule "zaza 2008.xls", "zaza 2009.xls"

Code:
Sub RemplacerTexteDansCodeModule (ByVal chRecherche As String, ByVal chRemplace As String)
    Dim i As Integer, Ligne As String
    Dim x As Long
    Dim LigDebut As Integer, NbrLig As Integer
    Dim VBComp As Object
    For Each VBComp In ActiveWorkbook.VBProject.VBComponents
        With VBComp.CodeModule
            x = .CountOfLines
            For i = 1 To x
                If InStr(1, .Lines(i, 1), chRecherche, vbTextCompare) Then
                    Ligne = .Lines(i, 1)
                    Ligne = Replace(Ligne, chRecherche, chRemplace)
                    .ReplaceLine i, Ligne
                End If
            Next i
        End With
    Next
End Sub

A+
 
Dernière modification par un modérateur:

CMoa

XLDnaute Occasionnel
Re : Changer nom de classeur dans VBAproject

Bonjour Hasco
Merci pour ton aide mais cette possibilité m'est donnée dans excel VBA pour remplacer une partie de texte dans tous les modules.
Ce que je voudrais c'est uniquement récupérer la valeur contenue dans la textbox8 et la mettre dans les modules.
merci encore et bonne journée.
 
G

Guest

Guest
Re : Changer nom de classeur dans VBAproject

Re CMoa,

On est bien dans ce cas là Non? Ou alors j'ai mal compris.

RemplacerTexteDansCodeModule "zaza 2009.xls", textbox8.value

En faisant attention à ce que Textbox8 ne soit pas vide.

A+
 

CMoa

XLDnaute Occasionnel
Re : Changer nom de classeur dans VBAproject

:)Re Hasco; le Forum
Merci pour ton aide ainsi que Smotty qui m'a mis sur la voie avec:
"zaza " & textbox8.value & ".xls"
qui donne en réalité:
"zaza " &" "& UserForm1.textbox8.value &" "& ".xls"
Il ne me manquait que les espaces et le nom du Userform.

Merci à tous les deux et bonne soirée.
 

Discussions similaires

Statistiques des forums

Discussions
314 450
Messages
2 109 724
Membres
110 552
dernier inscrit
jasson