Rechercher une valeur dans une autre feuille

Résolu
cs_Alban83 Messages postés 24 Date d'inscription vendredi 3 juillet 2009 Statut Membre Dernière intervention 21 septembre 2010 - 4 mai 2010 à 16:44
cs_Alban83 Messages postés 24 Date d'inscription vendredi 3 juillet 2009 Statut Membre Dernière intervention 21 septembre 2010 - 5 mai 2010 à 10:51
Bonjours

J'ai une feuille nommé default ou il y a dans la colonne J'ai des code pays ( AA;DE....).
Dans une autre feuille nommé Regions, j'ai dans la colonne A les code pays, dans la B le pays correspondand et en C la region correspondant (Europe, Asie..).
J'ai fait un prg pour que la feuille default recupere la region dans la feuille Regions correspondant au code pays dans la colonne I.

Mais elle ne fonctionne pas, elle ne me donne pas la region.

Voici le code:

 tablo = Sheets("default").Range("A2:J" & Sheets("default").Range("A65536").End(xlUp).Row)
 For n = LBound(tablo, 1) To UBound(tablo, 1)
   Set c = Sheets("Region").Columns(1).Find(tablo(n, 10), LookIn:=xlValues, LookAt:=xlWhole)
   If Not c Is Nothing Then
    tablo(n, 9) = Sheets("Region").Cells(c.Row, 3)
   End If
 Next n


Avez vous une idée?

Merci
Alban

2 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
4 mai 2010 à 20:36
Salut
Bizarre cette idée de transférer les données d'une feuille entière dans un tableau (défini comment le tableau ?)
Avec ça, tu risques une belle surcharge mémoire (inutile).

Même si ta fonction est correcte, seul ton tableau est altéré par cette recherche.
Il faudra penser à remettre le tableau dans les cellules de ta feuille Default pour voir le résultat.

Est-ce que ton programme passe sur la ligne tablo(n, 9) = ... ?
Pour le savoir, clique sur la ligne et appuie sur F9 : le programme s'y arrêtera s'il passe dessus.

Mais cette technique n'est pas la meilleure : mieux vaudrait utiliser le standard :
    Dim maCellule As Range
    For Each maCellule In Sheets("default").Range("A2:A4012")
      ' Une seule colonne suffit dans ce Each : tu pourras pointer vers
      '   les cellules voisines de la même ligne grâce à .Offset, exemple
      Set c = Sheets("Region").Columns(1).Find(maCellule.Offset(0, 9).Value, _
                                               LookIn:=xlValues, _
                                               LookAt:=xlWhole)
      ' ...
    Next
.Offset(0, 9) désignera ici la cellule située sur la même ligne (0) et à la colonne située 9 colonnes à droite (+9).
Comme maCellule est forcement une cellule de la colonne A (définie dans le Range du Each), ça correspond donc à la colonne J - à toi de voir si c'est la bonne

Bien sûr, je te laisse faire de même pour l'affectation de Region (maintenant que tu as compris le fonctionnement de Offset).

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3