copier/coller en fonction de cellules variables

N

nicolas

Guest
bonjour le forum,

je vous joins un fichier en annexe.

je souhaiterais en selectionnant des cellules dans un tableau et en cliquant sur un bouton que ça aille chercher des valeurs dans un autre onglet et que que ça les colles dans les cellules sélectionnées.

mais il faudrait, que si on selectionne d'autres cellules, il y ait une translation des données sources.

si ce texte n'est pas clair, j'espère que le fichier explicatif l'est un peu plus.

merci d'avance.
 

Tibo

XLDnaute Barbatruc
Salut Nicolas,

J'avoue ne pas avoir compris grand chose à ton problème.

De plus, ton fichier n'est pas passé. Voir le lien suivant pour joindre un fichier (faire attention aux espaces, tirets, accents et à la taille) :

Lien supprimé

Donc reviens-nous avec un fichier avec des explications détaillées.

@+
 

Hervé

XLDnaute Barbatruc
Bonjour nicolas, tibo, le forum

Une proposition en pièce jointe.

le code :

Sub Bouton4_QuandClic()
Dim c As Range
Dim i As Byte

If Selection.Count <> 3 Or Selection(1).Column <> 3 Then Exit Sub

With Sheets('Feuil2')
&nbsp; &nbsp;
Set c = .Range('a2:a' & .Range('a65536').End(xlUp).Row).Find(Selection(1).Offset(0, -1))
&nbsp; &nbsp;
If Not c Is Nothing Then
&nbsp; &nbsp; &nbsp; &nbsp;
For i = 1 To 3
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Selection(i) = .Cells(c.Row, i + 1)
&nbsp; &nbsp; &nbsp; &nbsp;
Next i
&nbsp; &nbsp;
End If
End With

End Sub


salut
[file name=copie_20051026151204.zip size=10199]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/copie_20051026151204.zip[/file]
 

Pièces jointes

  • copie_20051026151204.zip
    10 KB · Affichages: 30
N

nicolas

Guest
re-bonjour et merci à Tibo et Hevé,

j'ai mis du temps à répondre car je cherchais à adapter ce code à un de mes fichier et je n'y suis pas arrivé.

dans cet exemple, le '3' représente-il le nombre de colonnes du tableau et le offset(0, -1) fait -il référence à la colonne rang?


merci

nicolas
 

Hervé

XLDnaute Barbatruc
re

:)


If Selection.Count <> 3 Or Selection(1).Column <> 3 Then Exit Sub


en clair, si le nombre de cellule dans la sélection est different de 3 ou si la colonne de la première cellule de la sélection est différent de C alors on arrete la macro.

cette ligne n'est là que pour controler que la plage sélectionnée fait bien 3 cellules et que celles-ci se trouvent bien en colonne c:e.

le fait qu'il y ait deux fois le chiffre 3 est pure coincidence.

selection(1).offset(0,-1) permet de trouver la cellule qui se trouve à droite de la sélection, donc dans ton cas la colonne rang.

voilà

salut
 
N

nicolas

Guest
re-bonjour

je suis vraiment désolé mais je n'arrive pas à l'adapter à mon fichier.

j'ai joint un fichier semblable au premier mais légèrement différent pour qu'il n'y ait pas de coincidences.
De cette manière, le code serait plus compréhensible.

merci encore et désolé

[file name=copie2.zip size=10159]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/copie2.zip[/file]
 

Pièces jointes

  • copie2.zip
    9.9 KB · Affichages: 28

Hervé

XLDnaute Barbatruc
re nicolas, tibo, le forum

Une nouvelle macro commentée, en espérant que ceci t'aidera.

Si tu n'arrivais pas à l'adapter encore à ton fichier, dis le moi, j'essayerai de trouver quelque chose de plus .....(à toi de choisir le mot :) )

Sub Bouton4_QuandClic()
Dim c As Range
Dim i As Byte

'ligne de controle pour s'assurer que la sélection fait bien 4 cellules
'et qu'elle commence bien en colonne C (3)
If Selection.Count <> 4 Or Selection(1).Column <> 3 Then Exit Sub

'avec la feuille 2
With Sheets('Feuil2')

&nbsp; &nbsp;
'initialise la variable c (set c=)
&nbsp; &nbsp;
'en recherchant (.find)
&nbsp; &nbsp;
'dans la plage k2... (range('k2...)
&nbsp; &nbsp;
'...jusqu'a la derniere cellule occupé (range('k65536').end(xlup).row
&nbsp; &nbsp;
'la valeur de la cellule se trouvant 7 colonnes à droite de la premiere cellule de sélection (selection(1).offset(0,7))
&nbsp; &nbsp;
Set c = .Range('k2:k' & .Range('k65536').End(xlUp).Row).Find(Selection(1).Offset(0, 7))
&nbsp; &nbsp;
&nbsp; &nbsp;
'si la variable C n'est pas vide alors....
&nbsp; &nbsp;
If Not c Is Nothing Then
&nbsp; &nbsp; &nbsp; &nbsp;
'on fait une boucle de 1 à 4 (parce que&nbsp; 4 cellules à remplir)
&nbsp; &nbsp; &nbsp; &nbsp;
'pour i=1 jusqu'a 4
&nbsp; &nbsp; &nbsp; &nbsp;
For i = 1 To 4
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
'la cellule(i) de la sélection = la cellule ligne (c.row), colonne(i+1)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Selection(i) = .Cells(c.Row, i + 1)
&nbsp; &nbsp; &nbsp; &nbsp;
'prochain i
&nbsp; &nbsp; &nbsp; &nbsp;
Next i
&nbsp; &nbsp;
'fin de condition
&nbsp; &nbsp;
End If
'fin de travail avec la feuille 2
End With

End Sub


salut
 
N

nicolas

Guest
Bonjour le forum

C'est bon, ça marche, après moultes difficultés, j'y suis enfin arrivé.

merci beaucoup à Hervé et tous les membres du forum pour leur aide, leur patience et leur dévouement.

sûrement à tout à l'heure pour une nouvelle problématique!!!!!!

:)
 

Discussions similaires

Statistiques des forums

Discussions
312 470
Messages
2 088 700
Membres
103 927
dernier inscrit
Mkeal