Création/nomination d'un dossier/fichier selon une variable

Résolu/Fermé
Cayl93 Messages postés 6 Date d'inscription lundi 28 novembre 2016 Statut Membre Dernière intervention 11 janvier 2017 - Modifié par Cayl93 le 28/11/2016 à 23:04
Cayl93 Messages postés 6 Date d'inscription lundi 28 novembre 2016 Statut Membre Dernière intervention 11 janvier 2017 - 5 déc. 2016 à 17:32
Bonjour à tous!

Je commence à apprendre le VBA afin de créer des applications pour mon travail et présentement, je suis coincé:

Dans une feuille, je souhaite lorsqu'on fait un double clique sur une case de la colonne G et qu'il y a le mot «Faire» dans celle-ci, que plusieurs onglets masqués du classeur soient enregistrer dans un nouveau classeur dans un nouveau dossier et que le nom du nouveau classeur et du nouveau dossier soit définit par la valeur de la cellule sur la même ligne mais dans la colonne C.

Je ne sais pas si je suis claire?
Voici en étape ce que je voudrais faire:
1. Double clique sur une case;
2. Vérifier si le mot «Faire» est dans la cellule;
3. Si oui, démasquer les onglets vises;
4. Copier les onglets démasqués;
5. Créer le nouveau dossier et le nommer selon la case C de la même ligne;
6. Créer le nouveau classeur et le nommer selon la case C de la même ligne;
7. Masquer les onglets démasqués.

Merci à l'avance! :)
A voir également:

1 réponse

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
1 déc. 2016 à 21:47
Bonjour,

3. Si oui, démasquer les onglets vises;
Tu le vises comment ?
1
Cayl93 Messages postés 6 Date d'inscription lundi 28 novembre 2016 Statut Membre Dernière intervention 11 janvier 2017
1 déc. 2016 à 22:39
L'onglet visé est celui qui possède le même nom que la valeur de la première ligne de la colonne.

Avec mes recherches sur internet, j'ai pu faire ça:

Sub CreationDC()
Dim Cal As Worksheet
Dim NC As String
Dim NI As String
Dim Sexe As String
Set Cal = Worksheets("Calendrier")
Sexe = Cells(ActiveCell.Row, 3).Value
NC = Cells(ActiveCell.Row, 4).Value
NI = Cells(ActiveCell.Row, 1).Value
If Dir("H:\Dossiers Intégra\" & NC, vbDirectory) = "" Then
For Each FM In Array("PV", "LP1", "P", "Comm", "LFSC.", "LFACSP.", "LFAC1", _
"LFAC2", "Final", "RF", "RP", "FT")
Sheets(FM).Visible = True
Next FM
Sheets(Array("PV", "LP1", "P", "Comm", "LFSC.", "LFACSP.", "LFAC1", _
"LFAC2", "Final", "RF", "RP", "FT").Copy
MkDir "H:\DI\" & NC
ChDir "H:\DI\" & NC
ActiveWorkbook.SaveAs filename:=NC, FileFormat:=xlOpenXMLWorkbookMacroEnabled
Sheets("LP1").Visible = False
Sheets("LP2").Visible = False
Sheets("Projet").Visible = False
Sheets("Comm").Visible = False
Sheets("LFSC").Visible = False
Sheets("LFACSP").Visible = False
Sheets("LFAC1").Visible = False
Sheets("LFAC2").Visible = False
Sheets("Final").Visible = False
Sheets("RF").Visible = False
Sheets("RP").Visible = False
Sheets("FT").Visible = False
Sheets("PV").Range("C1").Value = NC
Sheets("PV").Range("C3").Value = NI
Cal.Activate
For Each FM In ArrayArray("PV", "LP1", "P", "Comm", "LFSC.", "LFACSP.", "LFAC1", _
"LFAC2", "Final", "RF", "RP", "FT")
Sheets(FM).Visible = False
Next FM
Workbooks(NC & ".xlsm").Activate
ActiveSheet.Range("D2").Value = Sexe
End If
End Sub

À date ça semble marcher, bien que je crois que je pourrais le rendre plus propre... Ou si tu as une autre idée, je suis preneur! :)
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
1 déc. 2016 à 23:02
Bonsoir,
Si cela fonctionne c'est parfait car sans le classeur c'est difficile d'améliorer.
Cependant ta liste "Sheets("LP1").Visible = False ...Sheets("FT").Visible = False"
parait inutile car tu refais de même dans ta boucle suivante.
0
Cayl93 Messages postés 6 Date d'inscription lundi 28 novembre 2016 Statut Membre Dernière intervention 11 janvier 2017
2 déc. 2016 à 16:47
Ses deux boucles sont dans deux classeurs différents, voilà pourquoi j'ai besoin de la répéter, et dans le premier classeur, je dois conserver la feuille PV visible. Donc les deux boucles ne peuvent pas être identique.

Par contre, tu pourrais peut-être répondre `cette question:
Pourquoi Est-ce que pour ma dite liste ne fonctionne pas avec la méthode
Sheets(Array("LP", ..., "FT")).Visible = False ?
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
Modifié par gbinforme le 2/12/2016 à 22:53
Bonsoir,
Pour qu'elle fonctionne il faut qu'il reste une feuille visible sinon elle ne peut s'exécuter. Ceci doit fonctionner :
Sheets(Array("LP1", "LP2", "Projet", "Comm", "LFSC", "LFACSP", "LFAC1", "LFAC2", "Final", "RF")).Visible = False
Sheets("PV").Range("C1").Value = NC
0
Cayl93 Messages postés 6 Date d'inscription lundi 28 novembre 2016 Statut Membre Dernière intervention 11 janvier 2017
5 déc. 2016 à 17:32
Merci beaucoup!!
0