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 .... ^^
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
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
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 !
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
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
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
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
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
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
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
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
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
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 .....
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
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
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