XL 2013 Créer une boucle excel

Benoît75

XLDnaute Nouveau
Bonjour,

J'ai un problème avec excel. Je souhaite rechercher un taux façon Rercherche V mais pour plusieurs données. Les données étant aléatoire il peux y en avoir 5 comme 200 et je souhaiterais mettre en place une boucle VBA activable par un bouton afin qu'il puisse rechercher l'information que je souhaite.

J'ai 2 fichiers :

fichier 1 : là où se trouve la donnée que je recherche
fichier 2 : il s'agit d'une extraction des données dont j'ai besoin.

En gros je dois recherche le taux associé au numéro de contrat. Je ne sais pas si on peux faire cette recherche sur 2 fichiers distinct auquel cas il faudra rapatrier les données du fichier 2 dans le fichier 1 et non l'inverse.

Dans le fichier 1 le numéro de contrat se trouve à la colonne D et le taux que je recherche se trouve à la colonne Y (d'ailleurs dans ce fichier le nombre de contrat est également aléatoire il peut il y en avoir 1000 comme 10 000.
Dans le fichier 2 le numéro de contrat se trouve à la colonne F

Donc dans l'Ideal il faudrait que la macro crée une colonne taux dans le fichier 2 à la colonne N ou O en ayant comme intitulé "Taux Tese" et si cela n'est pas possible entre 2 fichier de tout rapatrier sur le fichier 1 dans un nouvel onglet en gardant les mêmes colonnes.
PS: j'ai dû enlever les infos inutiles du fichier 1 car le fichier est trop volumineux pour ici.

Merci par avance pour votre aide.

Cordialement.
Benoit.
 

Pièces jointes

  • fichier 2.xlsx
    20.7 KB · Affichages: 10
  • fichier 1.xlsx
    13.7 KB · Affichages: 7

vgendron

XLDnaute Barbatruc
Hello

un essai par macro à mettre dans un module standard

VB:
Sub Macro1()
Dim WbSource As Workbook
Dim WbDest As Workbook
Dim TabSource() As Variant
Dim TabDest() As Variant

Set WbDest = ActiveWorkbook
Nomfichier = Application.GetOpenFilename(, , "Fichier Source") 'demande le fichier source qui contient les infos à importer
If Nomfichier <> "" Then
    Workbooks.Open (Nomfichier) 'ouvre le fichier
    Set WbSource = ActiveWorkbook
End If
'
With WbSource.Sheets("Feuil1")
    TabSource = .UsedRange.Value 'récupère toutes les infos dans un tablo vba
End With

With WbDest 'on repasse sur le fichier de traitement
    .Activate
    With .Sheets("Feuil1")
        .Range("M1").Value = "Taux Tese" 'on ajoute l'intitulé de colonne
        TabDest = .UsedRange.Value 'on met toute la feuille dans un tablo vba
        For i = LBound(TabDest, 1) To UBound(TabDest, 1) 'pour chaque ligne
            For j = LBound(TabSource, 1) To UBound(TabSource, 1) 'on cherche le numéro de contrat dans le tablo source
                If TabDest(i, 6) = TabSource(j, 4) Then
                    TabDest(i, 13) = TabSource(j, 25) 'on copie le taux (colonne Y ==>colonne M)
                    Exit For
                End If
            Next j
        Next i
        .Range("A1").Resize(UBound(TabDest, 1), UBound(TabDest, 2)) = TabDest 'on colle le résultat dans la feuille
    End With
End With
WbSource.Close False 'on ferme le fichier source sans modif
End Sub
 

Benoît75

XLDnaute Nouveau
Bonjour Vgendron,

Je viens de tester ta macro et j'aurais quelques questions:
Est-ce que je dois modifier des choses dans la macro tel que "fichier source" ou "nomfichier"?
Dans le fichier 1 j'ai oublié d'ajouter qu'il y a plusieurs onglets et l'onglet qui m'intéresse c'est l'onglet "base" dois-je changer quelques chose pour que la macro fonctionne ?

Merci par avance pour ton aide.

Cordialement.
 

vgendron

XLDnaute Barbatruc
NomFichier, c'est juste une variable interne pour le VBA:
lorsque tu vas selectionner ton fichier sur le PC: la valeur de Nomfichier sera le chemin complet dudit fichier
==> pas besoin de modifier

pour l'onglet base
la. il faut modifier

With WbSource.Sheets("Feuil1")
par
With WbSource.Sheets("Base")
 

vgendron

XLDnaute Barbatruc
Fais un essai avec ce code

VB:
Sub Macro1()
Dim WbSource As Workbook
Dim WbDest As Workbook
Dim TabSource() As Variant
Dim TabDest() As Variant

Set WbDest = ActiveWorkbook
Nomfichier = Application.GetOpenFilename(, , "Fichier Source") 'demande le fichier source qui contient les infos à importer
If Nomfichier <> "" Then
    Workbooks.Open (Nomfichier) 'ouvre le fichier
    Set WbSource = ActiveWorkbook
End If
'
With WbSource.Sheets("Feuil1")
    fin = .Range("D" & .Rows.Count).End(xlUp).Row
    TabSource = .Range("A2:Z" & fin).Value 'récupère toutes les infos dans un tablo vba
End With

With WbDest 'on repasse sur le fichier de traitement
    .Activate
    With .Sheets("Feuil1")
        .Range("M1").Value = "Taux Tese" 'on ajoute l'intitulé de colonne
        TabDest = .UsedRange.Value 'on met toute la feuille dans un tablo vba
        For i = LBound(TabDest, 1) To UBound(TabDest, 1) 'pour chaque ligne
            For j = LBound(TabSource, 1) To UBound(TabSource, 1) 'on cherche le numéro de contrat dans le tablo source
                If TabDest(i, 6) = TabSource(j, 4) Then
                    TabDest(i, 13) = TabSource(j, 25) 'on copie le taux (colonne Y ==>colonne M)
                    Exit For
                End If
            Next j
        Next i
        .Range("A1").Resize(UBound(TabDest, 1), UBound(TabDest, 2)) = TabDest 'on colle le résultat dans la feuille
    End With
End With
WbSource.Close False 'on ferme le fichier source sans modif
End Sub
 

vgendron

XLDnaute Barbatruc
j'ai changé la partie "mise dans un tablo" de la feuille base
.usedrange==> prend TOUTE la zone utilisée dans la feuille
utilisée= contient des données OU une mise en forme est appliquée

c'est le cas des gens qui sélectionnent une colonne complète et applique un quadrillage.. par exemple
==> ca se voit tout de suite avec le curseur (ascenceur) de droite
si tu te places en bas du tablo qui contient des données==> ce curseur n'est pas tout en bas
lorsque tu places ce curseur tout en bas.. tu te retrouves avec la ligne 1048576 affichée

du coup, au lieu du usedrange (qui doit provoquer un dépassement de la taille autorisée du tablo vba?? si il y en a une) je detecte la dernière ligne de la colonne D qui contient des données (hors mise en forme)
et je limite le tablo à cette ligne
 

Discussions similaires

Réponses
6
Affichages
259