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

CHALET53

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

bonjour,

Set maplage = .Range(Cells(i, 12), Cells(derligne, dercolc)) *** a marche pas!!!

la variable s'appelle dercol 2 instructions au-dessus

a+

Quelle est la valeur de i ?

Tu appelle f1 les deux plages ?
 
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

merci Chalet53,

quand on est fatigué on ne voit plus rien, un oeil neuf est souvent le bienvenu.

d'où l'utilité du option explicit, n'est-ce pas? (hommage à Ti).

non, f1 et f2, en fait je ne sais pas trop comment m'y prendre,


retrouver dans la plage 2 les gens de ma plage 1 et mettre les bonnes infos en colonne I

Un grand merci à toi, je n'y voyais plus rien

Bizz

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

comme ça c'est mieux, mais c'est pas encore ça!
Code:
Dim maplage As Range, dercol as integer, derligne as integer
Set f1 = Workbooks("BDD_carrière.xls").Sheets("Feuil1")
 Set f2 = Workbooks("resultat.xls").Sheets("Feuil2")

With f1
dercol = .[IV1].End(xlToLeft).Column
derligne = .[A65535].End(xlUp).Row
Set maplage = .Range(Cells(2, 12), Cells(derligne, dercol))
End With
 
For i = 2 To derligne
   For Each c In maplage
       If IsNumeric(c.Value) Then
          concat = " '"
       Else
          concat = " "
       End If
libfonc = libfonc & concat & c.Value 'ici il faut le mettre en colonne I (y a-t-il une limite à 256 caractères???)
'comment faire?:confused: Une recherche du contenu de ma colonne A de feuil1 dans le colonne A de feuil2???:confused:
Next
Next
End Sub

Merci pour votre aide qui me serait utile.;)

Bonne journée (très ensoleillée:cool: sur Paris)
Bizz

C@thy
 

CHALET53

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

Re,

Je ne pige pas trop :
Dans ton module : à quoi sert ton set f2, il n'est pas utilisé dans ta procédure
Il faut mettre libfonc en colonne I (le i de ta boucle? : si oui, dans quel fichier, quelle feuille et quelle colonne ?)

A te lire
 

C@thy

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

merci à toi,

le but c'est de concaténer toutes les colonnes bleues de Feuil1 dans la colonne I de Feuil2, comme dans l'exemple que j'ai mis,

sauf qu'en réalité Feuil2 est dans un autre classeur (resultat.xls), mais dans mon exemple j'ai fait un seul classeur pour ne pas saturer le site.

Bizz

C@thy

Edit : c'est vrai que je m'y prends très mal, car en réalité je ne sais pas comment faire, mon code n'est pas bon... ni la façon de procéder...:eek::eek::eek:

C@thy
 
Dernière édition:

david84

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

Bonjour,
pas le temps de tout te faire mais juste histoire de te donner une idée :
Code:
Sub test()
Dim maplage As Range, dercol As Integer, derligne As Integer
Dim f1 As Worksheet, f2 As Worksheet
Dim PremAdr, c
Dim Entete As Range, PlageInfo As Range

    Set f1 = Sheets("Feuil1")
    Set f2 = Sheets("Feuil2")
    
    derligne = f1.[A65535].End(xlUp).Row
    dercol = f1.[IV1].End(xlToLeft).Column
    
    Set Entete = f1.Range(f1.Cells(1, 1), f1.Cells(1, dercol))
    Set c = Entete.Find("DEB_FONC", LookIn:=xlValues, lookat:=xlPart)
    If Not c Is Nothing Then
        PremAdr = c.Address
        Do
            Set PlageInfo = Range(c.Address).Offset(1).Resize(derligne - 1, 3)
            MsgBox PlageInfo.Address
            Set c = Entete.FindNext(c)
        Loop While Not c Is Nothing And c.Address <> PremAdr
    End If
End Sub
Avce ce code, tes différentes plages sont circonscrites.
A toi maintenant de voir ce que tu veux ramener à l'intérieur de ces plages et où tu veux les copier (travail à développer entre le Do...Loop While).
Avant de tester, je te conseille de réduire fortement ton nombre de colonnes en Feuil1 car sinon le nombre de MsgBox qui va s'afficher sera important.
A+
 

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, CHALET53, David,

