utilisation cells.value

utilisation cells.value - VB/VBA/VBS - Programmation

Marsh Posté le 19-07-2012 à 19:35:11    

Bonjour,
 
j'ai recherché sur le forum un sujet proche du mien mais rien ne s'y rapporte,
je voudrais récupérer la valeur d'une cellule de la colonne A  pour la coller dans la colonne D en fonction de la valeur dans chacune des cellules de la colonne C,
par exemple si pour la cellule C8 la valeur est 3 je voudrais qu'apparaisse  en D8 le texte "jaune" correspondant à la cellule A3, pour C9 la valeur est 4 en D9 apparaîtrait "vert" correspondant à A4
 
 A B C D
1 rouge A 2  
2 bleu B 2  
3 jaune C 2  
4 vert D 2  
 
 
j'ai tenté ça mais j'ai un problème pour définir cells.value comme variable de k
 
Sub Ident()
'
' Ident Macro
'
Dim i As Long
' i variable de ligne de la colonne C
Dim k As Long
' k valeur de la cellule C pour chaque ligne
 
For i = 2 To 50000
Cells.Value(i, C) = k    (erreur de compilation: nombre d'arguments incorrect ou affectation de propriété incorrecte)                    
Range(k, A).Select
Selection.Copy
Cells(i, D).Select
Selection.Paste
Next i
 
 
 
'
End Sub


Message édité par toywaha le 19-07-2012 à 19:51:54
Reply

Marsh Posté le 19-07-2012 à 19:35:11   

Reply

Marsh Posté le 20-07-2012 à 07:51:32    

Bonjour,
je ne comprends les tests que tu veux faire  :??:  
 
Mais dans un premier temps, si tu veux affecter une valeur à une variable, tu le fais à l'envers.
Il ne faut pas faire valeur = variable mais variable = valeur et pour cells(), il faut mettre le N° de la colonne et non la lettre

Code :
  1. Cells.Value(i, C) = k
  2. k = Cells.Value(i, 3)


 
Ensuite, le fait de sélectionner, copier puis coller fait perdre énormément de temps :

Code :
  1. Range(k, A).Select
  2. Selection.Copy
  3. Cells(i, D).Select
  4. Selection.Paste


à remplacer par :

Code :
  1. Cells(i, 4).value = Range(i, 1).value


---------------
Bel ours Vave, je me dois de l’admettre. -Skyl"win"-  Mais toi tu es intelligent -Homerde- - Ce génie -SkylWINd- JDD S16M72 10:43:46 GMT-DTC +1
Reply

Marsh Posté le 20-07-2012 à 08:04:29    

Je crois que je viens de comprendre ce que tu veux faire  [:simchevelu]  
 
Donc si en C8 tu as 3, tu veux aller chercher la 3ième ligne
j'ai fait commencé la boucle à la ligne 5, sinon ça va écraser les données du début de tableau
 

Code :
  1. Sub Ident()
  2. '
  3. ' Ident Macro
  4. '
  5. Dim i As Long
  6. ' i variable de ligne de la colonne C
  7. Dim k As Long
  8. ' k valeur de la cellule C pour chaque ligne
  9. For i = 5 To 50000
  10. k = cells(i, 3)                   
  11. Cells(i, 4) = cells(k, 2)
  12. Next i
  13. End Sub


 
 
Et pour la boucle, la macro va aller jusqu'à la ligne 50000 même s'il n'y a des données que sur 100 lignes.
Tu peux trouver la dernière ligne en faisant comme ça :

Code :
  1. For i = 5 To cells(65536, 3).end(xlup).row

 
ou par exemple

Code :
  1. do while cells(i, 3) <> empty
  2.      [...]' ton code
  3. i = i+1
  4. Loop


 


---------------
Bel ours Vave, je me dois de l’admettre. -Skyl"win"-  Mais toi tu es intelligent -Homerde- - Ce génie -SkylWINd- JDD S16M72 10:43:46 GMT-DTC +1
Reply

Marsh Posté le 20-07-2012 à 22:24:03    

Bonsoir oovaveoo,
 
merci beaucoup pour ta réactivité et tes conseils :jap: , je teste ça dans le weekend et te dit ce qu'il en est :D
 

Reply

Marsh Posté le 23-07-2012 à 06:28:12    

il aime pas  
k = cells(i, 3)  
incompatibilité de type

Reply

Marsh Posté le 23-07-2012 à 08:05:57    

Effectivement, j'ai recopié une partie de ton code et je ne l'ai pas corrigé :jap:  
Faut mettre  
dim k as string au lieu de long (long étant un nombre)
et k = cells(i, 3).value  


---------------
Bel ours Vave, je me dois de l’admettre. -Skyl"win"-  Mais toi tu es intelligent -Homerde- - Ce génie -SkylWINd- JDD S16M72 10:43:46 GMT-DTC +1
Reply

Marsh Posté le 25-07-2012 à 17:53:56    

salut
j'ai pas eu le temps de passer plus tôt sur le forum
j'ai modifié comme tu me l'as suggéré k en string
cela fonctionne mais la fin de macro déraille sur[spoiler][/spoiler] Cells(i, 4) = cells(k, 2)[spoiler][/spoiler]
en bidouillant une macro d'un de mes prédécesseurs et en nommant mes colonnes j'ai obtenu ce que je voulais :D  
la colonne CAV correspond à la colonne A
la colonne ConversionNOI correspond à la colonne B
la colonne ConversionPosition correspond à la colonne C
la colonne app correspond à la colonne D
 
Dim i As Long
Dim k As Integer
 
Cells(Range("B1000000" ).Row, Range("ConversionNOI" ).Column).Select
Selection.End(xlUp).Select
NbLignes = ActiveCell.Row
 
 
 
For i = 2 To NbLignes
 
k = Cells(i, Range("ConversionPosition" ).Column).Value
 
Cells(k, Range("cav" ).Column).Select
 
Selection.Copy
Cells(i, Range("app" ).Column).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
 
Next i
End Sub
 
je vais quand même essayer de trouver la solution sur le premier code
en tout cas merci beaucoup pour ton aide
 
 ;)


Message édité par toywaha le 25-07-2012 à 17:55:45
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed