[VBA] Rechercher/Copier/Coller cellules

Maxoverfred

XLDnaute Occasionnel
Bonjour, autant avec les fonctions Vlookup on peut se débrouiller, autant une fois dans vba, je suis perdu car je ne trouve pas les équivalences.

Donc voici mon problème.

Sheet1:

'A' 'B'
BEL 130
POL 450
RUS 625

ITA 319
ESP 417

Sheet2:

'C' 'D' 'E' 'F'
BEL 521 524
ITA 418 854
POL 412 548
RUS 417 968
ESP 415 548

Je dois donc inspecter ma colonne A de ma Sheet1, à chaque fois que je trouve une valeur, rechercher la valeur équivalente dans la sheet 2 et coller la valeur correspondant (colonne 'B') dans la colonne 'F'.

Certains me diront mais pourquoi utilises-tu le code ? et bien parce que je ne peux pas faire cela directement via une formule dans une cellule, car je dois uniquement le faire à un interval régulier et mes données de la sheet1 change constamment.. donc si quelqu'un m'a compris ce serait bien.. sinon.. beh comme d'hab, je vais chercher et me rendre compte que je me complique encore la chose...


Merci d'avance.
 

Robert

XLDnaute Barbatruc
Repose en paix
Re salut Maxoverfred, salut le forum,

Ce code risque d'être un peu long mais il devrait convenir :

Sub Macro1()
Dim cf1 As Range
Dim cf2 As Range
For Each cf1 In Feuil1.Range('A1:A' & Feuil1.Range('A65536').End(xlUp)).Row
For Each cf2 In Feuil2.Range('C1:C' & Feuil2.Range('C65536').End(xlUp)).Row
If cf1.Value = cf2.Value Then
cf2.Offset(0, 3).Value = cf1.Offset(0, 1).Value
Exit For
End If
Next cf2
Next cf1
End Sub

Message édité par: Robert, à: 10/05/2005 17:22
 

Maxoverfred

XLDnaute Occasionnel
Sacré Robert, suis tombé dans le piège de celui qui sait pas analyser ce qu'on lui conseille didju ...me semblait bien que je comprenais rien à ce XLUp..
Bref, de la balle cette fonction, cela marche du tonerre.
Merci à vous deux.

Bonne journée à vous.
 

Maxoverfred

XLDnaute Occasionnel
Pour rester dans le même sujet... à savoir VBA manipulation de données .. car je cherche sur le net, mais je n'arrive pas rapidement à trouver une réponse et à la vue de vos connaissances.. autant les utiliser ;)

J'ai une range: (A2:F2) qui contient les mois (JAN, FEB..)
Je dois regarder dans cette range et comparer une valeur

Exemple

Si je trouve la valeur 'JAN' dans cette range, je dois prendre la lettre de la colonne (ex: 'C')


Ps: c'est en rapport avec mes données au dessus, étant donné que quand je colle les valeurs, je dois savoir dans quelle colonne je vais le faire en fonction du mois courant..

PS2: Après cela, je pense que j'aurai compris..enfin j'espère.. cette partie là du moins en vba.
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour le Maxoverfred, Chti160, le forum,

Désolé Max... mais j'ai rien compris à ta nouvelle question, Une range A2:F2 ne contient que 6 mois et si tu trouves 'JAN' pourquoi la colonne C ? et non pas A...
Bon on va faire comme ça... Tu vas prendre un café, tranquilement, te passer un peu d'eau sur le visage, et tu reconsidères le problème et surtout tu nous éclaires...
En parlant d'éclair, tu sais pourquoi Chirac dit toujours à Raffarin : 'mange un éclair '? Parce que ça fout droit...'
 

Maxoverfred

XLDnaute Occasionnel
Normal que vous comprenez pa, je suis Belge..
Bon, voici le fichier en annexe

Donc le but du jeu est ( je vais l'expliquer avec des mots simples :) )

J'ai ma cellule A1 dans ma feuille data, c'est une date(oh la belle date), je dois regarder dans ma feuille Manager Info, dans la range AP:BA, le mois correspondant et en fonction du nom de colonne, garder cette réference pour coller mes valeurs (= le code que vous m'avez gentillement donné avant et qui marche)

En clair: le 06/06/2005 -> 'JUN' -> il me faut la valeur 'AU'


Ps: j'ai déjà une formule pour convertir le numéro de colonne en lettre..

Merci...

Je sais pas mais j'ai l'impression quie je vais rester incompris :) pas grave..

Message édité par: maxoverfred, à: 11/05/2005 11:12
 

Robert

XLDnaute Barbatruc
Repose en paix
Re le Fil, le forum,

Moi je la jouerai Select Case, pas très élegant mais efficace :

Sub Macro1()
Dim mois As Byte
Dim col As String
mois = Month(DateValue(Sheets('data').Range('A1')))
Select Case mois
Case 1
col = 'AP'
Case 2
col = 'AQ'
Case 3
col = 'AR'
Case 4
col = 'AS'
Case 5
col = 'AT'
Case 6
col = 'AU'
Case 7
col = 'AV'
Case 8
col = 'AW'
Case 9
col = 'AX'
Case 10
col = 'AY'
Case 11
col = 'AZ'
Case 12
col = 'AB'
End Select
End Sub
 

Maxoverfred

XLDnaute Occasionnel
Bon stop, je pense que j'ai trouvé, j'arrête de vous casser la tête avec ce problème là.
Car dans votre code au début

cf2.Offset(0, 3).Value = cf1.Offset(0, 1).Value

C'est le '3' que je dois déterminer, et pour cela je peux utiliser une cellule temporaire et faire ceci:
MATCH(format(A1,mmm),'Manager Info'!AP2:BA2,0)

ou ceci

LValue = Switch(vmonth = 'JAN', 1, vmonth = 'FEB', 2, vmonth = 'MAR', 3, vmonth = 'APR', 4, vmonth = 'MAY', 5, vmonth = 'JUN', 6, vmonth = 'JUL', 7, vmonth = 'AUG', 8, vmonth = 'SEP', 9, vmonth = 'OCT', 10, vmonth = 'NOV', 11, vmonth = 'DEC', 12)

Merci à moi de me comprendre

Message édité par: maxoverfred, à: 11/05/2005 12:00

Message édité par: maxoverfred, à: 11/05/2005 13:34