cs_Alban83
Messages postés24Date d'inscriptionvendredi 3 juillet 2009StatutMembreDernière intervention21 septembre 2010
-
4 mai 2010 à 16:44
cs_Alban83
Messages postés24Date d'inscriptionvendredi 3 juillet 2009StatutMembreDernière intervention21 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
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)
cs_Alban83
Messages postés24Date d'inscriptionvendredi 3 juillet 2009StatutMembreDernière intervention21 septembre 2010 5 mai 2010 à 10:51
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