Créer nouveau classeur à partir d'autres

Dolichotis

XLDnaute Occasionnel
Bonjour,

je n'ai pas trouvé ma solution dans d'autres posts donc, j'expose mon problème :

Je souhaite créer un classeur A sur la base d'un classeur B ( une feuille) et d'un classeur C (rajouter une plage de cellules =tableau)
(code dans le classeur C)

Mais ça ne marche pas !
Code:
Dim num As String, NbC As Integer
    Dim chemin As String, nomFichier As String

    Dim wbA As Workbook, wsA As Worksheet
    Dim wb As Workbook, wsM As Worksheet
    Dim wbCreate As Workbook, wsCreate As Worksheet

        Workbooks.Open Filename:="" & chemin & "numA" & num & ".xls"
        Set wbA = ActiveWorkbook
        Set wsA = wbA.Worksheets("Nomenclature")
        wsA.Copy [COLOR="Red"] 'crée un nouveau classeur ![/COLOR]

        ActiveSheet.Name = "Comp_M"
        ActiveWorkbook.Save
        ActiveWorkbook.Name = "" & chemin & "numA" & num & "_M.xls" [COLOR="Red"]'Impossible d'affecter à une propriété en lecture seule !
        [/COLOR]
        Set wbM = Workbooks.Add("" & chemin & "numA" & num & "_M.xls")
        Set wsM = wbM.Worksheets(1)
        
        wsCreate.Range("L17:BL1500").Copy
        wsM.Range("L18").PasteSpecial xlPasteAll

Les remarques en rouge mettent en évidence mon problème. Je sais pas ce qui bloque... Mais je pense que c'est un mauvais "choix de code" !
Si vous pouviez m'indiquer ce qui ne va pas, je vous en remercie !
 
G

Guest

Guest
Re : Créer nouveau classeur à partir d'autres

Bonjour Dolichotis,

Remplace ActiveWorkBook.Save et ActiveWorkBook.Name par

ActiveWorkBook.SaveAs FileName:= TonCheminEtNomDeFichier

TonCheminEtNomDeFichier étant ce que tu dois adapter, bien-sûr.
Cela enregistrera ton fichier et lui donnera un nom en même temps.

A bientôt
 

Dolichotis

XLDnaute Occasionnel
Re : Créer nouveau classeur à partir d'autres

Bonjour Hasco !

J'ai remplacé par Save as et ça marche impecc' ! Merci !

Par contre, j'ai une question : pourquoi quand je fais wsA.copy, ça me crée un nouveau classeur ? Ca ne le conserve pas dans le presse-papiers avant le coller ?


Encore merci !
 

Dolichotis

XLDnaute Occasionnel
Re : Créer nouveau classeur à partir d'autres

En fait, encore une autre : j'ai fais un collé special (xlPasteAll) mais les bordures ne sont pas conservées. Alors que je pensais que ça conservait toute la mise en forme. Comment faire ?
 
G

Guest

Guest
Re : Créer nouveau classeur à partir d'autres

Re bonjour,

Pour ta première question:

La méthode copy appliquée à un objet Sheet (feuille) sans destination copy la feuille dans un nouveau classeur.

Quant à la méthode PasteSpecial d'un objet range, voici ce que donne l'aide d'excel sur le sujet:

Cette méthode colle un objet Range provenant du Presse-papiers dans la plage spécifiée.
expression.PasteSpecial(Paste, Operation, SkipBlanks, Transpose)

expression Obligatoire. Expression qui renvoie un objet Range.
Paste Argument de type XlPasteType facultatif. Partie de la plage à copier.
XlPasteType peut être l'une de ces constantes XlPasteType.xlPasteAll par défaut
xlPasteAllExceptBorders
xlPasteColumnWidths
xlPasteComments
xlPasteFormats
xlPasteFormulas
xlPasteFormulasAndNumberFormats
xlPasteValidation
xlPasteValues
xlPasteValuesAndNumberFormats

Ces paramètres correspondent aux premières options de la fenêtre Collage spéciale lorsque tu fais dans une feuille Edition/collage spécial.


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

Dolichotis

XLDnaute Occasionnel
Re : Créer nouveau classeur à partir d'autres

Re

Hasco, je n'ai pas l'aide en ligne d'excel. Mais xlpasteall me semblait approprié pour conserver les bordures, je l'ai fait sans macro, ça marche !
Il y a quelque chose qui ne va pas avec ce code ?

Code:
        [COLOR="Red"]wsCreate.Range("L17:BL1500").Copy[/COLOR]
        wsM.Range("L18").PasteSpecial xlPasteAll
        Application.CutCopyMode = False

Et là, il me dit que la méthode select a échoué. Pourtant, c'est le code donné par l'enregistreur de macros auquel j'ai ajouté wsM !

Code:
wsM.Columns("L:O").Select
        Selection.ColumnWidth = 20

Si vous pouviez m'aider s'il vous plait, je comprends pas trop ce qui ne va pas. Merci !
 
