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.
A voir également:
- Copie de bac vierge
- Comment copier une vidéo youtube - Guide
- K9 web protection - Télécharger - Contrôle parental
- Super copier - Télécharger - Gestion de fichiers
- Historique copier coller - Guide
- Comment copier un mail - Guide
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) :
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,
Alors adaptes ce code :
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.
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 :
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
Avec les principales propriétés de mise en page (ne conserves que celles qui sont utiles, ajoutes celles manquent) :
Patrice
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
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