Microsoft 365 Exporter une feuille en valeur - sans les formules matricielles

Gen Rose

XLDnaute Impliqué
Bonjour le forum et bon vendredi!

J'ai un petit bouton pour exporter une feuille qui fonctionne très bien seulement il exporte aussi les formules matricielles.
Comment puis-je ajuster ce code pour exporter le tout sans les formules, calculs et liste de validation?
En gros, que les valeurs en conservant la mise en forme actuelle - il s'agit d'horaires qui seront consultés.

VB:
Sub ExporterHoraireC()

Application.ScreenUpdating = False
Sheets("Semaine-C").Copy
    Sheets("Semaine-C").Unprotect "abc"
    
    If (ActiveSheet.AutoFilterMode And ActiveSheet.FilterMode) Or ActiveSheet.FilterMode Then
        Sheets("Semaine-C").ShowAllData

End If
End Sub

Voir p.j.
Merci pour votre aide :)
 

Pièces jointes

  • Export Feuille en valeur.xlsx
    17.3 KB · Affichages: 5
Solution
Bonjour Gen Rose, Wayki, fanch55;
J'aimerais que la feuille copié ne se fasse pas dans le classeur même mais quelle soit exportée afin que nous puissions la renommer et l'enregistrer.
Testez cette macro :
VB:
Sub ExporterHoraireC()
Dim F As Worksheet
Set F = ActiveSheet
F.Copy 'nouveau document
ActiveSheet.Protect "abc", UserInterfaceOnly:=True
ActiveSheet.UsedRange = F.UsedRange.Value 'copie les valeurs
ActiveSheet.DrawingObjects.Delete 'supprime le bouton
MsgBox "Enregisrez ce document où vous voulez..."
End Sub
A+

Wayki

XLDnaute Impliqué
Bonjour
Essayez ainsi ça fonctionne pour moi :
VB:
Sub ExporterHoraireC()

Application.ScreenUpdating = False
Sheets("Semaine-C").Copy
    Sheets("Semaine-C").Unprotect "abc"
   
    If (ActiveSheet.AutoFilterMode And ActiveSheet.FilterMode) Or ActiveSheet.FilterMode Then
        Sheets("Semaine-C").ShowAllData

[D5].CurrentRegion.Copy
[D5].PasteSpecial Paste:=xlValues

End If
End Sub
A +
 

fanch55

XLDnaute Barbatruc
Bonsoir,
VB:
Sub ExporterHoraireC()
Dim Sh As Worksheet
Application.ScreenUpdating = False
Set Sh = ActiveSheet
    On Error Resume Next
        Sheets(Sh.Name & " Values").Activate
        If Err Then Sheets.Add(After:=Sh).Name = Sh.Name & " Values"
    On Error GoTo 0
    With Sheets(Sh.Name & " Values").Cells
        .Clear
        With Sh
            .Unprotect "abc"
            If (.AutoFilterMode And .FilterMode) Or .FilterMode _
            Then .ShowAllData
            .Cells.Copy
        End With
        .PasteSpecial xlPasteValues
        .PasteSpecial xlFormats
    End With
End Sub
 

Pièces jointes

  • Export Feuille en valeur.xlsm
    25.5 KB · Affichages: 3

Gen Rose

XLDnaute Impliqué
Bonjour
Essayez ainsi ça fonctionne pour moi :
VB:
Sub ExporterHoraireC()

Application.ScreenUpdating = False
Sheets("Semaine-C").Copy
    Sheets("Semaine-C").Unprotect "abc"
 
    If (ActiveSheet.AutoFilterMode And ActiveSheet.FilterMode) Or ActiveSheet.FilterMode Then
        Sheets("Semaine-C").ShowAllData

[D5].CurrentRegion.Copy
[D5].PasteSpecial Paste:=xlValues

End If
End Sub
A +
Finalement j'ai répondu trop vite, cette solution ne fonctionne pas.
Les formules matricielles restent malheureusement.
merci pour votre aide
 
Dernière édition:

Gen Rose

XLDnaute Impliqué
Bonsoir,
VB:
Sub ExporterHoraireC()
Dim Sh As Worksheet
Application.ScreenUpdating = False
Set Sh = ActiveSheet
    On Error Resume Next
        Sheets(Sh.Name & " Values").Activate
        If Err Then Sheets.Add(After:=Sh).Name = Sh.Name & " Values"
    On Error GoTo 0
    With Sheets(Sh.Name & " Values").Cells
        .Clear
        With Sh
            .Unprotect "abc"
            If (.AutoFilterMode And .FilterMode) Or .FilterMode _
            Then .ShowAllData
            .Cells.Copy
        End With
        .PasteSpecial xlPasteValues
        .PasteSpecial xlFormats
    End With
End Sub
Bonjour fanch55,

Votre solution fonctionne parfaitement.
J'aimerais que la feuille copié ne se fasse pas dans le classeur même mais quelle soit exportée afin que nous puissions la renommer et l'enregistrer.

Je ne m'y connais pas assez en VBA pour ajouter une ligne à votre magnifique code-je vais le bousiller c'est sûr.

Pouvez-vous m'aider?
 

job75

XLDnaute Barbatruc
Bonjour Gen Rose, Wayki, fanch55;
J'aimerais que la feuille copié ne se fasse pas dans le classeur même mais quelle soit exportée afin que nous puissions la renommer et l'enregistrer.
Testez cette macro :
VB:
Sub ExporterHoraireC()
Dim F As Worksheet
Set F = ActiveSheet
F.Copy 'nouveau document
ActiveSheet.Protect "abc", UserInterfaceOnly:=True
ActiveSheet.UsedRange = F.UsedRange.Value 'copie les valeurs
ActiveSheet.DrawingObjects.Delete 'supprime le bouton
MsgBox "Enregisrez ce document où vous voulez..."
End Sub
A+
 
Dernière édition:

Gen Rose

XLDnaute Impliqué
Comme vous pouvez le voir j'ai ajouté la protection (déprotection) de la feuille.
Effectivement, je viens de réaliser en protégeant la feuille que j'obtenais une erreur d'exécution.
Je dois donc insérer une déprotection quelque part.

Dois ajouter une ligne au dessus ou au dessous avec unprotect?
Est-ce que ce serait par exemple
VB:
ActiveSheet.Unprotect "abc"
1679418787228.png
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
314 628
Messages
2 111 337
Membres
111 105
dernier inscrit
Joffrette