Activer une ligne en VBA afin de la copier

criscris11

XLDnaute Accro
Bonsoir à tous,
Est-il possible d'un clic sur le numéro de la ligne souhaitée (entre les lignes 3 et 600 par exemple) de la mettre en surbrillance (activer le copier) afin de la copier ailleurs dans le classeur ?
Je me doute bien qu'il faut utiliser l'événenement :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub

mais après j'ai plus de mal.
Merci d'avance.
 

Excel-lent

XLDnaute Barbatruc
Re : Activer une ligne en VBA afin de la copier

Bonsoir Criscris11,

VB:
Sub Macro1()
If ActiveCell.Row > 3 And ActiveCell.Row < 600 Then
    Rows(ActiveCell.Row).Select
    Selection.Copy
End If
End Sub

Cela fonctionnerais à la perfection (testé sur un autre fichier avec succès), si tu n'avais pas de cellules fusionnées dans la colonne A.

C'est possible de revoir ce point? Sinon il va falloir trouver une autre solution.

Bonne fin de soirée
 

Pierrot93

XLDnaute Barbatruc
Re : Activer une ligne en VBA afin de la copier

Bonjour Cricris, Excel-Lent

A noter qu'en vba il est rarement utile d'effectuer des sélections. Essaye peut être le code ci-dessous à placer dans le module de la feuille concernée :
Code:
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count = 1 And Target.Row > 3 And Target.Row < 600 Then
    Rows(Target.Row).Copy Destination:=Feuil2.Range("A1")
End If
End Sub
bonne journée
@+
 

criscris11

XLDnaute Accro
Re : Activer une ligne en VBA afin de la copier

Bonjour à tous,
Je reviens à ce fil car je n'est pas trouvé ce que je souhaite faire. En utilisant ce code :

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Range(Rows(3), Rows(600))) Is Nothing Then
Selection.Copy
End If
End Sub

l'événement se déclenche n'importe où quand on sélectionne n'importe quelle cellule de la ligne or je voudrais qu'il se déclenche uniquement quand l'utilisateur sélectionne la ligne entière (sur le numéro de l'entête de la ligne).
Demande subsidiaire : est ce que l'utilisateur peut déclencher l'événement en sélectionnant plusieurs lignes à l'aide de la touche Ctrl ?
Merci d'avance et bon après-midi.

PS : je suis preneur d'autres solutions événementielles le cas échéant.
 

Efgé

XLDnaute Barbatruc
Re : Activer une ligne en VBA afin de la copier

Bonjour criscris11, Pierrot93 :), Excel-lent :),
Une proposition qui copie les lignes en feuille2 au fur et à mesure des sélections même multiples.
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count Mod Columns.Count = 0 Then
   Rows(Target.Areas(Target.Areas.Count).Row).Copy _
   Sheets("Feuil2").Cells(Rows.Count, 1).End(3)(2)
End If
End Sub


Edit2
Si il n'y a qu'une seule sélection de plusieurs lignes ma proposition précédente ne la prenait pas en compte :eek::
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count Mod Columns.Count = 0 Then
    Target.Areas(Target.Areas.Count).Copy _
    Sheets("Feuil2").Cells(Rows.Count, 1).End(3)(2)
End If
End Sub
Cordialement
 
Dernière édition:

criscris11

XLDnaute Accro
Re : Activer une ligne en VBA afin de la copier

Re à tous, bonjour Efgé,

Merci pour ta proposition. Mais il reste encore 2 points à régler : l'événement ne doit pas se déclencher sur les les lignes entre la ligne 3 et la dernière ligne saisie ;
Je souhaite juste que la ou les lignes sélectionnées soit activées (prêtes à copier sans que l'utilisateur ait à intervenir) car suivant le cas elles peuvent êtres collées dans des onglets différents.

J'espère avoir été explicite dans mes explications et d'avance merci.
Bonne soirée en attendant.
 

Efgé

XLDnaute Barbatruc
Re : Activer une ligne en VBA afin de la copier

Re

l'événement ne doit pas se déclencher sur les les lignes entre la ligne 3 et la dernière ligne saisie
Cela veux dire que tu ne copie que les lignes 1 ou 2 ou des lignes vides...:rolleyes:
Une proposition (avec cette conditionà
J'ai mis un select case qui vérifie la valeur de la cellule en colonne A de la ligne selectionnée. Suivant sa valeur on peux choisir la feuille de destination.
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim F As Worksheet
If Target.Row > 3 Or Target.Row < Cells(Rows.Count, 1).End(3)(2) Then Exit Sub
If Target.Count Mod Columns.Count = 0 Then
    Select Case Cells(Target.Areas(Target.Areas.Count).Row, 1)
        Case 1
            Set F = Sheets("Feuil2")
        Case 2
            Set F = Sheets("Feuil2")
        Case 3
            Set F = Sheets("Feuil2")
        Case Else
            Exit Sub
    End Select
    Target.Areas(Target.Areas.Count).Copy _
    F.Cells(Rows.Count, 1).End(3)(2)
    Set F = Nothing
End If
End Sub


Après je passe la main.


Cordialement
 
Dernière édition:

criscris11

XLDnaute Accro
Re : Activer une ligne en VBA afin de la copier

Re Efgé,
Je crois que je me suis mal expliqué : l'événement ne doit se déclencher qu'entre la ligne 3 et la dernière saisie. Je ne sais pas où j'étais quand je t'ai répondu.
Désolé.
 

Discussions similaires

Statistiques des forums

Discussions
312 703
Messages
2 091 151
Membres
104 787
dernier inscrit
sliottet