copie ligne si case cochée

rudymagny

XLDnaute Occasionnel
Bonsoir le forum,

Voila ce que je voudrais faire, lorsque je coche la case dans la colonne AE, je copie la ligne entière et la colle dans l'autre feuille?

J'ai mis un fichier comme exemple.

Merci d'avance
[file name=Questionforum_20060327194819.zip size=22031]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Questionforum_20060327194819.zip[/file]
 

Pièces jointes

  • Questionforum_20060327194819.zip
    21.5 KB · Affichages: 42

Robert

XLDnaute Barbatruc
Repose en paix
Bonsoir Rudymagny, bonsoir le forum,

Je te propose cette macro événementielle à placer dans l'onglet 'Janvier' :


Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet (janvier)
Dim li As Integer 'déclare la variable li
Dim dest As Range 'déclare la variable dest

'si le changement n'a pas lieu dans une cellule éditée de la colonne AE, sort de la procédure
If Application.Intersect(Target, Range('AE4:AE' & Range('AE65536').End(xlUp).Row)) Is Nothing Then Exit Sub

If Target.Value = 'ý' Then 'condition 1 : si la case est cochée
li = Target.Row 'définit la variable li

'définit la variable dest
With Sheets('Extract Signature E5') 'prend en compte l'onglet 'Extract Signature E5'
If .Range('A1').Value = '' Then 'condition 2 : si A1 est vide
Set dest = .Range('A1') 'définit la variable dest
Else 'sinon
Set dest = .Range('A65536').End(xlUp).Offset(1, 0) 'définit la variable dest
End If 'fin de la condition 2
End With 'fin de la prise en comprte de l'onglet 'Extract Signature E5'

'copie la ligne de la case cochée de l'onglet 'Janvier' et la colle dans l'onglet 'Extract Signature E5'
Range(Cells(li, 2), Cells(li, 31)).Copy Destination:=dest
End If 'fin de la condition 1

End Sub
 

Charly2

Nous a quittés en 2006
Repose en paix
Bonsoir Rudymagny, bonsoir mon ami Robert, bonsoir à toutes et à tous :)

Une autre possibilité en utilisant ta procédure événementielle existante Worksheet_BeforeDoubleClick :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  With Target
    'Test de la valeur de la cellule
    If .Value Like '[oý]' Then
      If .Value = 'o' Then
        .Value = 'ý'
        ' s'il s'agit de la colonne AE, on fait un Copier/Coller
        If .Column = 31 Then
          .EntireRow.Copy Sheets('Extract Signature E5').Cells( _
                Range('A1').End(xlDown).Row Mod 65536 + 1, 1)
        End If
      Else
        .Value = 'o'
      End If
      Cancel = True
    End If
  End With
End Sub

J'ai simplement remplacé l'instruction :

Target.value = IIf(Target.Value = 'o', 'ý', 'o')

par :

With Target
  '...
  If .Value = 'o' Then
    .Value = 'ý'
    'Ajout de code
  Else
    .Value = 'o'
  End If
End With

Voili voilà

A+ ;)
 

rudymagny

XLDnaute Occasionnel
Rebonjour le forum,
Voilà j'ai testé ça au boulot et ça marche:
Code:
Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet (janvier)
Dim li As Integer 'déclare la variable li
Dim dest As Range 'déclare la variable dest
Dim dest2 As Range 'déclare la variable dest2

    'si le changement n'a pas lieu dans une cellule éditée de la colonne AE, sort de la procédure
    If Application.Intersect(Target, Range('AE4:AE' & Range('AE65536').End(xlUp).Row)) Is Nothing Then Exit Sub
    
    If Target.Value = 'ý' Then 'condition 1 : si la case est cochée
        li = Target.Row 'définit la variable li
    
        'définit la variable dest
        With Sheets('Signature E5') 'prend en compte l'onglet 'Extract Signature E5'
            If .Range('B4').Value = '' Then 'condition 2 : si A1 est vide
                Set dest = .Range('B4') 'définit la variable dest
                Else
                Set dest = .Range('B65536').End(xlUp).Offset(1, 0) 'définit la variable dest
            End If 'fin de la condition 2
        End With 'fin de la prise en comprte de l'onglet 'Extract Signature E5'
        
        'copie la ligne de la case cochée de l'onglet 'Janvier' et la colle dans l'onglet 'Extract Signature E5'
        'Range(Cells(li, 2), Cells(li, 31)).Copy Destination:=dest
        Range(Cells(li, 2), Cells(li, 26)).Copy Destination:=dest
        
            With Sheets('Signature E5')
                If .Range('B4').Value = '' Then 'condition 2 : si A1 est vide
                    Set dest2 = .Range('AA4') 'définit la variable dest
                    Else
                    Set dest2 = .Range('AA65536').End(xlUp).Offset(1, 0) 'définit la variable dest
                End If 'fin de la condition 2
            End With
            Range(Cells(li, 28), Cells(li, 28)).Copy Destination:=dest2
    End If 'fin de la condition 1
