Comment copier sans la protection
Résolu
Caroline
-
Caroline -
Caroline -
Bonjour,
J'ai un gros dossier qui contient plusieurs feuilles excel. Les feuilles y sont protégées par mot de passe. Un code VBA permet d'enregistrer une de ces feuilles dans un sous-dossier.
Je voudrais ensuite prendre une feuille d'un sous dossier (enregistré précédemment) et l'enregistrer dans un nouveau classeur en enlevant la protection sans que j'ai à taper le mot de passe. (pour que d'autre puissent modifier ces dernières sans que j'aie à donner le mot de passe). Je n'y arrive pas. Merci de m'aider.
J'ai un gros dossier qui contient plusieurs feuilles excel. Les feuilles y sont protégées par mot de passe. Un code VBA permet d'enregistrer une de ces feuilles dans un sous-dossier.
Je voudrais ensuite prendre une feuille d'un sous dossier (enregistré précédemment) et l'enregistrer dans un nouveau classeur en enlevant la protection sans que j'ai à taper le mot de passe. (pour que d'autre puissent modifier ces dernières sans que j'aie à donner le mot de passe). Je n'y arrive pas. Merci de m'aider.
4 réponses
-
Bonjour,
Il suffit de copier les cellules de la feuille protégée dans un feuille vierge.
Par exemple (si feuille 1 protégée et feuille 2 vierge) :Worksheets(1).Cells.Copy Worksheets(2).Cells
-
Bonjour et merci pour votre aide. Je ne suis vraiment pas familière avec les codes alors je ne comprends pas trop comment l'exécuter.
En même temps c'est une feuille que je voudrais copier dans un nouveau classeur et non sur une seconde feuille.
Ceci, pour ensuite envoyer cette dernière par courriel en pièce jointe, en format excel. (car le destinataire ne peut pas ouvrir les fichiers PDF)
Le but de ceci: En l'enregistrant dans un nouveau classeur, non protégé, on pourra effacer les boutons que contient le formulaire original qui ne servent à rien au destinataire. (Ces boutons servent au départ à sauter d'une feuille à une autre dans un gros classeur). Il faudrait que d'autres personnes puissent faire ceci facilement sans avoir besoin du mot de passe de protection du fichier principal.
Si non, j'ai pensé envoyer par courriel seulement la partie imprimable de la feuille (en utilisant l'affichage des sauts de page et en mettant en gris la partie que je ne veux pas) mais là non plus je ne vois pas comment faire. OUF. Merci si quelqu'un peut m'aider.
Merci
-
-
Bonjour,
Alors adaptes ce code :Option Explicit Sub test() Dim wbk As Workbook Dim shp As Shape ' Créer un classeur vierge contenant une seule feuille Set wbk = Workbooks.Add(xlWBATWorksheet) ' Y copier les cellules de la feuille désirée (à adapter) ThisWorkbook.Worksheets("Feuil1").Cells.Copy wbk.Worksheets(1).Cells ' Supprimer toutes les formes posées sur la feuille For Each shp In wbk.Worksheets(1).Shapes shp.Delete Next shp End Sub -
On y est presque. :)
Le code fonctionne mais il faudrait que le format de page reste le même (largeur des colonnes, hauteur des lignes, grandeur de page. En exécutant le code, les formats ne sont plus les mêmes. Il faudrait que tout reste sur une seule page pour pouvoir imprimer. Aussi, ma feuille contient une image qui disparaît quand j'exécute le code, elle devrait rester, sauf les boutons. Mais si c'est pas possible de garder l'image, sans les boutons je peux laisser tomber l'image.
Merci beaucoup votre aide est appréciée. -
Bonjour
Les formats restent les mêmes (largeur des colonnes, Formats de cellules, MFC, ...), ce qui peut changer c'est la hauteur de certaines lignes et la mise en page qui n'est pas copiée !
Pour conserver l'image, il suffit de connaître son nom (il apparaît à gauche sur la barre des formules lorsque l'image est sélectionnée), et on peur copier les hauteurs de lignes :
Option Explicit Sub test() Dim wbk As Workbook Dim wsh As Worksheet Dim shp As Shape Dim rng As Range Application.ScreenUpdating = False ' Définir la feuille source Set wsh = ThisWorkbook.Worksheets("Feuil1") ' Créer un classeur vierge contenant une seule feuille Set wbk = Workbooks.Add(xlWBATWorksheet) ' Sur la feuille 1 de ce classeur : With wbk.Worksheets(1) ' Y copier les cellules de la feuille source (à adapter) wsh.Cells.Copy .Cells ' Copier la hauteur des lignes For Each rng In .UsedRange.Rows rng.RowHeight = wsh.Rows(rng.Row).RowHeight Next rng ' Supprimer toutes les formes posées sur la feuille, sauf Image 1 For Each shp In .Shapes If shp.Name <> "Image 1" Then shp.Delete Next shp End With Application.ScreenUpdating = True End Sub-
Cela fonctionne maintenant et effectivement, c'est la mise en page qui ne reste pas la même. Mais je peux la remettre avant d'envoyer ou imprimer le document, à moins bien sûr qu'il y ait une façon d'ajouter ce critère dans le code...
Merci beaucoup! :)- Avec les principales propriétés de mise en page (ne conserves que celles qui sont utiles, ajoutes celles manquent) :
Option Explicit Sub test() Dim wbk As Workbook Dim wsh As Worksheet Dim shp As Shape Dim rng As Range Dim psu As PageSetup Application.ScreenUpdating = False ' Définir la feuille source Set wsh = ThisWorkbook.Worksheets("Feuil1") ' Créer un classeur vierge contenant une seule feuille Set wbk = Workbooks.Add(xlWBATWorksheet) ' Sur la feuille 1 de ce classeur : With wbk.Worksheets(1) ' Y copier les cellules de la feuille source (à adapter) wsh.Cells.Copy .Cells ' Copier la hauteur des lignes For Each rng In .UsedRange.Rows rng.RowHeight = wsh.Rows(rng.Row).RowHeight Next rng ' Supprimer toutes les formes posées sur la feuille, sauf Image 1 For Each shp In .Shapes If shp.Name <> "Image 1" Then shp.Delete Next shp ' Copier la mise en page (principales propriétés) With .PageSetup ' Feuille .Orientation = wsh.PageSetup.Orientation .PaperSize = wsh.PageSetup.PaperSize .PrintArea = wsh.PageSetup.PrintArea ' Marges .TopMargin = wsh.PageSetup.TopMargin .BottomMargin = wsh.PageSetup.BottomMargin .RightMargin = wsh.PageSetup.RightMargin .LeftMargin = wsh.PageSetup.LeftMargin ' En têtes et pieds de page .RightFooter = wsh.PageSetup.RightFooter .CenterFooter = wsh.PageSetup.CenterFooter .LeftFooter = wsh.PageSetup.LeftFooter .RightHeader = wsh.PageSetup.RightHeader .CenterHeader = wsh.PageSetup.CenterHeader .LeftHeader = wsh.PageSetup.LeftHeader End With End With Application.ScreenUpdating = True End Sub
Patrice
-