[Résolu] Transfert partiel de données entre tableaux selon des références.

Franckxxx

XLDnaute Junior
Bonjour à tous!

J'essaye de faire une mise à jour partielle d'un tableau (Feuil1) de données à partir d'un autre tableau(Feuil2).
J'illustre par un exemple , dans le fichier joint, les principaux cas particuliers de mon problème. Le tableau réel fait 61 colonnes et possède beaucoup de lignes (>1000) dont le nombre varie car des lignes sont ajoutées régulièrement.

Concrètement, je tente de faire un comparaison entre les Ref (Feuil1, colonne K et Feuil2, colonne B), lorsque les Ref sont identique alors le Pu de la Feuil2 vient écraser le Pu de la Feuil1 associé et le Pe est copié/collé.

Étant débutant en VBA, mes tentatives ont été vaines malgré la recherche de d'exemples proches sur ce forum.
Toute aide, même partielle serais très appréciée.
Merci à vous! :)
 

Pièces jointes

  • Classeur1.xls
    25.5 KB · Affichages: 57
  • Classeur1.xls
    25.5 KB · Affichages: 58
  • Classeur1.xls
    25.5 KB · Affichages: 55
Dernière édition:

Franckxxx

XLDnaute Junior
Re : Transfert partiel de données entre tableaux selon des références.

Quelqu'un connaitrais-t-il un problème similaire duquel je pourrais m'inspirer pour me débloquer?
Je cherche à résoudre ce problème à l'aide de deux boucles composées en For mais je n'obtiens pas de résultat convaincant pour le moment.

Merci à vous,
 

Paf

XLDnaute Barbatruc
Re : Transfert partiel de données entre tableaux selon des références.

Bonjour

un code à tester

Code:
Sub MisAJour()
 Dim DerLig1 As Long, DerLig2 As Long, i As Long, j As Long, TabIni, TabRef

 DerLig1 = Worksheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row
 DerLig2 = Worksheets("Feuil2").Range("B" & Rows.Count).End(xlUp).Row
 TabIni = Worksheets("Feuil1").Range("A2:N" & DerLig1)
 TabRef = Worksheets("Feuil2").Range("B4:D" & DerLig2)

 For i = LBound(TabRef) To UBound(TabRef)
    For j = LBound(TabIni) To UBound(TabIni)
        If TabRef(i, 1) = TabIni(j, 11) Then
            TabIni(j, 13) = TabRef(i, 2)
            TabIni(j, 14) = TabRef(i, 3)
            Exit For
        End If
    Next
 Next

 Worksheets("Feuil1").Range("A2").Resize(UBound(TabIni, 1), UBound(TabIni, 2)) = TabIni
    
End Sub

A+
 

Franckxxx

XLDnaute Junior
Re : Transfert partiel de données entre tableaux selon des références.

Bonjour Paf,

Le code ressemble effectivement à celui que vous m'aviez fournis dans une autre discussion. J'avais repris cette idée mais avais fait quelques erreurs qui empêchaient mon code de fonctionner.
Je vais essayer de l'adapter à mon fichier originel.

Par contre je ne comprend pas très bien cette partie de code:
(UBound(TabIni, 1), UBound(TabIni, 2))
dans cette ligne de code:
Worksheets("Feuil1").Range("A2").Resize(UBound(TabIni, 1), UBound(TabIni, 2)) = TabIni
Pourriez vous m'éclairer sur sa fonction?

Merci à vous! :)
 

Paf

XLDnaute Barbatruc
Re : [Résolu] Transfert partiel de données entre tableaux selon des références.

Re,

TabIni est un tableau à 2 dimensions contenant la plage A2:N dernière ligne (l'ensemble des données sans la ligne de titre)

après mise à jour des éléments, on va recopier ce tableau dans la feuille (les données existantes vont être "écrasée")

Mais pour le copier il faut définir la taille de l'emplacement
c'est le but de resize auquel il faut spécifier le nombre de ligne et le nombre de colonne

ubound(tabini,1) donne le nombre d'élément de la première dimension (ce sera le nombre de lignes)
ubound(tabini,2) donne le nombre d'élément de la deuxième dimension (ce sera le nombre de colonnes)

A+
 

Statistiques des forums

Discussions
312 102
Messages
2 085 304
Membres
102 857
dernier inscrit
Nony1931