End Sub

Merci à vous deux c cool
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonsoir Rudumagny, Charly, bonsoir le forum,

C'est marrant, moi j'aurais plutôt choisi la proposition de Charly...

Si ton classeur est ouvert (test.xls dans mon exemple, à adapter) et si le nom de l'onglet dans lequel tu veux coller est toujours Extract Signature E5 :


Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet (janvier)
Dim li As Integer 'déclare la variable li
Dim dest As Range 'déclare la variable dest
Dim clas As Workbook 'déclare la variable clas

Set clas = Workbooks('test.xls') 'définit la variable clas (à adapter)

'si le changement n'a pas lieu dans une cellule éditée de la colonne AE, sort de la procédure
If Application.Intersect(Target, Range('AE4:AE' & Range('AE65536').End(xlUp).Row)) Is Nothing Then Exit Sub

If Target.Value = 'ý' Then 'condition 1 : si la case est cochée
li = Target.Row 'définit la variable li

'définit la variable dest
With clas.Sheets('Extract Signature E5') 'prend en compte l'onglet 'Extract Signature E5'
If .Range('A1').Value = '' Then 'condition 2 : si A1 est vide
Set dest = .Range('A1') 'définit la variable dest
Else 'sinon
Set dest = .Range('A65536').End(xlUp).Offset(1, 0) 'définit la variable dest
End If 'fin de la condition 2
End With 'fin de la prise en compte de l'onglet 'Extract Signature E5'

'copie la ligne de la case cochée de l'onglet 'Janvier' et la colle dans l'onglet 'Extract Signature E5'
Range(Cells(li, 2), Cells(li, 31)).Copy Destination:=dest
End If 'fin de la condition 1

End Sub

Avec le classeur fermé je ne sais pas faire... Mais Charly devrait passer par ici (je pense) et te donner une soluce.
 

rudymagny

XLDnaute Occasionnel
Bonjour Robert et merci pour ta réponse,
avec la soluce de charly, si je voulais copier plusieurs cellules, elles s'écraisaient dans mon autre feuille, c pour ça que j'ai utilisé la tienne.

je vais essayer pour ta soluce sur l'autre classeur et je te dis ça!

Merci
 

rudymagny

XLDnaute Occasionnel
Voilà c bon j'ai adapté le code pour ouvrir le fichier avant de copier :

Code:
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'Déclaration des variables pour export vers feuilles signature E5
Dim li As Integer 'déclare la variable li
Dim dest As Range 'déclare la variable dest
Dim clas As Workbook 'déclare la variable clas
'/////////////////////////////////////////////////////////////////////////
'Condition pour gérer les cases à cocher
If Target.Value Like '[oý]' Then
    Target.Value = IIf(Target.Value = 'o', 'ý', 'o')
    'Empêche la sélection de la cellule après le double-clic
    Cancel = True
End If
'/////////////////////////////////////////////////////////////////////////
[color=#FF0000]ThisWorkbook.FollowHyperlink 'D:\\RTE\\Essais E4_VCT\\Suivi\\2006\\Signature E5.xls'[/color]
'Code pour exporter la ligne dans l'autre feuille et l'onglet 'Signature E5'
Set clas = Workbooks('Signature E5.xls') 'définit la variable clas (à adapter)
'si le double click n'a pas lieu dans une cellule éditée de la colonne AE, sort de la procédure
If Application.Intersect(Target, Range('AE4:AE' & Range('AE65536').End(xlUp).Row)) Is Nothing Then Exit Sub
        ActiveSheet.Unprotect
        li = Target.Row 'définit la variable li
        'définit la variable dest
        With clas.Sheets('Signature E5') 'prend en compte l'onglet 'Signature E5'
            If .Range('B4').Value = '' Then 'condition 2 : si A1 est vide
                Set dest = .Range('B4') 'définit la variable dest
                Else 'sinon
                Set dest = .Range('B65536').End(xlUp).Offset(1, 0) 'définit la variable dest
            End If 'fin de la condition 2
        End With 'fin de la prise en compte de l'onglet 'Extract Signature E5'
    'copie la ligne de la case cochée de l'onglet en cours et la colle dans l'onglet 'Signature E5' de l'autre feuille
    Range(Cells(li, 2), Cells(li, 27)).Copy Destination:=dest
End Sub

c michelxld qui me l'avait donné et en plus je n'ai pas utilisé le change mais le double click de la cellule.

mais j'ai un problème, c qu'il ne fonctionne qu'une fois et je sais po pourkoi!
 

Statistiques des forums

Discussions
312 310
Messages
2 087 134
Membres
103 480
dernier inscrit
etaniere