Rechercher une valeur dans une autre feuille [Résolu]

Messages postés
24
Date d'inscription
vendredi 3 juillet 2009
Statut
Membre
Dernière intervention
21 septembre 2010
- - Dernière réponse : 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
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
59
3
Merci
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)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 121 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Jack
Messages postés
24
Date d'inscription
vendredi 3 juillet 2009
Statut
Membre
Dernière intervention
21 septembre 2010
0
Merci
Salut Jack

Merci pour ton aide.
ça fonctionne!
 Dim maCellule As Range
    For Each maCellule In Sheets("default").Range("A2:A" & lignes)
      Set c = Sheets("Region").Columns(1).Find(maCellule.Offset(0, 9).Value, _
                                               LookIn:=xlValues, _
                                               LookAt:=xlWhole)
                                               
        If Not c Is Nothing Then
            maCellule.Offset(0, 8) = c.Offset(0, 2).Value
        End If
    Next


Je voudrais savoir la difference entre:
maCellule.Offset(0, 8) = c.Offset(0, 2).Value

et
maCellule.Offset(0, 8) = Sheets("Region").Cells(c.Row, 3)


Enfet ma question est qu'apporte de mieux Offset?

Encore merci pour ton aide
Alban
Commenter la réponse de cs_Alban83