Fusion BD VBA

titine06

XLDnaute Junior
Bonjour,

J'ai deux bases de données qui ont la même structure, et que j'aimerai fusionner. Ces deux bases de données sont sur 2 fichiers excel différents: Alpha.xls et Beta.xls

J'aimerai que toute la feuille Beta.xls soit coller en dessous de la derniere ligne utilisée sur Alpha.xls

a savoir que les critères (colonnes de chaque BD) ne sont pas identiques.

J'aimerai que cette macro soit lancée depuis un 3 eme fichier.

Je ne connais pas assez le VBA pour faire ca, pouvez vous m'aider ?

Merci d'avance

titine
 

Pièces jointes

  • Beta.xls
    24.5 KB · Affichages: 66
  • Alpha.xls
    24.5 KB · Affichages: 72
  • Beta.xls
    24.5 KB · Affichages: 72
  • Alpha.xls
    24.5 KB · Affichages: 71
  • Beta.xls
    24.5 KB · Affichages: 67
  • Alpha.xls
    24.5 KB · Affichages: 77

titine06

XLDnaute Junior
Re : Fusion BD VBA

salut James007,

Actuellement oui pour certaines, mais j'aimerai que ca fasse un copier/coller bête et méchant, que les colonnes soit communes ou non:

l'idée: j'aménage mes BD avant la copie: inserer colonne/ ou supprimer , et ensuite j'active cette macro

merci



je reste a votre disposition !

Titine
 

titine06

XLDnaute Junior
Re : Fusion BD VBA

Bonjour,

Donc enfaite ce que j'aimerai arrivé à faire c'est:
-la macro cherche le nombre de ligne utilisé sur Alpha.xls
-la macro copier/colle en dessous de la derniere ligne utilisé par Alpha.xls, l'ensemble des lignes (à partir de la 2eme) de Beta.xls
-la macro se lance d'un autre fichier

A savoir: les colonne de Beta.xls & Alpha.xls ne sont pas lié, pas identiques: il est donc important que le copier/coller prenne en compte les vides (colonne vide).

Si vous avez des questions je reste dispo.

Merci d'avance

Titine
 
Dernière édition:

titine06

XLDnaute Junior
Re : Fusion BD VBA

Bonsoir,

un dernier essaie avec une petite ouverture:

Serait-il possible de faire une macro qui reconnait la dernier ligne utilisé sur l'ensemble des colonnes d'une feuille, afin qu'à partir de cette ligne, et jusqu'à la dernière ligne de la feuille je puisse coller une formule de recherche , je pense qu'en formule je peux m'en sortir et bidouller toute seule aprés.

Merci


Titine
 
Dernière édition:

titine06

XLDnaute Junior
Re : Fusion BD VBA

Bonjour James007,

J'arrive via l'enregistreur de macro à mon résultat:

Sub Macro2()
'
' Macro2 Macro
'

'
Windows("Beta.xls").Activate
Range("IC1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range("IC1:IV21").Select
Selection.Copy
Windows("Alpha.xls").Activate
Range("A12").Select
ActiveSheet.Paste
Windows("macro.xlsx").Activate
End Sub

La macro part d'un 3 eme fichier excel. Ouvre Beta. copie de A à XFD les lignes que je selectionne, puis les colles dans Alpha.
Le problème, c'est que pour l'exemple que j'ai fait (lorsque j'ai fait ce copier/coller) il y avait que 21 ligne concernée. Peut etre que demain il y en aura 48 ou 12 ou meme 3000. Et l'idée c'est d'automatiser cette tache quelque soit le nombre de ligne.

Donc j'imagine qu'il faut compter le nombre de ligne occupée, puis dire à la macro de copier le nombre de ligne occupés .

Auriez vous une idée?

Merci pour ton soutien James007


Titine
 

James007

XLDnaute Barbatruc
Re : Fusion BD VBA

Bonjour,

Pour définir la dernière ligne utilisée dans une feuille, le code peut être comme suit :
Code:
derlig = Workbooks("nomfichier").Sheets("nomfeuille").Cells(Cells.Rows.Count, "A").End(xlUp).Row

Cette instruction fonctionne en remplaçant nomfichier par le véritable nom du fichier,
en remplaçant nomfeuille par le véritable nom de la feuille, et éventuellement la lettre A doit être remplacée par la lettre de la colonne que l'on souhaite utiliser comme référence.

