Simplification de procédure

Résolu
Villette54 Messages postés 300 Date d'inscription   Statut Membre Dernière intervention   -  
Villette54 Messages postés 300 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'aurais souhaité savoir s'il était possible de simplifier un peu cette procedure ?
Elle n'est pas compliqué en soit, elle fonctionne très bien mais c'est juste qu'elle est très lourde (et un peu répétitive).

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Not Intersect(Target, Range("C2")) Is Nothing Then
        Range("X2") = Range("C2")
        Range("C3:C14").Copy
        Range("X3:X14").PasteSpecial xlFormats
    End If
   
    If Not Intersect(Target, Range("D2")) Is Nothing Then
        Range("X2") = Range("D2")
        Range("D3:D14").Copy
        Range("X3:X14").PasteSpecial xlFormats
    End If

    If Not Intersect(Target, Range("E2")) Is Nothing Then
        Range("X2") = Range("E2")
        Range("E3:E14").Copy
        Range("X3:X14").PasteSpecial xlFormats
    End If
    
    If Not Intersect(Target, Range("F2")) Is Nothing Then
        Range("X2") = Range("F2")
        Range("F3:F14").Copy
        Range("X3:X14").PasteSpecial xlFormats
    End If
    
    If Not Intersect(Target, Range("G2")) Is Nothing Then
        Range("X2") = Range("G2")
        Range("G3:G14").Copy
        Range("X3:X14").PasteSpecial xlFormats
    End If
    
    If Not Intersect(Target, Range("H2")) Is Nothing Then
        Range("X2") = Range("H2")
        Range("H3:H14").Copy
        Range("X3:X14").PasteSpecial xlFormats
    End If
    
    If Not Intersect(Target, Range("I2")) Is Nothing Then
        Range("X2") = Range("I2")
        Range("I3:I14").Copy
        Range("X3:X14").PasteSpecial xlFormats
    End If
    
    If Not Intersect(Target, Range("J2")) Is Nothing Then
        Range("X2") = Range("J2")
        Range("J3:J14").Copy
        Range("X3:X14").PasteSpecial xlFormats
    End If
    
    If Not Intersect(Target, Range("K2")) Is Nothing Then
        Range("X2") = Range("K2")
        Range("K3:K14").Copy
        Range("X3:X14").PasteSpecial xlFormats
    End If
    
    If Not Intersect(Target, Range("L2")) Is Nothing Then
        Range("X2") = Range("L2")
        Range("L3:L14").Copy
        Range("X3:X14").PasteSpecial xlFormats
    End If
    
    If Not Intersect(Target, Range("M2")) Is Nothing Then
        Range("X2") = Range("M2")
        Range("M3:M14").Copy
        Range("X3:X14").PasteSpecial xlFormats
    End If
    
    If Not Intersect(Target, Range("N2")) Is Nothing Then
        Range("X2") = Range("N2")
        Range("N3:N14").Copy
        Range("X3:X14").PasteSpecial xlFormats
    End If
    
    If Not Intersect(Target, Range("O2")) Is Nothing Then
        Range("X2") = Range("O2")
        Range("O3:O14").Copy
        Range("X3:X14").PasteSpecial xlFormats
    End If
    
    If Not Intersect(Target, Range("P2")) Is Nothing Then
        Range("X2") = Range("P2")
        Range("P3:P14").Copy
        Range("X3:X14").PasteSpecial xlFormats
    End If
    
    If Not Intersect(Target, Range("Q2")) Is Nothing Then
        Range("X2") = Range("Q2")
        Range("Q3:Q14").Copy
        Range("X3:X14").PasteSpecial xlFormats
    End If
    
    If Not Intersect(Target, Range("R2")) Is Nothing Then
        Range("X2") = Range("R2")
        Range("R3:R14").Copy
        Range("X3:X14").PasteSpecial xlFormats
    End If
    
    If Not Intersect(Target, Range("S2")) Is Nothing Then
        Range("X2") = Range("S2")
        Range("S3:S14").Copy
        Range("X3:X14").PasteSpecial xlFormats
    End If
    
    If Not Intersect(Target, Range("T2")) Is Nothing Then
        Range("X2") = Range("T2")
        Range("T3:T14").Copy
        Range("X3:X14").PasteSpecial xlFormats
    End If
    
    If Not Intersect(Target, Range("U2")) Is Nothing Then
        Range("X2") = Range("U2")
        Range("U3:U14").Copy
        Range("X3:X14").PasteSpecial xlFormats
    End If
    
    If Not Intersect(Target, Range("V2")) Is Nothing Then
        Range("X2") = Range("V2")
        Range("V3:V14").Copy
        Range("X3:X14").PasteSpecial xlFormats
    End If
    
Application.CutCopyMode = False
End Sub


Merci d'avance.

2 réponses

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Bonjour

    Essaies ceci

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim plage As Range, co As Long
    If Not Intersect(Target, Range("C2:V2")) Is Nothing Then
    Range("X2") = Target.Value
    co = Target.Column
    Set plage = Range(Cells(3, co), Cells(14, co))
    'plage.Select
    plage.Copy
    Range("X3:X14").PasteSpecial xlFormats
    End If

    Cdlmnt
    End Sub
    0
  2. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    Bonjour.

    Ou encore (sans variable supplémentaire) :
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
        If Intersect(Target, Range("C2:V2")) Is Nothing Then Exit Sub
        If Target.Count > 1 Then Exit Sub
        Range("X2").Value = Target.Value
        Target.Offset(1).Resize(12).Copy
        Range("X3:X14").PasteSpecial xlFormats
        Application.CutCopyMode = False
    
    End Sub


    Cordialement
    Patrice
    0
    1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      Désolé, je n'avais pas envisagé la sélection de plusieurs cellules
      Voici un code pour ce cas :
      Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      Dim cel As Range
      
          If Intersect(Target, Range("C2:V2")) Is Nothing Then Exit Sub
          For Each cel In Target.Rows(1).Cells
            Range("X2").Value = cel.Value
            cell.Offset(1).Resize(12).Copy
            Range("X3:X14").PasteSpecial xlFormats
          Next cel
          Application.CutCopyMode = False
      
      End Sub


      Edit : correction 12 lignes et non 12 colonnes
      0
    2. Villette54 Messages postés 300 Date d'inscription   Statut Membre Dernière intervention   28
       
      Bonjour,

      Merci pour vos réponses, effectivement vos solutions sont beaucoup plus simple !

      ccm81, ta solution fonctionne très bien. Je te remercie.

      Patrice33740, ta proposition fonctionne également mais je ne connais pas la fonction "offset" c'est pourquoi j'ai préféré la solution de ccm81. Quoi qu'il en soit un grand merci aussi.

      Bonne fin de journée !
      0