XL 2016 Macro création de dossier dans répertoire suivant valeur

  • Initiateur de la discussion Initiateur de la discussion B4ST
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

B4ST

XLDnaute Nouveau
Bonjour à tous,

J'aurais besoin de votre aide précieuse pour la mise en place d 'un fichier excel comportant des macros.
Je souhaiterais pouvoir créer un dossier et enregistrer dans ce dernier le fichier sur lequel je travaille dans un dossier défini suivant la valeur d 'une cellule.
Le dossier et le nom de fichier se nommant avec la valeur concaténée d 'une autre cellule.
En plus de cette opération j 'aimerais également que les lignes d 'une "feuill" s 'affichent et se masquent suivant la valeur saisie dans une autre "feuill".
Ci-joint un classeur reprenant plus clairement ces explications.

Jusqu à la , j ai réussi grâce vos contributions sur le forum à créer un dossier ainsi qu 'à enregistrer le fichier sous un nom de dossier, mais pas à aller plus loin en conditionnant la valeur d 'une cellule à un dossier existant.

En vous remerciant par avance,

Bastien
 

Pièces jointes

Bonjour à tous,

J'aurais besoin de votre aide précieuse pour la mise en place d 'un fichier excel comportant des macros.
Je souhaiterais pouvoir créer un dossier et enregistrer dans ce dernier le fichier sur lequel je travaille dans un dossier défini suivant la valeur d 'une cellule.
Le dossier et le nom de fichier se nommant avec la valeur concaténée d 'une autre cellule.
En plus de cette opération j 'aimerais également que les lignes d 'une "feuill" s 'affichent et se masquent suivant la valeur saisie dans une autre "feuill".
Ci-joint un classeur reprenant plus clairement ces explications.

Jusqu à la , j ai réussi grâce vos contributions sur le forum à créer un dossier ainsi qu 'à enregistrer le fichier sous un nom de dossier, mais pas à aller plus loin en conditionnant la valeur d 'une cellule à un dossier existant.

En vous remerciant par avance,

Bastien
Bonjour,
Une piste à creuser
Dans l'exemple il est supposé que ==> "c:\dossiers\perso\" existe
VB:
Sub creationDossier()
    Dim Chemin$
    If [b4] = "" Or [b5] = "" Or [b7] = "" Then MsgBox "Fichier non enregistré." & vbLf & "Saisie manquante.", , "Information": Exit Sub
    If Not CarFichInterdit([e4]) Then
        Chemin = "C:\dossiers\perso\"
        On Error Resume Next
        Chemin = Chemin & [b7] & "\"
        MkDir (Chemin)
        On Error GoTo 0
        ActiveWorkbook.SaveCopyAs Chemin & [e4] & ".xlsm"
        Application.EnableEvents = False
        [b4:b7] = "": Rows("8:11").Hidden = True
        Application.EnableEvents = True
    End If
End Sub