G

Guest

Guest
Re : Créer nouveau classeur à partir d'autres

Re bonjour,

Pour les bordures essaie ceci:

wsCreate.Range("L17:BL1500").Copy Destination:= wsM.Range("L18")
Application.CutCopyMode = False

Sinon je ne vois pas d'autre solution que reformater.
Il y a des fois où on a l'impression qu'excel se mélange les pinceaux quand on lui en demande trop. A moins que ce soit nous????:p

A bientôt
 

Dolichotis

XLDnaute Occasionnel
Re : Créer nouveau classeur à partir d'autres

Merci de ta réponse Hasco ! Malheureusement, toujours le même problème, il colle la plage de cellules mais pas les bordures qui vont avec ! Je ne comprends pas...

Oui, je me demande parfois s'il ne s'emmêle pas les pinceaux ! Quelques fois, je fais tourner une macro sans problème et d'autres, il me dit : Telle méthode a échoué. Je ne m'y connais pas assez en vba pour savoir ce qui provoque cela...

Par contre, pour les bordures, j'ai beau retourné le code dans tous les sens, je ne vois ce qu'il peut clocher... Je l'ai déjà fait, en macro, avec des plages de cellules plus petites et ça fonctionnait ! :confused:
 

Dolichotis

XLDnaute Occasionnel
Re : Créer nouveau classeur à partir d'autres

Bonjour,

J'ai eu quelques idées depuis hier soir :
je me suis dit que peut-être c'était parce que je n'avais enregistrer le fichier, ça semblait douteux et ça n'était pas ça.
Après que peut-être la plage de cellules était trop grande mais non même quand je réduis, ça fait pareil.
Peut-être faut-il vider le presse-papiers ? J'ai essayé ça mais ça me dit l'indice n'appartient pas à la sélection. Mal formulé ?
J'ai déjà mis :
Code:
 Application.CutCopyMode = False
j'ai mis à la place :
Code:
Application.CommandBars("Clipboard").Controls(4).Execute

Mais je ne sais pas si c'est vraiment à cause du presse-papiers. L'entête du tableau avec texte et couleurs de cellules + une partie des bordures (!) (en effet, certaines bordures d'en haut ont elles aussi décidé de faire grève...) apparaissent bien mais dès la troisième liste, il y a juste le fond blanc qui est collé !

Je comprends vraiment pas !
Si c'est le presse-papiers, comment faire exactement ? Sinon d'autres solutions ?

Merci de votre aide !
 
G

Guest

Guest
Re : Créer nouveau classeur à partir d'autres

Bonjour,

Non je ne vois pas si ce n'est que parfois les copies de formats semble mal fonctionner sur les tableaux complexe, notament avec des cellules fusionnées ou trop de cellules formatées différement.

bonne journée
 

Staple1600

XLDnaute Barbatruc
Re : Créer nouveau classeur à partir d'autres

Bonjour à tous


Sous Excel 2000, ce code copie bien les bordures

Code:
Sub copy_bord()
Dim w_source As Workbook
Dim r_source As Range
Dim r_desti As Range
Set r_desti = ThisWorkbook.Sheets(1).Range("A1")
Set w_source = Workbooks.Open("C:\Temp\test3.xls")
Set r_source = w_source.Sheets(1).Range("A1:A10")
r_source.copy
r_desti.PasteSpecial xlPasteAll
w_source.Close
End Sub
 

Dolichotis

XLDnaute Occasionnel
Re : Créer nouveau classeur à partir d'autres

Bonjour Staple,

je viens de voir ta réponse. J'avais pratiquement fait comme ça mais sans succès !

En fait, je suis venue reposter parce que je suis arrivée à contourner mon problème. Je voulais faire un copier-coller de l'ensemble du tableau et ça ne marchait pas.
J'ai donc fait une copier-coller de l'entête du tableau et quadriller (mis les bordures...) mon tableau dans la feuille créée grâce à une fonction appelée dans la feuille.

Code:
Sub Quadri()
' Macro enregistrée le 18/06/2008 par

    wsM.Range("L19:BL1000").Select  [COLOR="SeaGreen"]'sélectionne une plage de cellules dans la feuille créée[/COLOR]
    Selection.Interior.ColorIndex = 2 [COLOR="SeaGreen"]'fond blanc[/COLOR]
    wsM.Range("O7") = wsCreate.Range("O7") [COLOR="SeaGreen"]'copie la condition de la MFC dans la feuille créée
[/COLOR]
    Selection.FormatConditions.Delete  [COLOR="SeaGreen"] 'etc..[/COLOR].
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
        "=LIGNE()<$O$7+1"
    ... [COLOR="SeaGreen"]'met les bordures[/COLOR]
End Sub

Merci à tous les deux pour votre aide !
 

Discussions similaires

Statistiques des forums

Discussions
312 489
Messages
2 088 852
Membres
103 974
dernier inscrit
chmikha