Macro VBA Dimensionner un tableau excel

Fermé
Skoob - 3 mars 2009 à 16:16
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 4 mars 2009 à 13:39
Bonjour à vous tous !

Voici mon problème :
Dans un tableau Excel, Je souhaite réaliser une macro qui :
prenne les colonnes que je sélectionne (il peut y avoir des sélections multiples),
les extrait dans un nouveau fichier
et que ce fichier concerve les mêmes dimensions de colonnes (largeur hauteur) que dans le fichier d'origine.

J'ai un début de macro :

Selection.Copy
Workbooks.Add
ActiveSheet.Paste

Ceci me copie colle ma sélection dans un nouveau tableau.
Néanmoins, toutes me cases ont la même largeur.

De plus, une autre macro que je n'arrive pas à réaliser consisterai à inscrire dans une case du nouveau document, le titre du document original (comme le fait la macro BuiltinDocumentProperties).
Exemple : mon doc d'origine s'appele : "mondoc.xls", je voudrai que dans mon nouveau fichier, ceci apparaisse dans une case.

Pourriez-vous m'aider à résoudre ce problème svp ?

Je suis un véritable débutant en Excel, et n'ai aucune formation en programmation quelle qu'elle soit... Svp, soyez indulgents avec moi.... Merci par avance des réponses que vous pourrez me fournir.
A voir également:

3 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
4 mars 2009 à 13:39
bonjour,

il faut que tu précises le nom de ton classeur "cible" et la feuille "cible"
la maquette que tu avais présenté copiait dans le meme fichier

la macro ci dessous copie la selection en ouvrant le classeur "cible" et inscrit le nom du classeur "source" en Z1
Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 04/03/2009 par Michel_M
'

'
    Selection.Copy
    Workbooks.Open Filename:="D:\documents\cible.xls" 'a adapter
    Sheets("autre").Select 'a adapter
    Range("A1").Select
    ActiveSheet.Paste
    Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
        Range("Z1") = thisworbook.Name ' ligne écrite en VBA: range("Z1") à adapter
End Sub
1
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
3 mars 2009 à 16:44
Bonjour,

Comme tu débutes (bienvenue à bord du Titanic!...) :-)

avec l'enregistreur de macro:
tu sélectionnes ton tableau source
copier
1/-coller dans le classeur-source
2/- edition-collage spécial-largeur de colonnes

pour le nom du classeur source, ce n'est pas bien compliqué mais essaies déjà les copies, renvoie nous le texte de la macro (Alt+F11 pour accèder si tu ne sais pas) et qqn ici t'expliquera
0
Alors, j'avais déjà tenté en utilisant l'enregistreur de macro, et j'obtiens les lignes suivantes :

Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 03/03/2009 par e_schade
'

'
Range("A4:L32").Select
Selection.Copy
Sheets("Feuil1").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
End Sub

Les problèmes qu'il y a :
- le Range("A4:L32").Select veut dire que j'ai choisi un tableau allant de A4 à L32 (si je ne me trompe pas). Or, cette plage a été prise au hasard, et dans mon projet je veux pouvoir etre libre de choisir les plages de données
- en voulant reproduire la macro (bouton play), j'ai l'erreur '1004' : La méthode PasteSpecial de la classe Range a échoué.

Du coup, je suis un peu perdu....

Par contre, tu me dis que pour obtenir le nom du classeur source, ce n'est pas bien compliqué. Peux tu me donner la marche à suivre ?

Merci;
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
3 mars 2009 à 17:59
Re,

ci dessous macro à l'enregistreur (maquette à adapter) tu avais oublié le 1° paste

avant tu sélectionnes ton tableau "source"

Sub Macro1()
      Selection.Copy
    Sheets("Feuil2").Select
    ActiveSheet.Paste
    Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False

    'on ajoute l'instruction VBA  pour écrire dans la cellule "Z1", par exemple,le nom du fichier source où tu as écris cette macro
 Range("Z1") = ThisWorkbook.Name
End Sub
0
Merci Michel pour cette macro.

Néanmoins, il reste un problème :
Range("Z1")= ThisWorkBook.Name

Ceci m'affiche le nom du fichier d'origine dans le fichier d'origine.

Or, je souhaite avoir le nom du fichier d'origine affiché dans le nouveau fichier.

Merci...
0