Public Function CarFichInterdit(F$) As Boolean
'****  Origine Roland M  ****
    CarFichInterdit = False
    Car$ = "< > \ / | ? : * . " & Chr(34)
    For I = 1 To 10
        C$ = Choose(I, "<", ">", "\", "/", "|", "?", ":", "*", ".", Chr(34))
        If InStr(F$, C$) Then
            MsgBox "Fichier non enregistré." & vbLf & "Dans un nom de fichier," & vbLf & "les caractères suivants sont interdits !" & vbLf & vbLf & Car$, vbCritical, "Information"
            CarFichInterdit = True
        End If
    Next
End Function

**Hello mapomme
 

Pièces jointes

Dernière édition:
Bonjour,

Merci beaucoup pour ces retours rapide.
J'ai essayé vos 2 codes qui fonctionnent parfaitement mais il ne me permettent pas d'enregistré comme je l 'espérais ( je visualise la ou je souhaite aller mais plus difficile à expliquer ). j 'ai tenté de m 'appuyer dessus pour y arriver mais sans succès, j 'y suis presque mais je n 'arrive pas a aller au bout.
ci-joint capture arborescence du répertoire actuel dans lequel j 'aimerais enregistrer et un exemple fait manuellement du résultat à obtenir.

Concernant le masquage des lignes j' ai copié le code dans la feuil2, et définis les lignes, mais je ne sais pas conditionner à la valeur de B7 en feuil1

Cordialement,
Bastien
 

Pièces jointes

bonjour @B4ST,
ci-joint capture arborescence du répertoire actuel dans lequel j 'aimerais enregistrer et un exemple fait manuellement du résultat à obtenir.

Peut-être dans le fichier joint ? (pour la première partie)
 

Pièces jointes

Dernière édition:
Bonjour B4ST, le forum
vous pouvez tester ça.
Créer un module et placer ce code de dans
VB:
Function Newfolder(Chemin As String) As Boolean
On Error Resume Next
Newfolder = GetAttr(Chemin) And vbDirectory
    If Newfolder = True Then
        Exit Function
    Else
        MkDir (Chemin)
    End If
End Function
Puis fait d'appel à la fonction
VB:
Sub test()
Call Newfolder("C:\New") ' créer un dossier (New) dans la disque C:\
 Call Newfolder("C:\New\Fichiers")  'créer un sous dossier (fichiers) dans le dossier (New)
 Call Newfolder("C:\New\Sauvegarde") 'créer un sous dossier(sauvegarde) dans le dossier(New)
End Sub
 
bonjour @B4ST,


Peut-être dans le fichier joint ? (pour la première partie)

Bonsoir Mapomme,

suite test , erreur , il ne trouve pas de chemin.
En modifiant légèrement ; ça m'a crée un : /commune / "dossier avec nom E4"/ et dedans le fichier.
il ne va pas se creer sous la commune existante et correspondant à B7 ( il crée un nouveau dossier du même nom dans /perso ).

Cordialement,

ba
Bonjour B4ST, le forum
vous pouvez tester ça.
Créer un module et placer ce code de dans
VB:
Function Newfolder(Chemin As String) As Boolean
On Error Resume Next
Newfolder = GetAttr(Chemin) And vbDirectory
    If Newfolder = True Then
        Exit Function
    Else
        MkDir (Chemin)
    End If
End Function
Puis fait d'appel à la fonction
VB:
Sub test()
Call Newfolder("C:\New") ' créer un dossier (New) dans la disque C:\
Call Newfolder("C:\New\Fichiers")  'créer un sous dossier (fichiers) dans le dossier (New)
Call Newfolder("C:\New\Sauvegarde") 'créer un sous dossier(sauvegarde) dans le dossier(New)
End Sub

Bonsoir,

merci pour le principe du code, mais je n 'arrive pas avec ce dernier à conditionner la création et classement suivant valeur de la cellule qui m 'intéresse.

cordialement,
bastien
 

Pièces jointes

Par curiosité, peux tu nous en dire un peu plus sur comment et dans quelles circonstances se produisait ton erreur ?
Bonjour,

Au lancement de la macro erreur suivante :
erreur.JPG
erreur1.JPG


Nb: le lecteur et répertoire sont bien identiques à tes captures et celui du code.



Cordialement,

Bastien
 
Bonjour,
Une piste à creuser
Dans l'exemple il est supposé que ==> "c:\dossiers\perso\" existe
VB:
Sub creationDossier()
    Dim Chemin$
    If [b4] = "" Or [b5] = "" Or [b7] = "" Then MsgBox "Fichier non enregistré." & vbLf & "Saisie manquante.", , "Information": Exit Sub
    If Not CarFichInterdit([e4]) Then
        Chemin = "C:\dossiers\perso\"
        On Error Resume Next
        Chemin = Chemin & [b7] & "\"
        MkDir (Chemin)
        On Error GoTo 0
        ActiveWorkbook.SaveCopyAs Chemin & [e4] & ".xlsm"
        Application.EnableEvents = False
        [b4:b7] = "": Rows("8:11").Hidden = True
        Application.EnableEvents = True
    End If
End Sub

Public Function CarFichInterdit(F$) As Boolean
'****  Origine Roland M  ****
    CarFichInterdit = False
    Car$ = "< > \ / | ? : * . " & Chr(34)
    For I = 1 To 10
        C$ = Choose(I, "<", ">", "\", "/", "|", "?", ":", "*", ".", Chr(34))
        If InStr(F$, C$) Then
            MsgBox "Fichier non enregistré." & vbLf & "Dans un nom de fichier," & vbLf & "les caractères suivants sont interdits !" & vbLf & vbLf & Car$, vbCritical, "Information"
            CarFichInterdit = True
        End If
    Next
End Function

**Hello mapomme

Bonsoir,

Suivant votre modèle de masquage de ligne la Feuil1 , j 'ai tenté de le reprendre pour l appliquer sur Feuil2 avec code ci-dessous.

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Worksheets("feuil1").Cells(b7)) Is Nothing Then Exit Sub
    Application.ScreenUpdating = False
    Rows("2:100").Hidden = True
    Select Case Target.Value
    Case "Paris"
        Rows("2:15").Hidden = False
    Case "Lyon"
        Rows("16:25").Hidden = False
    Case "Marseille"
        Rows("26:40").Hidden = False
    Case "Bordeaux"
        Rows("41:100").Hidden = False
    End Select
End Sub

Auriez-vous la correction à apporter pour qu 'il fonctionne ?

en vous remerciant par avance

bastien
 

Pièces jointes

Bonsoir,

Suivant votre modèle de masquage de ligne la Feuil1 , j 'ai tenté de le reprendre pour l appliquer sur Feuil2 avec code ci-dessous.

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Worksheets("feuil1").Cells(b7)) Is Nothing Then Exit Sub
    Application.ScreenUpdating = False
    Rows("2:100").Hidden = True
    Select Case Target.Value
    Case "Paris"
        Rows("2:15").Hidden = False
    Case "Lyon"
        Rows("16:25").Hidden = False
    Case "Marseille"
        Rows("26:40").Hidden = False
    Case "Bordeaux"
        Rows("41:100").Hidden = False
    End Select
