Coller certaines colonnes d'un tableau dans un autre classeur

Fermé
serpanthere - Modifié par pijaku le 25/02/2015 à 15:14
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 25 févr. 2015 à 15:28
Bonjour,

J'ai un fichier xls comprenant un tableau avec beaucoup de lignes (mais le nombre de ligne peut varier d'une version à l'autre).
Seule la colonne 5 a toutes ses lignes de remplies
Je souhaite copier dans un autre classeur xls certaines colonnes de ce 1er tableau.
Les 2 fichiers seront présents sur un serveur (et non sur mon disque) et le fichier créé doit être consultable par plein de personnes


J'ai écrit ce 1er programme :

Sub CopierDonnees()

'Pour ouvrir les fichiers suivants dans le serveur désigné ici
  Dim fld As FileDialog
  Dim strFilePath As String
  Set fld = Application.FileDialog(msoFileDialogOpen)
  With fld
    .InitialFileName = "\\commun.ad.......\Classement \"
    .Show
  End With
  strFilePath = fld.SelectedItems(1)


Dim Entree As Workbook, Sortie As Workbook

'Pour ouvrir le fichier source (là d'où viendront les données copiées)
Nomfichierentree = Application.GetOpenFilename("Fichier Excel (*.xls), *.xsl")
' On verifie que l'on a selectionné un nom de classeur
If Nomfichierentree <> False Then
    ' On ouvre le classeur
    Set Entree = Workbooks.Open(Nomfichierentree)
    
    NomFichierSortie = Application.GetOpenFilename("Fichier Excel (*.xls), *.xsl")
    If NomFichierSortie <> False Then
        Set Sortie = Workbooks.Open(NomFichierSortie)
         
         Dim numeroligne As Integer
         numeroligne = 14
         For numerocolonne = 2 To 5
            Do While Not (IsEmpty(ActiveSheet.Cells(numeroligne, 5)))
                Sortie.Worksheets("Feuil1").Cells(numeroligne, numerocolonne) = Entree.Worksheets("CLASSEMENT").Cells(numeroligne, numerocolonne)
                Sortie.Worksheets("Feuil1").Cells(numeroligne, numerocolonne) = Entree.Worksheets("CLASSEMENT").Cells(numeroligne, numerocolonne)
            numeroligne = numeroligne + 1
            Loop
         Next
            
        ' On ferme le classeur
        Sortie.Close
    End If
    ' On ferme le second
    Entree.Close
End If

End Sub


Apparemment il y a une erreur dans mes boucles imbriquées (la boucle for fonctionne seule, mais l'autre non).

D'autre part, 2 points me chiffonnent :
- la mise en page n'est pas conservée
- j'ouvre le fichier sortie (donc je dois crééer un classeur vide et lui donner un nom pour l'ouvrir), j'aurai préféré que la macro le créée et lui donne le nom que je choisis.
- les premières lignes du programme me permettent de faire en sorte que les fichiers que j'ouvre soient dans un répertoire préselectionné. Le hic (qui n'est pas grave mais pas très joli), c'est que ça m'ouvre une fenêtre, je dois sélectionner un fichier dans ce répertoire, puis sélectionner les 2 autres fichiers que je veux ouvrir. J'aurai préféré que cette étape soit transparente.

Quelqu'un peut-il m'aider svp?

1 réponse

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
25 févr. 2015 à 15:28
Bonjour,

Pour créer un nouveau classeur :
Dim Wbk As Workbook, Chemin As String, NomFic AS String
Set Wbk = Workbooks.Add
Chemin = "C:\Users\MonNom\Travail\Excel\"
NomFic = "MonFichierSortie"
Wbk.SaveAs Chemin & NomFic 

Dans ce code, le nom est donné en dur... Si tu veux le saisir toi même, tu peux passer par une InputBox, comme ceci :
Dim Wbk As Workbook, Chemin As String, NomFic AS String
Set Wbk = Workbooks.Add
Chemin = "C:\Users\MonNom\Travail\Excel\"
NomFic = InputBox("Saisie du nom de fichier : ", "NOM DU FICHIER")
'Ici on peut faire des tests sur NomFic genre If NomFic <> ""...
Wbk.SaveAs Chemin & NomFic 


Pour ouvrir un classeur existant de manière "transparente" :

Dim Entree As Workbook, Sortie As Workbook

Set Entree = Application.Workbooks.Open "d:\Users\MonNom\Travail\monfichierEntree.xls"
Set Sortie = Application.Workbooks.Open "d:\Users\MonNom\Travail\monfichierSortie.xls"

0