Autres Copier coller sous conditions

delta6x

XLDnaute Junior
Bonjour,

Je ne sais pas si c'est possible avec une ou plusieurs formules, sans VBA ni Query, pour (par exemple) :

- Si la cellule A13 = "X", les cellules A1 à C3 soient remplacées par les cellules k1 à M3, sinon on ne change rien

- Si la cellule B13 = "X", les cellules A1 à C3 soient remplacées par les cellules k5 à M7, sinon on ne change rien

- Si la cellule C13 = "X", les cellules A1 à C3 soient remplacées par les cellules K9 à M11, sinon on ne change rien

Merci d'avance et bon dimanche.
 

Pièces jointes

  • Classeur1.xlsx
    8.7 KB · Affichages: 5

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Delta6x,
Deux solutions en PJ.
Feuil1 : il suffit de cliquer sur des trois cellules pour faire le transfert avec :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo Fin: If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, [A13:C13]) Is Nothing Then
        Application.ScreenUpdating = False
        Application.EnableEvents = False
        [A13:C13].ClearContents
        If Target.Address = "$A$13" Then
            [A13] = "X": [A1:C3] = [K1:M3].Value
        ElseIf Target.Address = "$B$13" Then
            [B13] = "X": [A1:C3] = [K5:M7].Value
        ElseIf Target.Address = "$C$13" Then
            [C13] = "X": [A1:C3] = [K9:M11].Value
         End If
    End If
Fin:
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
Feuil2, il faut mettre un X pour faire le transfert, mais ça me semble moins convivial car il faut effacer les autres X auparavant, avec :
Code:
Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin: If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, [A13:C13]) Is Nothing Then
        Application.ScreenUpdating = False
        Application.EnableEvents = False
        If [A13] = "X" Then
            [A1:C3] = [K1:M3].Value
        ElseIf [B13] = "X" Then
            [A1:C3] = [K5:M7].Value
        ElseIf [C13] = "X" Then
            [A1:C3] = [K9:M11].Value
        End If
    End If
Fin:
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
 

Pièces jointes

  • Classeur1 (3).xlsm
    17.5 KB · Affichages: 1

delta6x

XLDnaute Junior
Merci à Sylvanu, à Phil69970, et c'est sincère. Mais j'essaie depuis bien longtemps de finir mon fichier sans VBA, ni Power Query dans Excel. (les deux solutions que vous proposez sont pourtant au top). Fanch55 m'a donné la solution sans VBA, et je l'en remercie tout autant. Je vais essayer d'adapter sa solution à mon fichier. Bon dimanche à vous.
Bonjour Delta6x,
Deux solutions en PJ.
Feuil1 : il suffit de cliquer sur des trois cellules pour faire le transfert avec :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo Fin: If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, [A13:C13]) Is Nothing Then
        Application.ScreenUpdating = False
        Application.EnableEvents = False
        [A13:C13].ClearContents
        If Target.Address = "$A$13" Then
            [A13] = "X": [A1:C3] = [K1:M3].Value
        ElseIf Target.Address = "$B$13" Then
            [B13] = "X": [A1:C3] = [K5:M7].Value
        ElseIf Target.Address = "$C$13" Then
            [C13] = "X": [A1:C3] = [K9:M11].Value
         End If
    End If
Fin:
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
Feuil2, il faut mettre un X pour faire le transfert, mais ça me semble moins convivial car il faut effacer les autres X auparavant, avec :
Code:
Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin: If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, [A13:C13]) Is Nothing Then
        Application.ScreenUpdating = False
        Application.EnableEvents = False
        If [A13] = "X" Then
            [A1:C3] = [K1:M3].Value
        ElseIf [B13] = "X" Then
            [A1:C3] = [K5:M7].Value
        ElseIf [C13] = "X" Then
            [A1:C3] = [K9:M11].Value
        End If
    End If
Fin:
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
Bonjour,
Bonjour Delta6x,
Deux solutions en PJ.
Feuil1 : il suffit de cliquer sur des trois cellules pour faire le transfert avec :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo Fin: If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, [A13:C13]) Is Nothing Then
        Application.ScreenUpdating = False
        Application.EnableEvents = False
        [A13:C13].ClearContents
        If Target.Address = "$A$13" Then
            [A13] = "X": [A1:C3] = [K1:M3].Value
        ElseIf Target.Address = "$B$13" Then
            [B13] = "X": [A1:C3] = [K5:M7].Value
        ElseIf Target.Address = "$C$13" Then
            [C13] = "X": [A1:C3] = [K9:M11].Value
         End If
    End If
Fin:
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
Feuil2, il faut mettre un X pour faire le transfert, mais ça me semble moins convivial car il faut effacer les autres X auparavant, avec :
Code:
Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin: If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, [A13:C13]) Is Nothing Then
        Application.ScreenUpdating = False
        Application.EnableEvents = False
        If [A13] = "X" Then
            [A1:C3] = [K1:M3].Value
        ElseIf [B13] = "X" Then
            [A1:C3] = [K5:M7].Value
        ElseIf [C13] = "X" Then
            [A1:C3] = [K9:M11].Value
        End If
    End If
Fin:
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
Bonjour, Sylvanu. J'ai dérogé à mes règles et adapté ta première solution. J'y ai mis le temps, mais y suis parvenu. C'est ma première macro. Je sais pas comment tu fais pour aller aussi vite, T'as peut-être un ordinateur dans le cerveau. En tous cas, tu dois avoir un sacré niveau. Encore merci, c'est super.
 

Discussions similaires

Statistiques des forums

Discussions
312 273
Messages
2 086 701
Membres
103 374
dernier inscrit
damned42