concatenation de 2 fichiers

concatenation de 2 fichiers - VB/VBA/VBS - Programmation

Marsh Posté le 23-10-2008 à 22:37:34    

Bonjour
j'ai actuellement 2 sheets Excel comme ci-dessus
malheureusement des informations importantes se trouvent sur les 2 tables
pour info, chaque tables a 20 colonnes environ et 5000 à 20000 lignes....
je voudrais condenser les 2 tables de la façon ci dessous afin de pouvoir mieux traiter les données
avec un tableau croisé dynamique par la suite
j'ai déja fais une macro pour nettoyer les tables de ligne vides, ou supprimer les colonnes inutiles
mais je bloque un peu pour choisir la meilleure facon de condenser les 2
 
sheet1
identifiant etat date
toto ne 01/08/1945
toto marie 01/02/1964
toto mort 01/04/2007
titi ne 01/06/1978
titi marie 01/09/1990
 
sheet2
identifiant prenom nom adresse
toto prenomtoto nomtoto 42 rue de la repunlique
titi prenomtiti nomtiti 1 bd de l'océan
 
resultat
 
sheet3
identifiant etat date identifiant2 prenom nom adresse
toto ne 01/08/1945 toto prenomtoto nomtoto 42 rue de la repunlique
toto marie 01/02/1964 toto prenomtoto nomtoto 42 rue de la repunlique
toto mort 01/04/2007 toto prenomtoto nomtoto 42 rue de la repunlique
titi ne 01/06/1978 titi prenomtiti nomtiti 1 bd de l'océan
titi marie 01/09/1990 titi prenomtiti nomtiti 1 bd de l'océan
 
quelqu'un saurait faire un boucle pour arriver a ce resultat (sheet3)
je réussi, mais c'est long, la boucle est surement mal programmée
de plus elle bugue si j'ai une ligne presente dans sheet1 et pas dans sheet2


Message édité par daniel-12 le 24-10-2008 à 21:45:17
Reply

Marsh Posté le 23-10-2008 à 22:37:34   

Reply

Marsh Posté le 24-10-2008 à 21:42:44    

Code :
  1.     'recuperation du nombre de ligne a trater dans Feuil3
  2.    
  3.     Sheets("Feuil1" ).Select
  4.     Cells.Select
  5.     Selection.Copy
  6.     Sheets("Feuil3" ).Select
  7.     Range("A1" ).Select
  8.     ActiveSheet.Paste
  9.     Sheets("Feuil3" ).Select
  10.     Range("A1" ).Select
  11.     Selection.CurrentRegion.Select
  12.     Nbligne = Selection.Rows.Count - 1
  13.    
  14.     'boucle
  15.     For i = 1 To Nbligne + 1
  16.     VarNom = Sheets("Feuil3" ).Range("A" & i).Value
  17.     Sheets("Feuil2" ).Select
  18.     Columns("A:A" ).Select
  19. On Error GoTo introuvable
  20.     Selection.Find(What:=VarNom).Activate
  21.     nligne = ActiveCell.Row
  22.     Range("A" & nligne & ":D" & nligne).Select
  23.     Selection.Copy
  24.     Sheets("Feuil3" ).Select
  25.     Range("D" & i).Select
  26.     ActiveSheet.Paste
  27. introuvable:
  28.     Next i


 
 
En fait la macro que j'ai fais fonctionne mais a une condition
il faut que titi, toto, ect... soit sur les 2 feuilles
sinon ça plante, .. je bloque


Message édité par daniel-12 le 24-10-2008 à 21:46:16
Reply

Marsh Posté le 25-10-2008 à 13:43:12    

Bonjour,
regarder du côté de "recherchev"

Reply

Marsh Posté le 25-10-2008 à 22:44:16    

Merci,  
je viens de decouvrir cette formule et elle me semble bien utile, dans certains cas
 
par contre mes feuilles d'origines, (1 et 2) ont 18 et 23 colonnes
et pas loins de 40000 à 50000 lignes  :love:  
 
il faudrait doc que je fasse une macro qui ecrive cette formule sur 18 x 50 000 cellules
la je crois que ça va encore aller moins vite que ma solution
 
Je vais tester que quelque colonne pour voir

Reply

Marsh Posté le 26-10-2008 à 06:39:16    

Bonjour,
tu écris la formule sur une cellule et tu l'étends....

Reply

Marsh Posté le 26-10-2008 à 10:33:15    

Bonjour?
 
Avec la fonction rechercheV tu peux pas faire ça ?
Ci dessous extrait de l'aide Excel sur la fonction rechercheV
Syntaxe
"RECHERCHEV(valeur_cherchée;table_matrice;no_index_col;valeur_proche)
valeur_cherchée    est la valeur à trouver dans la première colonne de la matrice. L'argument valeur_cherchée peut être une valeur, une référence ou une chaîne de texte.
table_matrice    est la table de données dans laquelle est exécutée la recherche de la valeur. Utilisez une référence à une plage ou un nom de plage, par exemple Base de données ou Liste."


Message édité par mrnegre le 26-10-2008 à 10:36:01
Reply

Marsh Posté le 26-10-2008 à 11:59:30    

Oui apparement la fonction recherchev irait très bien pour faire ce que je veux
 
Bien entendu, j'ai fait une copie de la formule en l'étendant
mais la ou cela coince, c'est la durée de traitement
 
Mes fichiers d'origines font 2 et 7mo
avec ma première solution, le fichier resultat fait 10mo
c'etait que tu texte sans formule
donc rapide
 
Par contre si j'utilise recherchev, le fichier résultat fait 64mo et mets 10mn avant de me donner la main pour chaque modif
il y a trop de formule
 
Voici une des formules
=RECHERCHEV(A2;Structure!$A$2:$Z$65536;7)  
 
A2 c'est la valeur à rechercher
Structure!$A$2:$Z$65536  c'est la zone sur laquelle on fait la recherche de de la valeur A2
7 c'est le n° de colonne dont on veut recuperer la valeur


Message édité par daniel-12 le 26-10-2008 à 12:05:38
Reply

Marsh Posté le 26-10-2008 à 21:14:35    

après avoir fais plussieurs test, la solution avec recherchev est bien trop longue   :(  
 
quelqu'un a une idée du problème qu'il y a sur la boucle que j'ai fait ?

Reply

Marsh Posté le 27-10-2008 à 07:42:22    

Bonjour,
à améliorer pour gagner du temps
 
  Sub clacla()
Application.ScreenUpdating = False
 
 Sheets("Feuil1" ).Select
    Cells.Select
    Selection.Copy
    Sheets("Feuil3" ).Select
    Range("A1" ).Select
    ActiveSheet.Paste
 
    Sheets("Feuil3" ).Select
    Range("A1" ).Select
    Selection.CurrentRegion.Select
    Nbligne = Selection.Rows.Count
   
    'boucle
    For i = 1 To Nbligne
    VarNom = Sheets("Feuil3" ).Range("A" & i).Value
    Sheets("Feuil2" ).Select
    Columns("A:A" ).Select
'On Error GoTo introuvable
Dim fifi As Range
Set fifi = Selection.Find(What:=VarNom)
    If Not fifi Is Nothing Then
    fifi.Select
    nligne = ActiveCell.Row
    Range("A" & nligne & ":D" & nligne).Select
    Selection.Copy
    Sheets("Feuil3" ).Select
    Range("D" & i).Select
    ActiveSheet.Paste
    End If
'introuvable:
    Next i
Sheets("feuil3" ).Select
Application.ScreenUpdating = True
End Sub

Reply

Marsh Posté le 27-10-2008 à 21:55:44    

Impéccable
 
la boucle fonctionne sans bug même dans le cas de ligne inexistante dans une des feuilles
 
pour la vitesse, pas d'amélioration notable
 
 
Merci !!
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed