Concaténer des colonnes, réorganiser et transférer...

Olya

XLDnaute Junior
Bonsoir et bonne année 2014 à tous et à toutes.

Merci de bien vouloir m'aider voici mon problème :

Je reçois un tableau , que je dois réorganiser pour d'autres traitements, .... j'arrive plus ou moins à le faire par formule voir même avec un peu de vba mais rien de bien avancé... ( certains d'entre vous utilisent de bonnes methodes avec des codes plus ou moins compacts et rapides.. j'espère avoir leur aide..)

- je souhaite concaténer par vba à partir de la ligne 15 les colonne : (J:L) dans colonne J et (N:U) dans colonne N et (W:AD) dans colonne W.

- Après concaténation, supprimer par VBA les colonnes indiquées en rouge ( j'ai mis un X rouge au dessus pour les reconnaitre) ensuite réorganiser l'ordre des colonnes selon numéro au dessus de 3 à 17 .. et rajouter ( 2 colonnes devant et 10 à la fin).

- le résultat doit être dans une autre feuil .. et aussi un code à la fin qui me permet de transférer la plage traitée ( sans la ligne d'entête) vers un classeur fermé ayant la même structure (à la suite des données déjà existantes( après dérniere ligne utilisée)

( voir fichier avec deux onglet , problèmes et résultat attendu.)

Merci aux bonnes âmes qui veulent bien traiter tout ou partie de mon problème.
 

Pièces jointes

  • Concat_col_.xls
    58.5 KB · Affichages: 59

Xwprft

XLDnaute Junior
Re : Concaténer des colonnes, réorganiser et transférer...

Bonjour Olya,

Je te propose une solution sans VBA.
Des formules permettent de préparer les données dans le format voulu.
Ensuite il suffit de faire un copier / coller valeurs dans le classeur à la suite des données existantes
A+
 

Pièces jointes

  • reorganiser colonnes.xlsx
    34.7 KB · Affichages: 57

Olya

XLDnaute Junior
Re : Concaténer des colonnes, réorganiser et transférer...

Bonjour Xwprft

Merci pour ta proposition ..mais je le dis dans ma demande ..je sais le faire par formule et aussi plus ou moins avec un autofil basic .. mais je cherche une bonne âme ou plusieurs pour m'aider à trouver une solution par vba

certain utilisent des techniques très sympas et compacts ( je veux eviter les usines à gaz et réduire le temps de traitement... et m'inspirer pour apprendre

Nb dans tes formules au passage tu as concatené avec des & " " & pour les retour à la ligne il fallait souvent un CAR(10).

merci à toi en attendant des VBistes..
 

laetitia90

XLDnaute Barbatruc
Re : Concaténer des colonnes, réorganiser et transférer...

re, tous:)

en modifiant les concat.... pour correspondre plus a la demande

je me pose la qst...peut être plus simple de faire des copier coller de colonnes & des boucles specifiques sur les
colonnes a concat... en fin de compte au lieu de passer par un "tablo" enfin bon!!!!!! a voir



Code:
Sub es()
Dim t(), t1(), x As Long, i As Long
 t = Feuil8.Range("a15:aw" & Feuil8.Cells(Rows.Count, 1).End(3).Row)
 ReDim t1(1 To UBound(t), 1 To 49)
 For i = 1 To UBound(t)
 x = x + 1
 t1(x, 1) = t(i, 36): t1(x, 2) = t(i, 1): t1(x, 3) = t(i, 3): t1(x, 4) = t(i, 6)
 t1(x, 5) = t(i, 49): t1(x, 6) = t(i, 2): t1(x, 7) = t(i, 35)
 t1(x, 8) = t(i, 10) & " " & t(i, 11) & Chr(10) & t(i, 12)
 
 If t(i, 14) = "" Then
 t1(x, 9) = t(i, 15) & " " & t(i, 16) & " " & t(i, 17) & " " & _
 t(i, 18) & Chr(10) & t(i, 19) & " " & t(i, 20) & " " & t(i, 21)
 Else
 t1(x, 9) = t(i, 14) & Chr(10) & t(i, 15) & " " & t(i, 16) & " " & t(i, 17) & " " & _
 t(i, 18) & Chr(10) & t(i, 19) & " " & t(i, 20) & " " & t(i, 21)
 End If
 
 If t(i, 23) = "" Then
 t1(x, 10) = t(i, 24) & " " & t(i, 25) & " " & t(i, 26) & " " & _
 t(i, 27) & " " & t(i, 28) & Chr(10) & " " & t(i, 29) & " " & t(i, 30)
 Else
  t1(x, 10) = t(i, 23) & Chr(10) & t(i, 24) & " " & t(i, 25) & " " & t(i, 26) & " " & _
 t(i, 27) & " " & t(i, 28) & Chr(10) & " " & t(i, 29) & " " & t(i, 30)
 End If
 
 t1(x, 11) = t(i, 9): t1(x, 12) = t(i, 22): t1(x, 13) = t(i, 33): t1(x, 14) = t(i, 43): t1(x, 15) = t(i, 44)
 
 Next i
 Feuil9.[c15].Resize(x, 15) = t1
End Sub
 
Dernière édition:

Olya

XLDnaute Junior
Re : Concaténer des colonnes, réorganiser et transférer...

Bonsoir laetitia90

1000 merci pour le temps que tu accordes à mon sujet...

J"apprecie beaucoup la méthode redim / tablo c'est quelque chose qui me permet d'apprendre des choses que je ne maitrise pas vraiment.. c'est du tout en un on concatene /deplace / etc.. c'est une partie importante d'avancée sur mon sujet :)
---
par ailleurs veux tu m'expliquer cette écriture : t1(x, 1) = t(i, 36): t1(x, 2) = t(i, 1):
je comprends que t1 est le tablo virtuel et qui reçoit le tablo t et les deux points c'est donc un separteur de colonne?

----
toujours dans mon même sujet , mon tableau à traiter je le récupere par formule depuis un classeur fermé..
et j'ai des difficultés à avoir la dernière ligne de ce classeur fermé ..( problème de syntax )..



Set WbkSource = ("C:\Users\Olya\Desktop\Dossiers\toto.xls")
DernLigne = WbkSource.Sheets("Feuil1").Cells.Find("*", , , , xlByRows, xlPrevious).Row

ceci fonctionne mais ça ouvre le classeur helas.. et sans le mot open ça ne tourne pas rond non plus..

quelle syntaxe faut-il pour récuper la dernière ligne d'un sheets sans ouvrire le classeur ?
merci
 
Dernière édition:

laetitia90

XLDnaute Barbatruc
Re : Concaténer des colonnes, réorganiser et transférer...

re, tous:)

les 2 : renvoi a la ligne
t1(x, 1) = t(i, 36): t1(x, 2) = t(i, 1): t1(x, 3) = t(i, 3): t1(x, 4) = t(i, 6)
idem
t1(x, 1) = t(i, 36)
t1(x, 2) = t(i, 1)
t1(x, 3) = t(i, 3)
t1(x, 4) = t(i, 6)


pour le reste il faut t'interesser a ADO

va faire un tour sur le site de l'ami jacques Boisgontier:) tu verras les methodes a utiliser

tu tapes JB excel dans google tu vas trouver puis ADO

ps si tu t'interesse egalement au tableau idem il a une page qui explique tout ca

attention quand meme si tu demarre dans la programation il faut deja bien maitriser les bases au depart
donc il faut pas "bruler" les etapes:)
 
