|
|
|
|
Bonjour,
je suis complétement novice en VBA
et je voudrais automatiser certaines opérations répétitives...
voila mon but
A l’ouverture d’une feuille Excel :
L’utilisateur sélectionne des feuilles dans le fichier ouvert :
La macro doit Pouvoir réaliser, dans ces feuilles sélectionné un copier coller
- Des valeurs (seulement)
- Des formats des feuilles
- Si possible des photos éventuels ( optionel) => pas trés important
Et sauvegarder ça dans un autre fichier.
J'aimerais bien avoir certaines pistes, si parmis vous ont des idées .. je suis preneur.
Merci d'avance de votre aide :)
Hello nighthawk,
|
Voici ce j'ai obtenu ...
For Each feuille In Selection.Sheets j'ai une erreur sur feuille = >" Erreur d’exécution ‘438’ Propriété ou méthode non géré par cet objet. " pb sur mot feuille je sais pas comment lui dire que c la ou les feuille(s) sélectionné du classeur qu'il faut qu'il prenne en compte. 2 : je ne sais pas comment faut il lui indiquer qu'il faut qu'il garde la mise en page d'origine. 3 : comment pouvoir également copier les images du document? Sub cut_paste() Application.ScreenUpdating = False 'désactive la mise à jour de l'écran (accélère l'application) 'For Each feuille In Selection.Sheets ' feuille.Activate Cells.Select Selection.Copy Workbooks.Add Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Application.CutCopyMode = False ChDir "D:\Download" 'Next feuille ActiveWorkbook.SaveAs Filename:="D:\Download\Classeur1.xls", FileFormat:= _ xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _ , CreateBackup:=False Application.ScreenUpdating = True 'désactive la mise à jour de l'écran (accélère l'application) End Sub merci de votre aide! :) |
Hello nighthawk,
Sub cut_paste()
Application.ScreenUpdating = False
Dim I As Integer ' indice pour boucles For
Dim F As Integer ' pour ajout de feuilles si besoin
Dim Nbr As Integer ' nombre de feuilles à copier
Dim NomFeuille(255) As String ' noms stockés en table
' Stockage en table des feuilles à copier
Nbr = 0
For Each feuille In ThisWorkbook.Windows(1).SelectedSheets
Nbr = Nbr + 1
NomFeuille(Nbr) = feuille.Name
Next
' Désactivation de la sélection multiple
For Each feuille In Worksheets
feuille.Activate
Next
' Ajout nouveau classeur
Workbooks.Add
' Boucle de copie
F = 0
For I = 1 To Nbr
ThisWorkbook.Sheets(NomFeuille(I)).Cells.Copy
F = F + 1
If F > Worksheets.Count Then
Sheets.Add after:=Sheets(Worksheets.Count)
End If
Sheets("Feuil" & F).Select
ActiveSheet.Paste
Next
' Sauvegarde du nouveau classeur
ActiveWorkbook.SaveAs Filename:="D:\Download\Classeur1.xls", FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False
Application.ScreenUpdating = True
End Sub
P.S. Comme tu copies tes feuilles entièrement, Excel conserve toutes les mises en forme et les images... |
Re,
|
Rebonjour nighthawk,
Sub cut_paste()
Application.ScreenUpdating = False
Dim I As Integer ' indice pour boucles For
Dim F As Integer ' pour ajout de feuilles si besoin
Dim Nbr As Integer ' nombre de feuilles à copier
Dim NomFeuille(255) As String ' noms stockés en table
Dim FicSource As Workbook ' classeur source
Set FicSource = ActiveWorkbook
' Stockage en table des feuilles à copier
Nbr = 0
For Each feuille In FicSource.Windows(1).SelectedSheets
Nbr = Nbr + 1
NomFeuille(Nbr) = feuille.Name
Next
' Désactivation de la sélection multiple
For Each feuille In Worksheets
feuille.Activate
Next
' Ajout nouveau classeur
Workbooks.Add
' Boucle de copie
F = 0
For I = 1 To Nbr
FicSource.Sheets(NomFeuille(I)).Cells.Copy
F = F + 1
If F > Worksheets.Count Then
Sheets.Add after:=Sheets(Worksheets.Count)
End If
Sheets("Feuil" & F).Select
ActiveSheet.Paste
Cells.Select
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
ActiveSheet.Cells.Copy
Cells(1, 1).Select
Next
' Sauvegarde du nouveau classeur
ActiveWorkbook.SaveAs Filename:="D:\Download\Classeur1.xls", FileFormat:= _
xlNormal
Application.ScreenUpdating = True
End Sub
|
Répondre à Remi
|
Hello Armojax
|
Re Armojax
ActiveSheet.Cells.Copy par un code plus approrié qui ne va copier que les zones d'impréssion défini par le type, si c'est pas le cas on copie tout (je me répéte, parceque je sais pas si tu vois ce que je veux dire ou pas? ) merci :) |
Re Armojax
|
Bonjour nighthawk,
For I = 1 To Nbr
FicSource.Sheets(NomFeuille(I)).Cells.Copy
F = F + 1
If F > Worksheets.Count Then
Sheets.Add after:=Sheets(Worksheets.Count)
End If
Sheets("Feuil" & F).Select
ActiveSheet.Paste
Cells.Select
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
With ActiveSheet
.Cells.Copy
.Name = NomFeuille(I)
.PageSetup.PrintArea = FicSource.Sheets(NomFeuille(I)).PageSetup.PrintArea
End With
NextBonne journée.
Ajx. |
Bonjour Armojax
|
Bonjour NightHawk,
With ActiveSheet .Cells.Copy .Name = NomFeuille(I) .PageSetup.PrintArea = FicSource.Sheets(NomFeuille(I)).PageSetup.PrintArea End Withpar With ActiveSheet .Cells.Copy .Name = NomFeuille(I) End With With ActiveSheet.PageSetup .PrintArea = FicSource.Sheets(NomFeuille(I)).PageSetup.PrintArea .Orientation = FicSource.Sheets(NomFeuille(I)).Orientation End With1) Normalement, la macro définit la même zone d'impression dans les deux classeurs. Si celle du classeur source est vide, elle l'est aussi dans le classeur de destination. Dans ce cas, Excel copie la totalité des informations contenues dans la feuille. 2) Définir une zone d'impression délimite les données qui seront imprimées. C'est différent de la mise en page, qui se paramètre à part. J'ai ajouté la recopie du format (Portrait ou paysage). 3) Il se peut que tu aies envie de recopier encore d'autres paramètres. Entraîne-toi à les découvrir tout seul : lance l'enregistreur de macro, et modifie les paramètres. Puis arrête l'enregistreur. Dans le projet VBA, tu as la macro et tu vois quels sont les paramètres modifiables. Bon week-end de Pâques. Ajx. |
Bonjour Armojax
.Orientation = FicSource.Sheets(NomFeuille(I)).Orientation j'ai cherché et j'ai trouvé l'erreur .Orientation = FicSource.Sheets(NomFeuille(I)).PageSetup.Orientation tu avais juste oublié PageSetup :) pr ton n°1. je voulais ne pouvoir copier que le contenu de la zone d'impréssion cad : On défini sur la feuille qui contient un tableau + du texte on défini comme zone d'impréssion que le tableau moi je ne veux pouvoir récupérer que le tableau, si je n'avais pas défini la zone d'impréssion, j'aimerais bien récupérer le tableau + texte de la feuille. pr l'instant grace a toi, je récupére les zones d'impréssions plus ce qu'il y a autour (sauf lorsque je réalisé une impréssion : ce qui est normal) merci pr ton aide. |
NightHawk,
|
Bonjour
Worksheets("Sheet1").Columns("C").Hidden = True
Mais je ne vois pas du tout la syntaxe qu'il faut intregré dans ton code :( :
...
Nbr = 0
For Each feuille In FicSource.Windows(1).SelectedSheets
Nbr = Nbr + 1
NomFeuille(Nbr) = feuille.Name
Next
For Each feuille In Worksheets
feuille.Activate
Next
Workbooks.Add
F = 0
For I = 1 To Nbr
FicSource.Sheets(NomFeuille(I)).Cells.Copy
F = F + 1
If F > Worksheets.Count Then
Sheets.Add after:=Sheets(Worksheets.Count)
End If
Sheets("Feuil" & F).Select
ActiveSheet.Paste
Cells.Select
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
With ActiveSheet
.Cells.Copy
.Name = NomFeuille(I)
End With
With ActiveSheet.PageSetup
.PrintArea = FicSource.Sheets(NomFeuille(I)).PageSetup.PrintArea
.Orientation = FicSource.Sheets(NomFeuille(I)).PageSetup.Orientation
End With
Next
...
|
Hello NightHawk,
For N = 1 To 256 ActiveSheet.Columns(N).Hidden = FF.Columns(N).Hidden Next Armojax. |
Bonjour, j'ai vraiment besoin d'aide !!! je dois d'éveloper visual basic, le probleme c'est que je coince la !!!
|