Peut-on lancer une macro juste en sélectionnant une ligne ?

Guy_L

XLDnaute Occasionnel
Je souhaite remplir une feuille (C) avec des données se trouvant dans une autre (A).
Chaque cellule destinatrice = une cellule issue d'une colonne de la feuille source.
Celle-ci est un tableau nominatif avec différentes attribution concernant la personne de la ligne.

Une solution est de copier la ligne souhaitée depuis (A) puis de la coller ailleurs (feuille B) pour que ce "ailleurs" serve de source constante (par exemple copier la ligne 13 de M Durand (feuille A) dans la feuille servant de relais (feuille B). La feuille destination (C) ayant des formules qui récupèrent ces données pour remplir ses propres cellules.

Mais est-il possible, juste en sélectionnant une ligne de la feuille A de lancer une macro qui fasse le travail de recopie ?
 

CHALET53

XLDnaute Barbatruc
Re : Peut-on lancer une macro juste en sélectionnnant une ligne ?

Bonjour,

Oui sans doute avec une macro associée à la feuille A avec :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Un fichier exemple serait plus facile à interpréter par rapport à ta demande

a+
 

Guy_L

XLDnaute Occasionnel
Re : Peut-on lancer une macro juste en sélectionnnant une ligne ?

Bonjour,

Oui sans doute avec une macro associée à la feuille A avec :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Un fichier exemple serait plus facile à interpréter par rapport à ta demande

a+
le fichier n'existant pas encore, difficile de le publier ;-)
Peux-tu me détailler comment fonctionne cette macro ? merci

J'ai mis ceci dans la feuille source mais ça ne fonctionne pas:

Private Sub Worksheet_Change(ByVal Target As Range)
Rows(ActiveCell.Row).Select
Selection.Copy
Sheets("lien").Select 'lien est la feuille "intermédiaire" qui recueille les éléments copiés de la feuille source
Range(A2).Select 'la feuille destination a des cellules qui sont = lien!B2 , =lien!H2 ...
ActiveSheet.Paste
End Sub
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : Peut-on lancer une macro juste en sélectionnnant une ligne ?

Bonjour à tous.


Un autre exemple en pièce jointe.​


ℝOGER2327
#6980


Mercredi 18 As 141 (Saint Chambernac, pauvriseur - fête Suprême Quarte)
30 Brumaire An CCXXII, 3,3063h - rouleau
2013-W47-3T07:56:06Z
 

Pièces jointes

  • Classeur1.xlsm
    35.3 KB · Affichages: 79
  • Classeur1.xlsm
    35.3 KB · Affichages: 83
  • Classeur1.xlsm
    35.3 KB · Affichages: 82
Dernière édition:

Guy_L

XLDnaute Occasionnel
Re : Peut-on lancer une macro juste en sélectionnnant une ligne ?

Déjà un très grand merci
Effectivement, c’est un grand pas en avant
Bonjour,
En sélectionnant une cellule de la colonne A, la macro s'active. Il suffit de la modifier par ton programme
a+
en effet, ça fonctionne bien, ce qui change tout est le "SelectionChange" (au lieu de Change seul) mais il y a un bug dans mes lignes de programmation (ça se plante à la ligne "Range(A2))

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     Rows(ActiveCell.Row).Select
     Selection.Copy
     Sheets("lien").Select 'lien est la feuille "intermédiaire" qui recueille les éléments copiés de la feuille source
     Range(A2).Select 'la feuille destination a des cellules qui sont = lien!B2 , =lien!H2 ...
     ActiveSheet.Paste
End Sub
Et en appliquant ta macro
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        If Not (Intersect(Target, Range("A:A")) Is Nothing) Then
            Rows(ActiveCell.Row).Select
            Selection.Copy
            Sheets("lien").Select 'lien est la feuille "intermédiaire" qui recueille les éléments copiés de la feuille source
            Range("A2").Select 'la feuille destination a des cellules qui sont = lien!B2 , =lien!H2 ...
            ActiveSheet.Paste
        End If
End Sub
Bonjour à tous.
Un autre exemple en pièce jointe.​
ℝOGER2327
par contre , là ça ne fonctionne pas (rien ne se passe), mais est-ce que tu pourrais m’expliquer chaque ligne car j’aime bien comprendre ce que je fais, plutôt que de recopier bêtement des lignes VBA dans un fichier sans cherche à m’instruire.
J’ai modifié Feuil2 par lien :
Code:
Private Sub Worksheet_SelectionChange(ByVal Cible As Range)
  If (Cible.Rows.Count = 1) * (Cible.Columns.Count = Me.Columns.Count) Then
    With lien
      Cible.EntireRow.Copy Destination:=.Cells(.Cells(.Rows.Count, 1).End(xlUp).Row - Not IsEmpty(.Cells(.Rows.Count, 1).End(xlUp)), 1)
    End With
  End If
End Sub
 
Dernière édition:

Guy_L

XLDnaute Occasionnel
Re : Peut-on lancer une macro juste en sélectionnnant une ligne ?

ça y est j'ai trouvé où ça buggait: il fallait écrire "ActiveSheet.Range("A2").Select"

donc la macro complète est:

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        If Not (Intersect(Target, Range("A:A")) Is Nothing) Then
            Rows(ActiveCell.Row).Select
            Selection.Copy
            Sheets("lien").Select 'lien est la feuille "intermédiaire" qui recueille les éléments copiés de la feuille source
            ActiveSheet.Range("A2").Select 'la feuille destination a des cellules qui sont = lien!B2 , =lien!H2 ...
            ActiveSheet.Paste
        End If
End Sub

Maintenant, j'aimerais comprendre vos deux scripts afin de ne pas rester un simple consommateur et de pouvoir aider d'autres forumeurs. Merci d'avance.
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : Peut-on lancer une macro juste en sélectionnnant une ligne ?

Re...


(...)
Citation Envoyé par ROGER2327 Voir le message
Bonjour à tous.
Un autre exemple en pièce jointe.
ℝOGER2327
par contre , là ça ne fonctionne pas (rien ne se passe)
"Ça" fonctionne pour qui sait lire.
Il est dit :
«Sélectionner une ligne (en cliquant sur son en-tête) provoque sa copie dans l'onglet Feuil2
Par conséquent, pour copier (par exemple) la ligne 12, je la sélectionne en cliquant sur son en-tête, en l'occurence le petit 12 placé devant la première cellule de la ligne...



Bonne continuation.


ℝOGER2327
#6981


Mercredi 18 As 141 (Saint Chambernac, pauvriseur - fête Suprême Quarte)
30 Brumaire An CCXXII, 3,8938h - rouleau
2013-W47-3T09:20:43Z
 

ROGER2327

XLDnaute Barbatruc
Re : Peut-on lancer une macro juste en sélectionnnant une ligne ?

Re...


(...)
Maintenant, j'aimerais comprendre vos deux scripts afin de ne pas rester un simple consommateur et de pouvoir aider d'autres forumeurs. Merci d'avance.
Code commenté en pièce jointe.​


ℝOGER2327
#6982


Mercredi 18 As 141 (Saint Chambernac, pauvriseur - fête Suprême Quarte)
30 Brumaire An CCXXII, 4,5722h - rouleau
2013-W47-3T10:58:24Z
 

Pièces jointes

  • Code commenté.pdf
    37.9 KB · Affichages: 69

Guy_L

XLDnaute Occasionnel
Re : Peut-on lancer une macro juste en sélectionnant une ligne ?

whaou ! c'est un peu "costaud" pour moi

il reste encore un petit truc:
(pardon Roger, j'avais commencé avec la macro porposée par CHALET53, vu qu'il avait répondu le premier, j'ai donc poursuivi sur cette piste, mais je garde ta proposition sous le coude).

Voici donc ma macro complète:
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        If Not (Intersect(Target, Range("A:A")) Is Nothing) Then
            Rows(ActiveCell.Row).Select
            Selection.Copy
            Sheets("Lien").Visible = True
            Sheets("Lien").Select
            ActiveSheet.Range("A2").Select
            ActiveSheet.Paste
            Sheets("Lien").Visible = False
        End If
        Sheets("formulaire").Select
End Sub

Dans la feuille "source" (celle où se trouve la Private Sub), la première colonne est remplie de noms.
Si je laisse tel quel, la feuille lien recopie bien la ligne sélectionnée, mais, aussitôt après, le changement de feuille provoque le vidage de la première cellule de cette feuille et se traduit donc par un #SEL sur la cellule correspondante dans la feuille "formulaire" (destination).
Pour y remédier, j'ai ajouté une colonne vide devant les noms, mais il y a certainement mieux à faire, comme par exemple, n'éxecuter la macro que sur la feuille source (?)
L'autre problème est qu'en cliquant sur une autre cellule que celle de la première colonne, on va directement ouvrir la feuille formulaire sur le dernier champ rempli et la macro est shuntée.
Je pense que ça vient de la syntaxe de : If Not (Intersect(Target, Range("A:A")) Is Nothing)
mais comme je ne la maaîtrise pas, je ne sais pas ce qu'il faut rectifier.
 
Dernière édition:

CHALET53

XLDnaute Barbatruc
Re : Peut-on lancer une macro juste en sélectionnant une ligne ?

Bonsoir,

Peut-être écrit comme ceci en considérant que la colonne W est la dernière colonne renseignée (sinon modifier W) :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Not (Intersect(Target, Range("A:A")) Is Nothing) Then

With Sheets("lien")
.Visible = True
Range("A" & ActiveCell.Row & ":W" & ActiveCell.Row).Copy
Sheets("Lien").Select
.Range("A2").Select
ActiveSheet.Paste
End With

End If
Sheets("formulaire").Select
End Sub

A quoi sert la feuille formulaire ?

a+
 

Guy_L

XLDnaute Occasionnel
Re : Peut-on lancer une macro juste en sélectionnant une ligne ?

En fin de compte, avec un colonne ajoutée à gauche de celles exploitées dans mon fichier et en ajoutant cette macro, ça marche:
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        If Not (Intersect(Target, Range("A:A")) Is Nothing) Then
           ...
        End If
End Sub
mais ce serait bien d'obtenir le même résultat sans l'ajout de la colonne A:A en plus
 

Si...

XLDnaute Barbatruc
Re : Peut-on lancer une macro juste en sélectionnant une ligne ?

salut

autre proposition avec variable booléenne pour éviter des copies à répétition
Code:
Option Explicit
Dim l() As Boolean
Private Sub Worksheet_SelectionChange(ByVal R As Range)
   If R.Count > 1 Then Exit Sub
   If R = "" Then Exit Sub
   ReDim Preserve l([A6000].End(xlUp).Row)
   If l(R.Row) Then Exit Sub
   Rows(R.Row).Copy Feuil2.[A6000].End(xlUp)(2)
   l(R.Row) = -1
End Sub
 

Pièces jointes

  • CopieLigne Si....xls
    41.5 KB · Affichages: 49

Guy_L

XLDnaute Occasionnel
Re : Peut-on lancer une macro juste en sélectionnant une ligne ?

Re...
Voir les messages #5 et #9.​
en effet, je l'ai appliqué à mon fichier, ça marche super, merci beaucoup !!!

J'ai même pu la simplifier un peu puisque je copie toujours dans la même ligne (feuil7 , ligne 2)
Code:
Private Sub Worksheet_SelectionChange(ByVal Cible As Range)

  If (Cible.Rows.Count = 1) * (Cible.Columns.Count = Me.Columns.Count) Then
    With Feuil7
      Cible.EntireRow.Copy Destination:=.Cells(2, 1)
    End With
  End If
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 336
Messages
2 087 387
Membres
103 532
dernier inscrit
sdfrgthyjuki