Comment insérer la formule copy dans une macro

léman

XLDnaute Nouveau
Bonjour les Excelnautes,

Voilà le problème, comment insérer la formule copy dans la macro ci-dessous pour sauvegarder les résultats, après le tri et juste avant l'impression, dans la feuille2 du classeur et, dans un autre classeur ?

Exemple :

Range("Q135:AC266").Copy Destination:=Worksheets("Feuil2").Range("Q135")

Mais est-ce le bon exemple ou la bonne solution ?

Voici la teneur de la macro :

Dim maplage As Range, l As Long, t As Variant, f As String, n As String, m As String
Set maplage = Range("A11:N" & Range("A65536").End(xlUp).Row)
t = maplage
f = Range("G11").FormulaLocal
n = Range("N11").FormulaLocal
m = Range("M11").FormulaLocal
For l = 1 To maplage.Rows.Count
Range(maplage(l, 8), maplage(l, 12)).Sort Key1:=maplage(l, 8), Order1:=xlDescending, Orientation:=xlLeftToRight
Next l
maplage.Sort maplage(1, 13), xlDescending, maplage(1, 11), , xlDescending, maplage(1, 12), xlDescending, xlNo, , , xlSortColumns
'maplage.Sort maplage(1, 13), xlDescending, maplage(1, 12), , xlAscending, maplage(1, 1), xlAscending, xlNo, , , xlSortColumns
'maplage.Sort maplage(1, 14), xlDescending, maplage(1, 7), , xlDescending, maplage(1, 1), xlDescending, xlNo, , , xlSortColumns
Formule à insérer pour recopier tous les résultats (sans les formules) après tri (cellules Q135 à AC266) dans un autre classeur ?
With ActiveSheet
.PageSetup.PrintArea = Range("Q135:AC" & 142 + maplage.Rows.Count - 1).Address
.PrintOut
'.PrintPreview
End With
maplage = t
Range("G11").FormulaLocal = f
Range("G11").AutoFill Range("G11:G" & Range("G65536").End(xlUp).Row)
Range("N11").FormulaLocal = n
Range("N11").AutoFill Range("N11:N" & Range("N65536").End(xlUp).Row)
Range("M11").FormulaLocal = m
Range("M11").AutoFill Range("M11:M" & Range("M65536").End(xlUp).Row)

End Sub

Merci d'avance pour vos réponses

Salutations et... ;) à PL

Guy
 
G

Guest

Guest
Re : Comment insérer la formule copy dans une macro

Bonjour Léman,

Code:
Dim Wk  as workbook 
set wk = thisworkBook
Range("Q135:AC266").Copy 
 
      [COLOR=olive]'Coller les valeurs dans feuil2 cellule Q135 (sans les formules)[/COLOR]
      Worksheets("Feuil2").Range("Q135").PasteSpecial([COLOR=red]xlPasteValue[/COLOR]) 
      [COLOR=olive]'Copie la "Feuil2" dans un nouveau classeur[/COLOR]
      Worksheets("Feuil2").[COLOR=blue]Copy[/COLOR] 
      [COLOR=olive]'Facultatif sauvegarde du nouveau classeur[/COLOR]
      Activeworkbook.SaveAs ThisWorkbook.Path & "\NomDuNouveauClasseur.xls"
      [COLOR=olive]'Réactivation du classeur sur lequel on se trouvait[/COLOR]
      WK.activate

Tu peux remplacer xlPasteValue par xlPasteValuesAndNumberFormat qui collera aussi les formats de nombres

La méthode .Copy Copiera la feuille dans un nouveau classeur qui deviendra le classeur actif >> ne pas oublier de réactive le précedent.

A bientôt
 

léman

XLDnaute Nouveau
Re : Comment insérer la formule copy dans une macro

Bonjour Hasco,

Merci pour cette information qui m'est fort utile ! Toutefois, cette formule peut-elle être insérée dans la macro présentée, à l'endroit mentionné ou dois-je créer (vu que je ne suis qu'un modeste utilisateur d'Excel, ce ne sera pas facile à le créer pour moi) un nouveau bouton ?

Merci d'avance pour cette nouvelle réponse.

@+

Guy
 
G

Guest

Guest
Re : Comment insérer la formule copy dans une macro

Bonjour Léman,

Oui tu devrais pouvoir insérer ses lignes à l'endroit voulu.

La première ligne : Dim Wk as workbook mets la dans les déclaration de variable en tête de macro.

A bientôt
 

léman

XLDnaute Nouveau
Re : Comment insérer la formule copy dans une macro

Bonjour Hasco,

J'ai testé ta formule, mais il y a un bug. Elle s'arrête toujours sur :

PasteSpecial(xlPasteValue)

Ne serait-il pas plus judicieux d'utiliser cette dernière ?

Range("A1:AE266").Select
Sheets("Feuil1").Range("A1:AE266").EntireRow.Copy
Sheets("Feuil2").Range("A1").PasteSpecial Paste:=xlPasteValues

et où et comment l'insérer dans la macro de référence (post précédent) ?

Merci d'avance pour la réponse

@+

Guy
 
G

Guest

Guest
Re : Comment insérer la formule copy dans une macro

Re bonjour Léman,

Oui, j'ai fait une faute en oubliant le 's'.

tu devrais pouvoir la mettre à la ligne en rouge de la macro de ton premier post. Je ne suis pas sûr que le EntireRow soit ici nécessaire à moins que tu veuilles que toutes les colonnes de toutes les lignes concernée soient copiées. EntireRow prend la ligne entière de "A" à "IV" pour une version excel <2007.

Après copie rajoute la ligne suivante:

Application.CutCopyMode=false
pour faire disparaitre les tirets qui entourent les plage de cellule en cours de copie.

Le Select est inutile

A bientôt
 
Dernière modification par un modérateur:

léman

XLDnaute Nouveau
Re : Comment insérer la formule copy dans une macro

Re Hasco,

En sommes cette macro serait la suivante :

Dim Wk as workbook
Dim maplage As Range, l As Long, t As Variant, f As String, n As String, m As String
Set maplage = Range("A11:N" & Range("A65536").End(xlUp).Row)
t = maplage
f = Range("G11").FormulaLocal
n = Range("N11").FormulaLocal
m = Range("M11").FormulaLocal
For l = 1 To maplage.Rows.Count
Range(maplage(l, 8), maplage(l, 12)).Sort Key1:=maplage(l, 8), Order1:=xlDescending, Orientation:=xlLeftToRight
Next l
maplage.Sort maplage(1, 13), xlDescending, maplage(1, 11), , xlDescending, maplage(1, 12), xlDescending, xlNo, , , xlSortColumns
'maplage.Sort maplage(1, 13), xlDescending, maplage(1, 12), , xlAscending, maplage(1, 1), xlAscending, xlNo, , , xlSortColumns
'maplage.Sort maplage(1, 14), xlDescending, maplage(1, 7), , xlDescending, maplage(1, 1), xlDescending, xlNo, , , xlSortColumns
Range("A1:B1").
Sheets("Feuil1").Range("A1:AE266").Copy
Sheets("Feuil2").Range("A1").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode=false

With ActiveSheet
.PageSetup.PrintArea = Range("Q135:AC" & 142 + maplage.Rows.Count - 1).Address
.PrintOut
'.PrintPreview
End With
maplage = t
Range("G11").FormulaLocal = f
Range("G11").AutoFill Range("G11:G" & Range("G65536").End(xlUp).Row)
Range("N11").FormulaLocal = n
Range("N11").AutoFill Range("N11:N" & Range("N65536").End(xlUp).Row)
Range("M11").FormulaLocal = m
Range("M11").AutoFill Range("M11:M" & Range("M65536").End(xlUp).Row)

End Sub

Merci d'avance pour ta confirmation

@+

Guy
 

léman

XLDnaute Nouveau
Re : Comment insérer la formule copy dans une macro

Re Hasco,

J'ai re-testé la formule, mais le bug persiste à la ligne Sheets("Feuil2")... ?

La formule :

Range("A1:B1").Select
Sheets("Feuil1").Range("A1:AE266").Copy
Application.CutCopyMode = False
Sheets("Feuil2").Range("A1:B1").PasteSpecial Paste:=xlPasteValues
With ActiveSheet

@+

Guy
 
G

Guest

Guest
Re : Comment insérer la formule copy dans une macro

Re bonjour,

Application.CutcopyMode est mal placé.

Code:
Range("A1:B1").Select
Sheets("Feuil1").Range("A1:AE266").Copy
[B][COLOR=red]Sheets("Feuil2").Range("A1:B1").PasteSpecial Paste:=xlPasteValues[/COLOR][/B]
Application.CutCopyMode = False

De plus si Ta plage de destination n'a pas la même grandeur que ta plage des destination tu peux simplement mettre:
Sheets("Feuil2").Range("A1").PasteSpecial .......

A bientôt
 

léman

XLDnaute Nouveau
Re : Comment insérer la formule copy dans une macro

Re

J'ai testé et re-testé la première idée, mais j'avais toujours un bug (je pense un problème de fusion de cellules au sein de mon tableau...), alors et pour finir cette galère, voici ce que j'ai mis dans la macro :

End With
'Répertoire = "c:\x.xls\"
répertoire = ActiveWorkbook.Path
ActiveWorkbook.SaveAs Filename:=répertoire & "\tir1.xls"
End Sub

Cela fonctionne très bien, mais mon seul problème c'est qu'après cette action, je n'arrive pas à convertir les formules en nombre (dans le nouveau classeur tir.*). Comment faire avec Excel 2007 ou que dois-je insérer comme formule dans cette macro pour y arriver ?

@+

Guy
 
G

Guest

Guest
Re : Comment insérer la formule copy dans une macro

