Aide pour adaptation de code

ZeDave

XLDnaute Nouveau
Bonjour Forum !

J'aimerais adapter un code écrit par Maestro Boisgontier ci après :
Code:
Fonction Rechv()

Function rechv(champ As Range, cles As Range, valeurs As Range)
 a = cles
 b = valeurs
 c = champ
 Dim d()
 Set mondico = CreateObject("Scripting.Dictionary")
 For i = 1 To cles.Count
   mondico.Add a(i, 1), b(i, 1)
 Next i
 ReDim d(1 To champ.Count)
 For i = 1 To champ.Count
    d(i) = mondico.item(c(i, 1))
 Next i
 rechv = Application.Transpose(d)
End Function

Sub essai()
 
 [B2:B1000] = rechv([a2:a1000], [Noms], [Prenoms])
 [c2:c1000] = rechv([a2:a1000], [Noms], [Ages])

End Sub

En fait je souhaiterais récupérer les infos des 14 colonnes d'un onglets1 sur l'onglet2 sur lequel j'ai ma colonne "clés" en A.

j'ai bien essayé ça :
Code:
Sub essai()

With Sheets("onglet2")
[B2:B1000] = rechv([a2:a1000], Sheets("onglet1").Columns("A:A"), Sheets("onglet1").Columns("B:B"))
[c2:c1000] = rechv([a2:a1000], Sheets("onglet1").Columns("A:A"), Sheets("onglet1").Columns("C:C"))
[d2:d1000] =  rechv([a2:a1000], Sheets("onglet1").Columns("A:A"), Sheets("onglet1").Columns("D:D"))
[e2:e1000] =  rechv([a2:a1000], Sheets("onglet1").Columns("A:A"), Sheets("onglet1").Columns("E:E"))
[f2:f1000] =  rechv([a2:a1000], Sheets("onglet1").Columns("A:A"), Sheets("onglet1").Columns("F:F"))
etc....

End With
End Sub

mais ça marche po ! Quelqu'un pourrait me donner une piste pour traiter le problème ?

Merci par avance
 

ZeDave

XLDnaute Nouveau
Re : Aide pour adaptation de code

Bon j'avance à petit pas.
J'ai déterminé que la fonction est très bien comme elle est.
c'est mon Sub() qui pose problème. je l'ai modifié par :
Code:
Sub essai()
 
[B2:B100] = rechv([a2:a100], Sheets("onglet1").Range("A2:A100"), Sheets("onglet1").Range("b2:b100"))
[c2:c100] = rechv([a2:a100], Sheets("onglet1").Range("A2:A100"), Sheets("onglet1").Range("c2:c100"))
[d2:d100] = rechv([a2:a100], Sheets("onglet1").Range("A2:A100"), Sheets("onglet1").Range("d2:d100"))
[e2:e100] = rechv([a2:a100], Sheets("onglet1").Range("A2:A100"), Sheets("onglet1").Range("e2:e100"))
End Sub
le problème vient aussi des plages de cellules qui pour cet exemple est fixé à 100 lignes.
Si dans mon onglet1 je n'ai que 90 lignes de données, pouf le message d'erreur suivant s'affiche :
"Cette clé est déjà associé à un élément de cette collection".

Comment contourner ce problème ?

Merci par avance pour vos lumières.
 

ZeDave

XLDnaute Nouveau
Re : Aide pour adaptation de code

Aide de toi le ciel t'aidera ! hihi.:D

Comme quoi ça sert de poser des questions ! ça force à réfléchir à ce que l'on va demander du coup la réponse est apparu au milieu du désert.

Pour ceux que cela intéresse, il suffisait de passer par un activesheet.usedrange.rows.count. pour chaque Range

Tcho les forumeurs
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 677
Messages
2 090 824
Membres
104 677
dernier inscrit
soufiane12