vba récupérer des colonnes d'un fichier A et les concaténer dans un fichier B

C@thy

XLDnaute Barbatruc
Bonjour le forum,

j'essaie de récupérer des colonnes d'un fichier A représentant la carrière d'individus
pour les concaténer dans une colonne d'un fichier B (exemple dans le classeur joint),
mais je me heurte à un problème de VBA...

déjà, je n'arrive pas à définir ma plage correctement:eek:, (et pourtant, ça, c'est facile...)

et pour copier c'est plus "soiux" car il y a des éléments qui sont dans l'un et pas dans l'autre et lycée de Versailles,

en plus il faut prendre 3 colonnes sur 4...

bref, c'est pas trop facile... et c'est pourquoi j'ai besoin de votre aide.

Un très grand Merci à tous ceux qui pourraient jeter un coup d'oeil à mon fichier et m'apporter une aide pour avancer.

Bisous bisous

C@thy
 

Pièces jointes

  • carriere.xls
    27 KB · Affichages: 67
  • carriere.xls
    27 KB · Affichages: 66
  • carriere.xls
    27 KB · Affichages: 67

job75

XLDnaute Barbatruc
Re : vba récupérer des colonnes d'un fichier A et les concaténer dans un fichier B

Re,

il ne faut pas prendre les colonnes fonctions (FONC1, FONC2 etc...) mais les 3 suivantes
Je ne comprends pas car c'est bien ce que fait la macro.

Dans la boucle For i = 12 To c(1, 256).End(xlToLeft).Column Step 4

on part de la colonne L (12) on traite cette cellule et les 2 suivantes, puis on se décale de 4 colonne (P T etc...).

P.S. pendant que j'y suis, je me suis trompée d'une colonne dans Feuil2 : les noms sont en col B (en A j'ai M. ou Mme)

Il te suffit plus bas d'écrire :

f2.Cells(lig, 2) = c
'---
lig = Application.Match(c, f2.[B:B], 0)
If IsError(lig) Then lig = f2.[B65536].End(xlUp).Row + 1
'---
f2.[A:I].Sort f2.[B1], Header:=xlYes 'tri


Attention en Feuil1, si ce n'est pas la colonne A qui est étudiée mais la colonne B, il faut aussi modifier :

Code:
For Each c In f1.Range("B2", f1.[B65536].End(xlUp))
  t = ""
  For i = 11 To c(1, 255).End(xlToLeft).Column - 1 Step 4
Edit : sur ce dernier code j'avais oublié de décaler la borne supérieure de i avec - 1.

A+
 
Dernière édition:

C@thy

XLDnaute Barbatruc
Re : vba récupérer des colonnes d'un fichier A et les concaténer dans un fichier B

oui, j'ai modifié à mon goût, maintenant , je te remercie, c'est SUPERRRR!!!

j'ai retiré le tri, car c'est déjà trié dans les deux

Mille fois merci et @ bientôt

C@thy
 

C@thy

XLDnaute Barbatruc
Re : vba récupérer des colonnes d'un fichier A et les concaténer dans un fichier B

Merci Gérard, j'avais corrigé comme suit :
Code:
Option Explicit
 
Sub EssaiCarriere()
Dim f1 As Worksheet, f2 As Worksheet, c As Range
Dim t As Variant, i%, lig As Variant
Set f1 = Sheets("Feuil1") 'Workbooks("BDD_carrière.xls").
Set f2 = Sheets("Feuil2") 'Workbooks("Resultat.xls").
For Each c In f1.Range("A2", f1.[A65536].End(xlUp))
  t = ""
  For i = 13 To c(1, 256).End(xlToLeft).Column Step 4
    t = Array(t, c(1, i), Right(c(1, i + 1).Text, 4), Right(c(1, i + 2).Text, 4))
    t = Trim(Join(t))
  Next
  lig = Application.Match(c, f2.[B:B], 0)
  If IsError(lig) Then lig = f2.[B65536].End(xlUp).Row + 1
  f2.Cells(lig, 2) = c
  f2.Cells(lig, 9) = t
Next
'f2.[A:I].Sort f2.[B1], Header:=xlYes 'tri
f2.[I:I].WrapText = True 'renvoi à la ligne
f2.Rows("2:65536").AutoFit 'ajustement automatique
f2.Activate
End Sub

Un grand merci à toi, cette macro me sert énormément,
je vais probablement l'adapter pour récupérer d'autres infos dans d'autres fichiers et les mettre dans les colonnes à la suite.

Bises

Edit : bizarrement, ça fonctionne beaucoup mieux avec :
Code:
If IsError(lig) Then lig = f2.[A65536].End(xlUp).Row + 1
:confused::confused:


C@thy
 
Dernière édition:

C@thy

XLDnaute Barbatruc
Re : vba récupérer des colonnes d'un fichier A et les concaténer dans un fichier B

Coucou,

encore une petite question, si tu permets,

comment pourrais- je adapter
For i = 13 To c(1, 256).End(xlToLeft).Column Step 4
t = Array(t, c(1, i), Right(c(1, i + 1).Text, 4), Right(c(1, i + 2).Text, 4))

pour concaténer le contenu des colonnes 32 a 39 + 42 a 49?
pour l'instant j'ai fait 32 a 49(!) :
For i = 32 to 49
t = Array(t, c(1, i))

Merci a toi et une brassée de bisous

C@thy
 

job75

XLDnaute Barbatruc
Re : vba récupérer des colonnes d'un fichier A et les concaténer dans un fichier B

Bonjour C@thy :)

Normalement tu peux concaténer ainsi :

Code:
t = ""
For i = 32 To 49
  If i < 40 Or i > 41 Then t = t & " " & c(1, i)
Next
t = Application.Trim(t) 'SUPPRESPACE
Il faudrait quand même voir le fichier car apparemment ce n'est plus le même que précédemment.

A+
 

job75

XLDnaute Barbatruc
Re : vba récupérer des colonnes d'un fichier A et les concaténer dans un fichier B

Re,

Si tu veux utiliser un autre séparateur, par exemple "#" :

Code:
t = ""
For i = 32 To 49
  If i < 40 Or i > 41 Then _
    t = t & IIf(c(1, i) = "", "", "#" & c(1, i))
Next
t = Mid(t, 2)
A+
 

Discussions similaires

Réponses
12
Affichages
318

Statistiques des forums

Discussions
312 215
Messages
2 086 331
Membres
103 188
dernier inscrit
evebar