Sauvegarde fichier suivant une sélection
Bonjour le forum
Je suis dans l'impasse sur la partie sauvegarde de mon fichier.
Le but:
Faire une sauvegarde des feuilles qui possèdent en cellule G3 à G300 une valeur (Non vide)
En premier je réalise un filtre a partir de la feuille 3 jusqu’à la dernière suivant la valeur de CBO_Maintenance avec ce code:
Private Sub BTNEXTRACTION_Click()
Dim I%, y%
If CBO_Maintenance = "" Then 'vérifie que le service de maintenance est n'est pas vide
MsgBox "Veuillez sélectionner un service de maintenance", vbExclamation, "Message Erreur" 'Pas de sélection alors message et sortie de procédure
Exit Sub
Else
For I = 3 To Worksheets.Count 'Boucle sur toutes les feuilles et mise en place du Filtre
With Sheets(I)
.Range("B3").AutoFilter Field:=6, Criteria1:=CBO_Maintenance.Value, Operator:=xlAnd 'Opération sur filtre terminé
End With
Next
MsgBox "Opération filtre sur" & " " & Me.CBO_Maintenance.Value & " " & "est effectué", vbInformation '
End If
End Sub
en second, je réalise la sauvegarde des feuilles qui possèdent une valeur en G3 à G300 avec ce code.
Private Sub Btn_SaveFichierPDF_Click()
Dim LaDate As String
Dim LeNFichier As String
Dim LeRep As String
Dim I As Integer
Application.ScreenUpdating = False
Rep = MsgBox("Etes-vous certain de vouloir Enregistrer sous ce nom ?", vbYesNo + vbQuestion, "Sauvegarde du Fichier en PDF ")
If Rep = vbYes Then ' Si réponse positive alors faire la sauvegarde de toutes les feuilles visibles
LeRep = Sheets("DATA").Range("B2").Value 'Répertoire de destination pour la sauvegarde'
LeNFichier = (FRM_Gestion.Txt_Datesave.Value & "_" & FRM_Gestion.TxtNom_Fichier.Value) 'Nom du fichier de sauvegarde
MsgBox (FRM_Gestion.Txt_Datesave.Value & "_" & FRM_Gestion.TxtNom_Fichier.Value) 'Affichage chemin et nom du fichier
On Error Resume Next
For I = 1 To Sheets.Count 'Début de la sélection des feuilles de sauvegarde suivant si G3 n'est pas vide
If I < 3 Then
Sheets(I).Visible = False 'Les 3er feuilles sont cachées
Else
Sheets(I).Visible = False ' Les feuilles sont cachées
For Each Cell In Sheets(I).Range("g3:G300") 'Pour chaque feuilles
If Not Cell = "" Then Sheets(I).Visible = True
Next Cell
End If
Next I
ThisWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:=LeRep & LeNFichier & ".pdf" 'Sauvegarde du fichier en format PDF
For I = 1 To Sheets.Count
Sheets(I).Visible = True
Next I
Else
If Rep = vbNo Then Exit Sub ' Si réponse Négative sortie de procédure
End If
MsgBox "Sauvegarde PDF réalisée", vbInformation
Sheets(2).Visible = True
For I = 3 To Sheets.Count
With Sheets(I)
.Range("B3").AutoFilter Field:=6 'Suppression du filtre des Tableaux de toutes les feuilles
End With
Next
Sheets(2).Activate 'Le fichier se repossitionne en feuille 2
Application.ScreenUpdating = True
End Sub
Je rencontre un problème quand en G3 la valeur est différente.
Si j'ai ELEC en G3 dans la feuille 3 et PIPE en G3 dans la feuille 5, alors j'ai 2 feuilles en sauvegarde.
L'opération
Private Sub BTNEXTRACTION_Click()
Fait bien la sélection.
Il y a bien une seule feuille avec le mot ELEC
Par contre en sauvegarde, j'ai 2 feuilles
Une avec le mot ELEC et l'autre sans rien en G3 (Que l'ent^te du tableau)
En espérant que ma description soit comprise par vous
Re le Forum
Problème résolu
Pourquoi, je n'y ai pensé avant.
J'attends pour clôturer le sujet, si jamais javais une autre proposition.
A bientôt
Bonjour le Forum
Comme promis voici la solution que j'ai faite pour avoir la sauvegarde du fichier suivant la sélection dans textbox.
Avant, j’utilisai ce code ( ric me l'avais donné, et je le remercie de nouveau)
Sheets(I).Visible = False ' Les feuilles sont cachées
For Each Cell In Sheets(I).Range("g3:G300") 'Pour chaque feuilles
If Not Cell = "" Then Sheets(I).Visible = True
Next Cell
End If
J'ai remplacé par
Sheets(I).Visible = False ' Les feuilles sont cachées
For Each Cell In Sheets(I).Range("g3:G300") 'Pour chaque feuilles
If Cell = CBO_Maintenance.Value Then Sheets(I).Visible = True 'La feuille est visible
Next Cell
End If
CBO_Maintenance me permet de "fixer"la bonne valeur.
Voilà
Bonne fin de journée à tous