Si j'ai bien compris :

Code:
Sub EssaiCarriere()
Dim f1 As Worksheet, f2 As Worksheet, c As Range
Dim t$, 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 = 12 To c(1, 256).End(xlToLeft).Column Step 4
    t = t & " " & c(1, i)
    t = t & " " & Right(c(1, i + 1).Text, 4)
    t = t & " " & Right(c(1, i + 2).Text, 4)
    t = Trim(t)
  Next
  lig = Application.Match(c, f2.[A:A], 0)
  If IsError(lig) Then lig = f2.[A65536].End(xlUp).Row + 1
  f2.Cells(lig, 1) = c
  f2.Cells(lig, 9) = t
Next
f2.[A:I].Sort f2.[A1], Header:=xlYes 'tri
f2.[I:I].WrapText = True 'renvoi à la ligne
f2.Rows("2:65536").AutoFit 'ajustement automatique
f2.Activate 'facultatif
End Sub
Fichier joint.

Nota : pour toto, Alain, une date ne va pas bien, il faudrait peut-être la corriger.

A+
 

Pièces jointes

  • carriere(1).xls
    45.5 KB · Affichages: 39

job75

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

Re,

Pour concaténer on peut aussi passer par un Array :

Code:
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 = 12 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.[A:A], 0)
  If IsError(lig) Then lig = f2.[A65536].End(xlUp).Row + 1
  f2.Cells(lig, 1) = c
  f2.Cells(lig, 9) = t
Next
f2.[A:I].Sort f2.[A1], Header:=xlYes 'tri
f2.[I:I].WrapText = True 'renvoi à la ligne
f2.Rows("2:65536").AutoFit 'ajustement automatique
f2.Activate 'facultatif
End Sub
Fichier (2).

A+
 

Pièces jointes

  • carriere(2).xls
    56.5 KB · Affichages: 40

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, je regarde ça et je te dis.

à savoir : la ligne de titre est remplie jusqu'au bout (IU) mais les colonnes en-dessous ne le sont pas forcément...

Bisous 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

Re,

Un renvoi à la ligne pour chaque période de carrière peut être utile :

Code:
Sub EssaiCarriere()
Dim f1 As Worksheet, f2 As Worksheet, c As Range
Dim t$, 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 = 12 To c(1, 256).End(xlToLeft).Column Step 4
    t = t & vbLf & c(1, i) & " " & Right(c(1, i + 1).Text, 4) _
      & " " & Right(c(1, i + 2).Text, 4)
  Next
  t = Mid(t, 2)
  lig = Application.Match(c, f2.[A:A], 0)
  If IsError(lig) Then lig = f2.[A65536].End(xlUp).Row + 1
  f2.Cells(lig, 1) = c
  f2.Cells(lig, 9) = t
Next
f2.[A:I].Sort f2.[A1], Header:=xlYes 'tri
f2.[I:I].WrapText = True 'renvoi à la ligne
f2.Rows("2:65536").AutoFit 'ajustement automatique
f2.Activate 'facultatif
End Sub
Si l'on veut ensuite traiter la colonne I ce sera plus facile de récupérer les périodes.

Fichier (3).

A+
 

Pièces jointes

  • carriere(3).xls
    56.5 KB · Affichages: 43

C@thy

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

Bravo Gérard, c'est presque ça :

il ne faut pas prendre les colonnes fonctions (FONC1, FONC2 etc...) mais les 3 suivantes, sinon,
c'est parfait!!! (le code est ciselé, comme d'hab!)...je ramènerai un souvenir de Jamaïque à Marie-Anna (à qui je donne le bonjour).
edit : ça nous donnera l'occasion de nous revoir, avant la prochaine rencontre XLD.

Mille merci à toi

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)

Big bisous

C@thy
 

Discussions similaires

Réponses
12
Affichages
317

Membres actuellement en ligne

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 187
dernier inscrit
ebenhamel