Re:

Résumons-nous:

1 - copies des cellules sur feuil2 du classeur de départ avec pasteSpecial XlValues.

2 - création du nouveau classeur par la méthode Sheets("Feuil2").Copy
Le nouveau classeur et sa feuille deviennent alors le classeur actif
et la feuille active.

3 - enrgistrement du nouveau classeur comme énoncé dans ton précédent message.

Est tu sûr de n'avoir pas copier la mauvaise feuille dans le classeur 'Tir*.xls'?

Franchement si tu as respecté ces étapes, je ne vois pas ce qui peut clocher.

A bientôt
 

léman

XLDnaute Nouveau
Re : Comment insérer la formule copy dans une macro

Bonjour Hasco,

Avec toutes mes excuses pour ne pas avoir répondu plus vite à ta question be cause mon fils passe ses exas de droit et, je me devais de le véhiculer.

Je reprends le fil de la discussion. Avec la commande ci-dessous, j'ai trouvé cette option idéale, vu que je pouvais en principe copier mon fichier sur un autre disque dur pour sa sauvegarde. C'est pourquoi, j'ai testé cette formule sur mon propre disque C:\ et même répertoire :

End With
'Répertoire = "c:\x.xls\"
répertoire = ActiveWorkbook.Path
ActiveWorkbook.SaveAs Filename:=répertoire & "\tir1.xls"
End Sub

Le seul ou plutôt les deux problèmes que j'ai avec cette formule, c'est comment lui indiquer qu'il faut copier ma feuille sur un autre disque dur (HD F) et dans répertoire précis. Donc puis-je mettre ceci dans la macro :

ActiveWorkbook.SaveAs Filename:=répertoire & "f:\ABC\tir1.xls"

et point 2, je voudrais que les formules disparaissent pour être remplacées par des nombres lors de cette copie sur cette autre HD USB (F).

Voilà simplement mon problème, pour le reste tes réponses étaient excellentes !

Merci d'avance pour ta (tes) réponse (s) et bon week end

Guy
 

léman

XLDnaute Nouveau
Re : Comment insérer la formule copy dans une macro

Cher Hasco,

J'ai trouvé la solution et voici la nouvelle teneur de ma macro :

Sub SauvegardeUnion()
'
' SauvegardeUnion Macro
'
Dim Wk As Workbook
Dim maplage As Range, l As Long, t As Variant, f As String, n As String, m As String
Set maplage = Range("A11:N" & Range("A65536").End(xlUp).Row)
t = maplage
f = Range("G11").FormulaLocal
n = Range("N11").FormulaLocal
m = Range("M11").FormulaLocal
For l = 1 To maplage.Rows.Count
Range(maplage(l, 8), maplage(l, 12)).Sort Key1:=maplage(l, 8), Order1:=xlDescending, Orientation:=xlLeftToRight
Next l
maplage.Sort maplage(1, 13), xlDescending, maplage(1, 11), , xlDescending, maplage(1, 12), xlDescending, xlNo, , , xlSortColumns
'maplage.Sort maplage(1, 13), xlDescending, maplage(1, 12), , xlAscending, maplage(1, 1), xlAscending, xlNo, , , xlSortColumns
'maplage.Sort maplage(1, 14), xlDescending, maplage(1, 7), , xlDescending, maplage(1, 1), xlDescending, xlNo, , , xlSortColumns
Range("A1:N135").Select
Selection.Copy
Workbooks.Open Filename:="C:\ACV2\Union2.xls"
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.WindowState = xlMinimized
Windows("Union2.xls").Activate
Windows("Union1.xls").Activate
ActiveWindow.WindowState = xlMaximized
Range("Q135:AE272").Select
Application.CutCopyMode = False
Selection.Copy
ActiveWindow.WindowState = xlMinimized
Windows("Union2.xls").Activate
ActiveWindow.WindowState = xlMaximized
Range("Q135").Select
ActiveSheet.Paste
ActiveWindow.SmallScroll Down:=-162
Range("O1").Select
Application.CutCopyMode = False
Selection.ClearContents
Range("C1").Select
ActiveWorkbook.SaveAs Filename:="C:\ACV2\Union2.xls", FileFormat:=xlExcel8, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
ActiveWindow.Close
Range("A1:B1").Select
Application.CutCopyMode = False
maplage = t
Range("G11").FormulaLocal = f
Range("G11").AutoFill Range("G11:G" & Range("G65536").End(xlUp).Row)
Range("N11").FormulaLocal = n
Range("N11").AutoFill Range("N11:N" & Range("N65536").End(xlUp).Row)
Range("M11").FormulaLocal = m
Range("M11").AutoFill Range("M11:M" & Range("M65536").End(xlUp).Row)

End Sub

Certes, elle n'est pas très "orthodoxe", mais elle fonctionne à merveille !

Merci encore beaucoup pour ton aide.

Amitiés et bon week end

Guy
 

Discussions similaires