End Sub

Auriez-vous la correction à apporter pour qu 'il fonctionne ?

en vous remerciant par avance

bastien
Re...
je n'ai pas écrit ceci
If Intersect(Target, Worksheets("feuil1").Cells(b7)) Is Nothing Then Exit Sub
mais cela
If Intersect(Target, [b7]) Is Nothing Then Exit Sub
Ensuite to code
Rows("2:100").Hidden = True
commence par masquer les lignes de 2 à100
Tu n'as donc plus aucune chance de pourvoir accéder à la cellule B7,
Sauf si tu as selectionné Paris qui Re-affiche par Rows("2:15").Hidden = False
En aucun cas la ligne 7 ne doit figurer dans la plage à masquer
Maintenant, c'est à toi de voir ce qui doit être masqué ou non
 

Pièces jointes

Dernière édition:
Re...
je n'ai pas écrit ceci
If Intersect(Target, Worksheets("feuil1").Cells(b7)) Is Nothing Then Exit Sub
mais cela
If Intersect(Target, [b7]) Is Nothing Then Exit Sub
Ensuite to code
Rows("2:100").Hidden = True
commence par masquer les lignes de 2 à100
Tu n'as donc plus aucune chance de pourvoir accéder à la cellule B7,
Sauf si tu as selectionné Paris qui Re-affiche par Rows("2:15").Hidden = False
En aucun cas la ligne 7 ne doit figurer dans la plage à masquer
Maintenant, c'est à toi de voir ce qui doit être masqué ou non


Bonsoir,

Ton code me convient parfaitement , mais en fait j 'ai besoin qu 'il s' applique dans l'onglet " feuil2" suivant la valeur que je met dans la cellule B7 de la "feuil1", c 'est pour cela que je l 'avais recopier dans le code de la feuil2 en tentant de renvoyer vers cellule B7 de la feuil1 :
1576435884873.png

Cordialement,

Bastien
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour