Prendre données entre deux classeurs

  • Initiateur de la discussion Initiateur de la discussion Laguich
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

L

Laguich

Guest
Bonjour à tous,

J'ai un classeur avec environ 67000 lignes sur 3 colonnes et un deuxième avec environ 16000 lignes sur 3 colonnes également.

J'ai fait une macro pour qu'il recherche dans le classeur 2 les réferences identiques dans le classeur 1 et y ajoute en 4eme colonne la valeur de la 3eme colonne du classeur 2.
Code:
Sub test()
Dim wb As Workbook
Dim ws As Worksheet
Set wb = Workbooks("Base de données")
Set ws = wb.Worksheets("SOURCE")
 
Dim wb2 As Workbook
Dim ws2 As Worksheet
Set wb2 = Workbooks("SOURCECHERRE")
Set ws2 = wb2.Worksheets("Cherre")

Dim last_source As Range
Dim last_base As Range
 
Set last_source = ws.Range("a2:a67000")
Set last_base = ws2.Range("a1:a16000")
 
Dim row_source As Range
Dim row_base As Range
 
For Each row_source In last_source
    For Each row_base In last_base
        If row_source.Value = row_base.Value Then
            row_source.Offset(0, 4).Value = row_base.Offset(0, 3).Value
         End If
 
    Next
Next
End Sub
Cela marche quand je réduis à 80 lignes mais sur le total ça plante excel.
En faite il parcours toutes les lignes même si il a trouve la référence il continue la recherche jusqu'au bout avant de passer à la suivante.
Comment faut il proceder?

Merci d'avance.
 
Re : Prendre données entre deux classeurs

Bonjour,

pas testé bien sur, mais modifie peut être la boucle ainsi :
Code:
For Each row_source In last_source
    For Each row_base In last_base
        If row_source.Value = row_base.Value Then
            row_source.Offset(0, 4).Value = row_base.Offset(0, 3).Value
exit for         
End If
 
    Next
Next

bonne journée
@+
 
Re : Prendre données entre deux classeurs

Effictevement je n'avais pas pensé à sortir de la boucle comme cela.
Mais malgré tout après test, cela fait planté malgré tout.
Est ce faisable OU trop gourmand au vue du nombre de ligne à parcourir?
 
Dernière modification par un modérateur:
Re : Prendre données entre deux classeurs

Re,

peut être préférable de déterminer précisement les dernières lignes...

Code:
Set last_source = ws.Range("a2:a" & Cells(Rows.Count, 1).End(xlUp).Row)
Set last_base = ws2.Range("a1:a" & Cells(Rows.Count, 1).End(xlUp).Row)
 
Re : Prendre données entre deux classeurs

Merci pour tes réponses rapides et très utile.
J'ai fais l'essai en passant le classeur 1 à 10000 au lieu de 68000 et cela fonctionne mais qd je passe a 20000 cela plante .
Peut etre que cela est vraiment trop lourd comme demande.
 
Re : Prendre données entre deux classeurs

J'ai bien tenu compte de l'exit for.
Quand je lance la procédure, Excel ne réponds plus si j'active une fenêtre car je pense que cela utilise trop de ressource. Mais pas de vrai erreur sur la macro en elle meme.
 
Re : Prendre données entre deux classeurs

Re,

je parlais de la modif apportée post #4 sur la détermination de la dernière ligne...

Code:
Set last_source = ws.Range("a2:a" & Cells(Rows.Count, 1).End(xlUp).Row)
Set last_base = ws2.Range("a1:a" & Cells(Rows.Count, 1).End(xlUp).Row)
 
Re : Prendre données entre deux classeurs

Re,

peut être mettre un "doevents" dans ta boucle...

Code:
For Each row_source In last_source
    For Each row_base In last_base
        DoEvents

le mieux serait aussi d'utiliser des tableaux virtuels, serait plus rapide en plus, tu trouveras plein d'exemples sur le forum...
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

  • Question Question
Microsoft 365 Code VBA
Réponses
7
Affichages
985
Réponses
3
Affichages
852
Réponses
5
Affichages
917
LeSaintKebab
L
D
Réponses
2
Affichages
1 K
Dafaka7
D
R
  • Question Question
Réponses
1
Affichages
1 K
Retour