Dernière édition:

Olya

XLDnaute Junior
Re : Concaténer des colonnes, réorganiser et transférer...

Bonjour Laetitia..

Avec le boulot ..et un emploi du temps chargé ..je ne pouvais pas tellement être disponible...
je veux tout simplement te dire que ce que tu m'as proposé est bien sympa (MERCI)..c'est une porte d'entrée au tableaux à x dimentions .. ( tiens je parle comme une pro là ...)
attention ( je ne comprend pas tout mais j'ai pris le temps au moins d'apprecier et saisir ton code..et j'ai enfin pu le refaire).
--------
par contre si tu pouvais me dire ; comment modifier cette ligne :

Feuil9.[c15].Resize(x, 15) = t1

En effet: si je souhaite que le résultat aille dans la feuille d'un autre classeur ouvert et fermé..
- genre:monclasseur.mafeuille. .[c15].Resize(x, 15) = t1 ( pour ouvert?)
- genre:monclasseur.mafeuille. .[c15].Resize(x, 15) = t1 ( pour fermé ( si c'est possible)?)
- que signfie cette écriture [c15]. ( en clair que signfie les crochets en vba) ..

merci à toi et toute autre personne voulant bien répondre..

bisous et à bientôt
 

laetitia90

XLDnaute Barbatruc
Re : Concaténer des colonnes, réorganiser et transférer...

re :)

que dit cette ligne

Code:
 Feuil9.[c15].Resize(x, 15) = t1

dans ton fichier exemple
copy dans feuil9 c'est le code name de la feuille....... Rzsultat_Attendu

tu peus renommee autant de fois cette feuille pour vba elle resteras toujours feuil9
dans vba projet tu peus le voir on aurait tres bien pu ecrire

Code:
Sheets("Rzsultat_Attendu").[c15].Resize(x, 15) = t1



les crochets font appel a la methode evaluate regarde l'aide sur le sujet comme ecris seulement pour simplifier le code

j'aurais du ecrire

Code:
Feuil9.Range("c15").Resize(x, 15) = t1

ou

Code:
Feuil9.Cells(15, 3).Resize(x, 15) = t1

ne pas utiliser dans des boucles avec des conditions va ralentir la vitesse d'execution du code

utiliser cells , range bien mieux

le 15 correspond au nombre de colonnes que je vais ecrire.... regarde l'aide pour resize

autrement pour faire simple sans utiliser ADO
on peut faire cela sur le bureau j'ai mis un fichier name = reception.xls

attention le chemin doit être complet

Code:
Sub es()
Dim t(), t1(), x As Long, i As Long
 Application.ScreenUpdating = 0 'pas de mise a jour ecran
 t = Feuil8.Range("a15:aw" & Feuil8.Cells(Rows.Count, 1).End(3).Row)
 ReDim t1(1 To UBound(t), 1 To 49)
 For i = 1 To UBound(t)
 x = x + 1
 t1(x, 1) = t(i, 36): t1(x, 2) = t(i, 1): t1(x, 3) = t(i, 3): t1(x, 4) = t(i, 6)
 t1(x, 5) = t(i, 49): t1(x, 6) = t(i, 2): t1(x, 7) = t(i, 35)
 t1(x, 8) = t(i, 10) & " " & t(i, 11) & Chr(10) & t(i, 12)
 
 If t(i, 14) = "" Then
 t1(x, 9) = t(i, 15) & " " & t(i, 16) & " " & t(i, 17) & " " & _
 t(i, 18) & Chr(10) & t(i, 19) & " " & t(i, 20) & " " & t(i, 21)
 Else
 t1(x, 9) = t(i, 14) & Chr(10) & t(i, 15) & " " & t(i, 16) & " " & t(i, 17) & " " & _
 t(i, 18) & Chr(10) & t(i, 19) & " " & t(i, 20) & " " & t(i, 21)
 End If
 
 If t(i, 23) = "" Then
 t1(x, 10) = t(i, 24) & " " & t(i, 25) & " " & t(i, 26) & " " & _
 t(i, 27) & " " & t(i, 28) & Chr(10) & " " & t(i, 29) & " " & t(i, 30)
 Else
  t1(x, 10) = t(i, 23) & Chr(10) & t(i, 24) & " " & t(i, 25) & " " & t(i, 26) & " " & _
 t(i, 27) & " " & t(i, 28) & Chr(10) & " " & t(i, 29) & " " & t(i, 30)
 End If
 
 t1(x, 11) = t(i, 9): t1(x, 12) = t(i, 22): t1(x, 13) = t(i, 33): t1(x, 14) = t(i, 43): t1(x, 15) = t(i, 44)
 Next i
 Workbooks.Open Filename:="C:\Users\leti\Desktop\reception.xls" 'chemin complet
 Workbooks("reception.xls").Sheets("Feuil2").Cells(2, 1).Resize(x, 15) = t1 'copy en feuil2 cells=a2
 ActiveWorkbook.Save 'sauvegarde le fichier
 ActiveWorkbook.Close 'le ferme
 MsgBox "copy ok!!"
End Sub

fais deja des essais pour tester
 

Olya

XLDnaute Junior
Re : Concaténer des colonnes, réorganiser et transférer...

Bonjour Laetitia..


J'ai aimé tes éxplications, j'ai peu à peu créer les conditions necessaire pour tester .. et cela fonctionne parfaitement...
merci encore..

je voudrai profiter encore pour te poser quelques questions:

Dim t(), t1(), x As Long, i As Long
t = Feuil8.Range("a15:aw" & Feuil8.Cells(Rows.Count, 1).End(3).Row)
ReDim t1(1 To UBound(t), 1 To 49)
For i = 1 To UBound(t)
x = x + 1
etc...

1) dans cette écriture comment puis-je faire pour ne copier que certaines lignes .. en effet je souhaite exclure les lignes contenant dans une cellule un mot donné exemple "X"..

Merci encore à toi :)
 

Discussions similaires

Réponses
12
Affichages
412

Statistiques des forums

Discussions
312 555
Messages
2 089 547
Membres
104 208
dernier inscrit
laura29180