3 pièce(s) jointe(s)
Code vba rapide avec la rechercheV pour prendre des données depuis une feuille et les coller dans une autre
Bonjour à tous le forum. J'espère que vous allez tous bien. Je suis nouveau dans le forum by the way.
Je dois développer une macro dans le cadre du développement des outils de mon entreprise. Il s'agit du suivi des créances clients. L'outil doit permettre de mettre à jour les soldes des comptes clients, tout en gardant les montants historiques des quatre derniers jours. Bon assez d'explications, mon problème est le suivant:
Pièce jointe 620325
- le classeur Excel contient deux feuilles intitulées respectivement "Comptes clients " et "Comptes histo". Les deux feuilles ont la même structure: ils contiennent des tableaux avec des colonnes intitulées *numéro du compte (col. E), *intitulé du compte, 4 colonnes *montants (col. K à O) avec les dates corresp. sur les entêtes . On doit être capable de mettre à jour les soldes dans "Comptes clients" et reprendre les soldes anciens correspondant dans les colonne K à N de "Comptes histo" et les coller dans la feuille "Comptes clients" à côté des soldes à jour. Pour cette dernière tâche j'ai trouvé le code ci-dessous sur internet, qui utilise la recherchev.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| Sub prendredonnées()
Dim plage As Range, plrech As Range, C As Range, Teste
With Sheets("Comptes Clients")
Set plage = .Range(.Cells(15, 5), .Cells(.Rows.Count, 5).End(xlUp))
End With
With Sheets("Comptes histo")
Set plrech = .Range(.Cells(15, 5), .Cells(.Rows.Count, 15).End(xlUp))
End With
For Each C In plage
Teste = Application.VLookup(C.Value, plrech, 6, False)
If Not IsError(Teste) Then
C.Offset(, 7).Value = Teste
Else
C.Offset(, 7).Value = "0"
End If
Next C
End Sub |
Cependant, l'exécution est diablement lente (30 minutes minimum, plus qu'il ne prend pour le traitement manuel :lol: A noter que la taille des comptes est volumineux (près de 65 000 lignes).
Si vous pouviez me suggérer une autre façon de faire, ça serait vraiment libérateur.
Merci d'avance.