Copier des colonnes d'un fichier excel à l autre

Résolu
InfoGeo Messages postés 87 Date d'inscription jeudi 2 février 2012 Statut Membre Dernière intervention 17 avril 2013 - 31 mai 2012 à 14:59
InfoGeo Messages postés 87 Date d'inscription jeudi 2 février 2012 Statut Membre Dernière intervention 17 avril 2013 - 14 juin 2012 à 16:55
Salut !

je suis sous excel

J'aimerai en fait copier coller des colonnes d un fichier excel vers un autre
En fait dans le fichier excel de départ, il y a des colonnes qui ne sont aps interessantes et il faudrait changer des titres etc ... enfin bref voila une partie de mon code:

 nbLignes = Range("A1").End(xlDown).Row
    nbColonnes = Cells.Find("*", Range("A1"), , , xlByColumns, xlPrevious).Column

    ReDim SaveColonnes(nbLignes, nbColonnes)
    
    For i = 1 To nbColonnes
        If Cells(1, i) "Learner Area" Or Cells(1, i) "Learner Country" Then
            nbColonnesAfter = nbColonnesAfter + 1
            For j = 1 To nbLignes
                SaveColonnes(j, nbColonnesAfter) = Cells(j, i)
                Print #2, SaveColonnes(j, nbColonnesAfter)
            Next j
        End If
    Next i
    
      
    
    'Ferme le fichier où sont maintenant enregistrés les champs
    Close #2


Donc ca marche mais pas vraiment ^^

parce que normaelemnt la j ai donc deux colonne, mais quand je fais le print il met tous l'un en dessous de l autre donc il y a deux colonnes dans une .....

Donc j'aimerai savoir si on peut régler le print ou utiliser autre chose qui permet de sélectionner la lettre de la colonne afin que je puisse dire que je veux la premeire colonne dans la colonne A, la deuxieme dans la colonne B ......

J'ai pas trouvé sur google, a chaque fois c'est des fonction pour imprimer .... ^^

Donc svp aidez moi =)

