Copier des colonnes d'un fichier excel à l autre [Résolu]

InfoGeo 87 Messages postés jeudi 2 février 2012Date d'inscription 17 avril 2013 Dernière intervention - 31 mai 2012 à 14:59 - Dernière réponse : InfoGeo 87 Messages postés jeudi 2 février 2012Date d'inscription 17 avril 2013 Dernière intervention
- 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 =)
Afficher la suite 

32 réponses

Répondre au sujet
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 31 mai 2012 à 17:42
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 1 juin 2012 à 19:46
+1
Utile
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
Commenter la réponse de ucfoutu
MarcPL 172 Messages postés jeudi 8 décembre 2011Date d'inscription 21 juillet 2013 Dernière intervention - 31 mai 2012 à 16:29
0
Utile
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 !
Commenter la réponse de MarcPL
InfoGeo 87 Messages postés jeudi 2 février 2012Date d'inscription 17 avril 2013 Dernière intervention - 31 mai 2012 à 16:42
0
Utile
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
Commenter la réponse de InfoGeo
InfoGeo 87 Messages postés jeudi 2 février 2012Date d'inscription 17 avril 2013 Dernière intervention - 1 juin 2012 à 10:57
0
Utile
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
Commenter la réponse de InfoGeo
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 1 juin 2012 à 11:02
0
Utile
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
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 1 juin 2012 à 11:05
0
Utile
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
Commenter la réponse de ucfoutu
InfoGeo 87 Messages postés jeudi 2 février 2012Date d'inscription 17 avril 2013 Dernière intervention - 1 juin 2012 à 11:27
0
Utile
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
Commenter la réponse de InfoGeo
InfoGeo 87 Messages postés jeudi 2 février 2012Date d'inscription 17 avril 2013 Dernière intervention - 1 juin 2012 à 11:27
0
Utile
Commenter la réponse de InfoGeo
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 1 juin 2012 à 11:35
0
Utile
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
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 1 juin 2012 à 11:42
0
Utile
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
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 1 juin 2012 à 13:16
0
Utile
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
Commenter la réponse de ucfoutu
InfoGeo 87 Messages postés jeudi 2 février 2012Date d'inscription 17 avril 2013 Dernière intervention - 1 juin 2012 à 14:36
0
Utile
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 ....
Commenter la réponse de InfoGeo
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 1 juin 2012 à 14:50
0
Utile
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
Commenter la réponse de ucfoutu
InfoGeo 87 Messages postés jeudi 2 février 2012Date d'inscription 17 avril 2013 Dernière intervention - 1 juin 2012 à 14:55
0
Utile
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
Commenter la réponse de InfoGeo
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 1 juin 2012 à 15:00
0
Utile
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
Commenter la réponse de ucfoutu
InfoGeo 87 Messages postés jeudi 2 février 2012Date d'inscription 17 avril 2013 Dernière intervention - 1 juin 2012 à 15:34
0
Utile
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 .....
Commenter la réponse de InfoGeo
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 1 juin 2012 à 17:36
0
Utile
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
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 1 juin 2012 à 18:42
0
Utile
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
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 1 juin 2012 à 18:44
0
Utile
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
Commenter la réponse de ucfoutu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Copier des colonnes d'un fichier excel à l autre - page 2