derlig est donc une variable qui, en début de code, doit être définie comme suit :
Code:
Dim der As Long

J'espère que ces explications sont suffisament claires

A +
:)
 
Dernière édition:

titine06

XLDnaute Junior
Re : Fusion BD VBA

Bonsoir,

Merci pour ta réponse très claire !

J'ai néanmoins deux petites questions:

- Y a t il une formule permettant de trouver la première ligne utilisée dans une feuille par rapport à une colonne ?

- Si oui, comment utilisées ces deux variable pour définir une plage?

Par exemple: je voudrais sélectionner la plage: 1ere ligne utilisée à la ligne définie par derlig .


Merci pour cette réponse qui m'aide beaucoup à comprendre !


Titine
 

Pierrot93

XLDnaute Barbatruc
Re : Fusion BD VBA

Bonjour,

regarde les codes ci-dessous si ils peuvent t'aider :
Code:
Dim x As Long, y As Long, z As Long, w As Long

x = Columns(2).Find("*", , xlValues, , 1, 1, 0).Row    'Première ligne colonne B
y = Columns(2).Find("*", , xlValues, , 1, 2, 0).Row    'Dernière ligne colonne B

z = Cells.Find("*", , xlValues, , 1, 1, 0).Row    'Première ligne de la feuille
w = Cells.Find("*", , xlValues, , 1, 2, 0).Row    'Dernière ligne de la feuille

A noter, la propriété "row", retournant une valeur de type "long" il est préférable de typer la variable comme tel... enfin c'est juste mon avis...

bonne journée
@+
 

James007

XLDnaute Barbatruc
Re : Fusion BD VBA

Bonjour à tous,

Pierrot93 a raison : il vaut mieux déclarer ce genre de variables comme Long ...
( je ne sais pas pourquoi j'ai tapé Double, puisque j'utilise toujours Long ...)
et pour les petits fichiers, on peut déclarer cette variable comme Integer ...
( les calculs se font encore plus rapidement ...)

A +
:)
 

titine06

XLDnaute Junior
Re : Fusion BD VBA

Bonsoir,

Merci pour vos réponses !! et désolés de vous répondre si tard, j'ai essayé de travaillé le code, mais ca me fait un peu galérer !
Donc j'en suis là: (j'ai un peu honte, car ce que j'ai fait n'a ni queue ni tete... mais bon..)

Dim x As Long, y As Long, z As Long, w As Long

Windows("Beta.xls").Activate
x = Columns(2).Find("*", , xlValues, , 1, 1, 0).Row 'Première ligne colonne B
y = Columns(2).Find("*", , xlValues, , 1, 2, 0).Row 'Dernière ligne colonne B
Range(x;y).Select
Selection.Copy
Windows("Alpha.xls").Activate
y = Columns(2).Find("*", , xlValues, , 1, 2, 0).Row + 1
Range(y).Select
ActiveSheet.Paste
end sub

Donc ca marche pas :(
Ce que j'aurai aimé, c'est que sur la fueille BETA, ca selectionne de la première ligne, a la dernière ligne "non vide" de la colonne B.
Que cette selection soit copiée
Que sur la Fueille ALPHA, le code cherche la dernière ligne utilisée de la fueille.
Une fois trouvée, ca "colle" sur la ligne d'en dessous .

Donc, n'y connaissant rien, j'ai essayé de bidouiller vos codes, mais ca marche pas...
Auriez vous une idée??

Je vous remercie d'avance.

Titine
 

Pierrot93

XLDnaute Barbatruc
Re : Fusion BD VBA

Bonjour titine, james

essaye ceci, les tests sont effectués sur la colonne B...
Code:
Dim x, y
x = Columns(2).Find("*", , xlValues, , 1, 1, 0).Row 'Première ligne colonne B
y = Columns(2).Find("*", , xlValues, , 1, 2, 0).Row 'Dernière ligne colonne B
'pour selectionner les lignes
Rows(x & ":" & y).Select
'pour selectionner la plage de la colonne en question
Range("B" & x, "B" & y).Select
bonne journée
@+
 

Discussions similaires

Statistiques des forums

Discussions
312 581
Messages
2 089 917
Membres
104 306
dernier inscrit
Bouhlal