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

  • Initiateur de la discussion Initiateur de la discussion Gen Rose
  • 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 !

Gen Rose

XLDnaute Impliqué
Supporter XLD
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

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+
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 +
 
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

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:
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?
 
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:
Bonjour Gen Rose, Wayki, fanch55;

Testez cette macro :
VB:
Sub ExporterHoraireC()
Dim F As Worksheet
Set F = ActiveSheet
F.Copy 'nouveau document
ActiveSheet.UsedRange = F.UsedRange.Value 'copie les valeurs
ActiveSheet.DrawingObjects.Delete 'supprime le bouton
MsgBox "Enregisrez ce document où vous voulez..."
End Sub
A+
Magnifique, merci beaucoup @job75 😊
 
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
 
- 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

Réponses
11
Affichages
780
Réponses
12
Affichages
1 K
Retour