32 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
31 mai 2012 à 17:42
Bonjour,
Lis donc ton aide VBA au lieu de te précipiter pour faire des suppositions qui n'ont aucune raison d'être faites !
Tant l'origine des données que leur destination peuvent, sous VBA, être déterminées avec précision en utilisant les objets VBA/Excel
WorkBooks("toto").Sheets("titi").Range("B3:D5")
définit par exemple sans aucune ambiguïté la plage B3:D5 de la feuille "titi" du classeur "toto"
A bûcher sans attendre : la collection WorBooks et la collection Sheets (dans ton aide VBA). C'est un minimum à connaître.
Intéresse-toi vite, dans la foulée, à leurs méthodes, dont Add
Il est absolument indispensable de commencer par apprendre ces rudiments. C'est sur leurs bases, que l'on développe !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 juin 2012 à 19:46
Allez va (c'est un vendredi soir) !
Regarde ce que ferait ceci :
Dim tablo
    tablo = Workbooks("toto").Sheets("Feuil1").Range("A1:" & Workbooks("toto").Sheets("feuil1").Cells.SpecialCells(xlCellTypeLastCell).Address)
    For i = 1 To UBound(tablo, 2)
      Select Case Trim(tablo(1, i))
        Case "Learner Area", "Learner Sub-Area", "Learner Country", "Learner Company", _
           "Type", "Job", "Certification Level", "Release", "Reference", "Title", "Start Date"
          tablo(1, i) = Replace(tablo(1, i), " ", "_")
          tablo(1, i) = Replace(tablo(1, i), ":", "")
          tablo(1, i) = Replace(tablo(1, i), "/", "_")
      Case "Classroom Duration (Trainee Days)"
         tablo(1, i) = "Classroom_Duration_Days"
      Case "E-learning Duration (Hours)"
         tablo(1, i) = "Elearning_Duration_Hours"
      Case "Internal/External"
         tablo(1, i) = "Int_Ext"
      Case Else
        tablo(1, i) = ""
    End Select
  Next
  Workbooks("titi").Sheets("Feuil2").Range("A1:" & Workbooks("toto").Sheets("Feuil1").Cells.SpecialCells(xlCellTypeLastCell).Address) = tablo
  Workbooks("titi").Sheets("Feuil2").Rows(1).SpecialCells(xlCellTypeBlanks).EntireColumn.Delete

Avec une seule boucle, d'un seul coup, et sans autre procédure du tout (tout est( là).
Les données à copier sont, dans cet exemple, sur la Feuil1 du classeur toto et sont copiées/transformées sur la feuil2 du classeur titi

Je te prie de bien vouloir analyser cela et te dire qu'il n'y a rien ni de "divin", ni de "sorcier". Juste l'application pure et simple de ce que l'on apprend en lisant l'aide VBA.
Le reste (la conception du mécanisme que j'ai mis en place) ne relève pas de connaissances informatiques mais d'une organisation de la pensée (rien d'autre)

A défaut d'une réponse claire à la question que je t'ai posée deux fois, j'ai traité en considérant des colonnes discontinues. Le traitement ainsi fait est (tu le constateras) très rapide. J'en aurais fait un autre encore plus rapide en cas de colonnes juxtaposées (raison pour laquelle je t'interrogeais sur ce point).
Mais bon ===>> tu as de toutes manières là du beaucoup plus rapide et concentré que ce qu_e tu avais fait.
Bon week-end.



________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
1
MarcPL Messages postés 172 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 21 juillet 2013 2
31 mai 2012 à 16:29
Pour copier des cellules d'une feuille Excel vers une autre, il ne faut pas utiliser de Print ni Google du reste,
voir simplement l'aide en ligne de Copy !!

En gros Worksheets("x1").Range("x:x").Copy Destination:=Worksheets("x2").Range("x") ...

___________________________________________________________________________________________________________________
Comme la vitesse de la lumière est supérieure à celle du son, certains ont l'air brillant avant d'avoir l'air con !
0
InfoGeo Messages postés 87 Date d'inscription jeudi 2 février 2012 Statut Membre Dernière intervention 17 avril 2013
31 mai 2012 à 16:42
Hummmm mais la le soucis c'est qu'il faudrait que les deux feuilles soit dans le meme fichier quoi, non ?

Moi je veux créé un nouveau fichier et mettre ensuite les colonnes dedans


merci d avoir répondu
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
InfoGeo Messages postés 87 Date d'inscription jeudi 2 février 2012 Statut Membre Dernière intervention 17 avril 2013
1 juin 2012 à 10:57
donc c bien ce que je pensais dans ton exemple ca marchait pas il faut bien le workbook

Et pis ca sert a rien d agresser les gens, désolé d etre pas un dieu comme toi
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 juin 2012 à 11:02
Désolé, mais tu confonds "être un dieu" et "connaître les rudiments".
Je vais donc te laisser dorénavant seul et à tes états d'âme, personnellement.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 juin 2012 à 11:05
donc c bien ce que je pensais dans ton exemple ca marchait pas il faut bien le workbook

Et quel exemple ? Je ne t'en ai donné aucun ! Uniquement des indications !
Bref ...
Bonne chance dans tes approches du développement.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
InfoGeo Messages postés 87 Date d'inscription jeudi 2 février 2012 Statut Membre Dernière intervention 17 avril 2013
1 juin 2012 à 11:27
merci.

pour ceux qui sont interéssés:


For i = 1 To nbColonnes
If Cells(1, i) "Learner Area" Or Cells(1, i) "Learner Sub-Area" Or Cells(1, i) = "Learner Country" Or Cells(1, i) = "Learner Country" Or Cells(1, i) = "Learner Company" Or Cells(1, i) = "Type" Or Cells(1, i) = "Job" Or Cells(1, i) = "Certification Level" Or Cells(1, i) = "Release" Or Cells(1, i) = "Reference" Or Cells(1, i) = "Title" Or Cells(1, i) = "Start Date" Or Cells(1, i) = "Classroom Duration (Trainee Days)" Or Cells(1, i) = "E-learning Duration (Hours)"      Or Cells(1, i) = "Internal/External" Then

                nbColonnesAfter = nbColonnesAfter + 1
                If Cells(1, i) = "Classroom Duration (Trainee Days)" Then
                    SaveColonnes(1, nbColonnesAfter) = "Classroom_Duration_Days"
                    changement = True
                End If
                If Cells(1, i) = "E-learning Duration (Hours)" Then
                    SaveColonnes(1, nbColonnesAfter) = "Elearning_Duration_Hours"
                    changement = True
                End If
                If Cells(1, i) = "Internal/External" Then
                    SaveColonnes(1, nbColonnesAfter) = "Int_Ext"
                    changement = True
                End If

                If changement = False Then                    
                    Champs = Cells(1, i).Text
                    Champs = Replace(Champs, " ", "_")
                    Champs = Replace(Champs, ":", "")
                    Champs = Replace(Champs, "/", "_")
                    SaveColonnes(1, nbColonnesAfter) = Champs
                End If
                changement = False
               
                For j = 2 To nbLignes
                    SaveColonnes(j, nbColonnesAfter) = Cells(j, i)
                Next j
        End If
    Next i
   
    For i = 1 To nbLignes
       
    Next i
   
    Dim wb As Workbook
    Dim ws As Worksheet
    Set wb = Workbooks.Open(file)
    Set ws = wb.Worksheets(1)
   

    For i = 1 To nbColonnesAfter
        For j = 1 To nbLignes
         Workbooks(Parametres.FileName.Text & extension).Sheets(Parametres.FileName.Text).Range(AlphabetColonne(i) & j).Value = SaveColonnes(j, i)
        Next j
    Next i
0
InfoGeo Messages postés 87 Date d'inscription jeudi 2 février 2012 Statut Membre Dernière intervention 17 avril 2013
1 juin 2012 à 11:27
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 juin 2012 à 11:35
Tu vois ? Quand je te parlais de rudiments ?
Tes 3 premières expressions conditionnelles vont toutes trois être systématiquement vérifiées (lourd)
Tu devrais vite voir ce qu'est SelectCase (même Else If)
Entre autres ...


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 juin 2012 à 11:42
Houla !
Et que dire de ta "logique", :
If Cells(1, i) = "Learner Area" ... then
If Cells(1, i) = "Classroom Duration (Trainee Days)" Then
'...etc...

Si une seule des conditions exprimées en 1ère ligne est vraie, je vois mal comment pourraient être vraies les autres conditions !
Tu te rends compte, oui ?
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 juin 2012 à 13:16
Bon.
Si tu le souhaites, je te proposerai du plus rapide et moins redondant !
Si j'ai bien deviné, tu voudrais copier vers un autre classeur ou une autre feuille uniquement certaines colonnes de ton premier classeur, tout en modifiant l'intitulé de la 1ère ligne en destination. C'est cela ?
Si oui (et uniquement pour choisir en connaissance de cause la méthode la plus appropriée et la plus rapide en exécution) :
- combien de colonnes (au total) sur ta feuille source ?
- combien de colonnes d'entre elles sont à copier ?
- ces colonnes à copier sont-elles juxtaposées ou discontinues ?


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
InfoGeo Messages postés 87 Date d'inscription jeudi 2 février 2012 Statut Membre Dernière intervention 17 avril 2013
1 juin 2012 à 14:36
ma feuille source est variable donc le nombre de colonens et de lignes aussi

Il y a 14 colonnes a récupérer

Juxtaposées ou discontinues ... heu .... bah.... heu ....
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 juin 2012 à 14:50
ma feuille source est variable donc le nombre de colonens et de lignes aussi

je ne parle que du nombre de colonnes ! Combien environ, au maximum ?
Juxtaposées ou discontinues ... heu .... bah.... heu ....

Cela peut avoir une importance très grande, car si juxtaposées ===>> dix fois plus rapide que si discontinues.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
InfoGeo Messages postés 87 Date d'inscription jeudi 2 février 2012 Statut Membre Dernière intervention 17 avril 2013
1 juin 2012 à 14:55
bah je comprend pas la différence désolé ....

Et le nombre de colonnes est variable oui, l a y en a 27 mais il pourrait y en avoir plus ou moins, c pas moi qui choisit le fichier de départ, c envoyé par un autre département
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 juin 2012 à 15:00
bah je comprend pas la différence désolé ....

C'est pourtant clair ! Par exemple : les colonnes D,E et F sont juxtaposées.
Les colonnes D,K et L sont discontinues.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
InfoGeo Messages postés 87 Date d'inscription jeudi 2 février 2012 Statut Membre Dernière intervention 17 avril 2013
1 juin 2012 à 15:34
ha oui bien sur elles suivent toutes de A jusqu à AA ici mais encore une fois la prochaine fois ca sera peut etre de A jusqu a V ou de A jusqu a AE ou .....
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 juin 2012 à 17:36
Question :
ces colonnes à copier sont-elles juxtaposées ou discontinues ?

réponse 1 donnée :
Il y a 14 colonnes a récupérer

réponse 2 donnée :
elles suivent toutes de A jusqu à AA

qui ferait 26
déjà et tu dis que plus peut-être plus tard.
Ce n'est plus un problème de niveau informatique, mais maintenant : un problème de langue française.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 juin 2012 à 18:42
Bon.
Dommage (pour toi) que je n'aie toujours pas cette précision, car je t'aurais proposé du bien mieux.
Je vais donc me contenter de mettre un ^peu plus de cohérence dans ta première boucle ===>>
For i = 1 To nbColonnes
  Select Case Cells(1, i)
    champs = ""
    Case "Learner Area", "Learner Sub-Area", "Learner Country", "Learner Company", _
         "Type", "Job", "Certification Level", "Release", "Reference", "Title", "Start Date"
        champs = Cells(1, i).Text
        champs = Replace(champs, " ", "_")
        champs = Replace(champs, ":", "")
        champs = Replace(champs, "/", "_")
    Case "Classroom Duration (Trainee Days)"
        champs = "Classroom_Duration_Days"
    Case "E-learning Duration (Hours)"
        champs = "Elearning_Duration_Hours"
    Case "Internal/External"
       champs = "Int_Ext"
  End Select
  nbColonnesAfter = nbColonnesAfter + 1
  If champs <> "" Then SaveColonnes(1, nbColonnesAfter) = champs
End If

Voilà pour un point.
Pour l'autre, maintenant (à savoir ta boucle j puis ta deuxième boucle i) : tu as choisi le chemin le plus lent. Et bien inutilement ! Mais je ne vais tout de même pas tout écrire à ta place, hein.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 juin 2012 à 18:44
Reviens quand même, si (et uniquement si) tu souhaites voir ce que j'aurais fait de bien plus rapide.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Rejoignez-nous