XL 2016 Copier cellule dans un autre onglets

hutch57

XLDnaute Occasionnel
Bonsoir le forum,
J'ai un petit souci de macro, je voudrais sauvegarder les cellules D a J dans un autre onglet sachant que dans la feuille les 2 onglets sont protégé par un mot de passe, c'est la que ca coince j'ai essayé de combiner les 2 modules en 1 seul mais ca ne fonctionne pas.
Module1
Sub SaveM2()

Sheets("DP").Select

Range("C6").Select
If ActiveCell = "" Then
MsgBox "UNE VALEUR EST OBLIGATOIRE POUR CETTE CELLULE"
End
End If

Range("D6").Select
If ActiveCell = "" Then
MsgBox "UNE VALEUR EST OBLIGATOIRE POUR CETTE CELLULE"
End
End If


Range("E6").Select
If ActiveCell = "" Then
MsgBox "UNE VALEUR EST OBLIGATOIRE POUR CETTE CELLULE"
End
End If

Range("F6").Select
If ActiveCell = "" Then
MsgBox "UNE VALEUR EST OBLIGATOIRE POUR CETTE CELLULE"
End
End If

Range("G6").Select
If ActiveCell = "" Then
MsgBox "UNE VALEUR EST OBLIGATOIRE POUR CETTE CELLULE"
End
End If

Range("H6").Select
If ActiveCell = "" Then
MsgBox "UNE VALEUR EST OBLIGATOIRE POUR CETTE CELLULE"
End
End If

Module2
Sub test()

ActiveSheet.Unprotect "1234"
Sheets("Datas").Select
ActiveSheet.Unprotect "1234"
Sheets("DP").Select
Range("B6:J6").Select
Selection.Copy
Sheets("Datas").Select
Range("A7").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A8").Select
Application.CutCopyMode = False
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
False
Sheets("DP").Select
Range("D6:I6").Select
Selection.ClearContents
Range("D6").Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub

Un avis! en attendant j'essaye de faire mieux.
 

Pièces jointes

  • Detection.xlsm
    22 KB · Affichages: 2

hutch57

XLDnaute Occasionnel
Rebonsoir,
C'est bon ca fonctionne j'ai trouver comment faire, par contre les feuille sont déprotégé puis reprotégé mais sans le mot de passe, bizarre.
Voici la macro modifier
Sub SaveM2()

Sheets("DP").Select


Range("C6").Select
If ActiveCell = "" Then
MsgBox "UNE VALEUR EST OBLIGATOIRE POUR CETTE CELLULE"
End
End If

Range("D6").Select
If ActiveCell = "" Then
MsgBox "UNE VALEUR EST OBLIGATOIRE POUR CETTE CELLULE"
End
End If


Range("E6").Select
If ActiveCell = "" Then
MsgBox "UNE VALEUR EST OBLIGATOIRE POUR CETTE CELLULE"
End
End If

Range("F6").Select
If ActiveCell = "" Then
MsgBox "UNE VALEUR EST OBLIGATOIRE POUR CETTE CELLULE"
End
End If

Range("G6").Select
If ActiveCell = "" Then
MsgBox "UNE VALEUR EST OBLIGATOIRE POUR CETTE CELLULE"
End
End If

Range("H6").Select
If ActiveCell = "" Then
MsgBox "UNE VALEUR EST OBLIGATOIRE POUR CETTE CELLULE"
End
End If


ActiveSheet.Unprotect "1234"
Sheets("Datas").Select
ActiveSheet.Unprotect "1234"
Sheets("DP").Select
Range("B6:J6").Select
Selection.Copy
Sheets("Datas").Select
Range("a65536").End(xlUp).Select

ActiveCell.Offset(rowOffset:=1, columnOffset:=0).Activate
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Range("A8").Select
Application.CutCopyMode = False
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
False
Sheets("DP").Select
Range("D6:I6").Select
Selection.ClearContents
Range("D6").Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub
 

Pièces jointes

  • Detection.xlsm
    24 KB · Affichages: 3

Jacky67

XLDnaute Barbatruc
Apres on peut faire mieux en macro je pense
Bonjour,
Par exemple
VB:
Sub SaveM2()
    Dim C As Range
    Application.ScreenUpdating = False
    With Feuil1
        For Each C In .[c6:i6]
            If C = "" Then
                MsgBox "UNE VALEUR EST OBLIGATOIRE POUR CETTE CELLULE (" & C.Offset(-1) & ")"
                C.Select: Exit Sub
            End If
        Next
        Feuil2.Unprotect "1234"
        .[b6:j6].Copy Feuil2.Range("a" & Feuil2.Cells(Rows.Count, "a").End(xlUp).Row + 1)
        Feuil2.Protect "1234"
    End With
End Sub
 

Pièces jointes

  • Detection.xlsm
    26.7 KB · Affichages: 2

hutch57

XLDnaute Occasionnel
Bonsoir Jacky67,
C'est mieux mais l'heure ne change plus, j'avais mis cette formule dans la feuil1pour ca/
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("D6")) Is Nothing Then
If Target.Count > 1 Then Exit Sub
Sheets("DP").Select
ActiveSheet.Unprotect "1234"
Target.Offset(0, -2) = Date
End If

If Not Application.Intersect(Target, Range("D6")) Is Nothing Then
If Target.Count > 1 Then Exit Sub
Sheets("DP").Select
Target.Offset(0, -1) = Time
ActiveSheet.Protect "1234"
End If
End Sub

et il n'efface pas les cellules de D a J sur le feuille DP.
 

Jacky67

XLDnaute Barbatruc
Bonsoir Jacky67,
C'est mieux mais l'heure ne change plus, j'avais mis cette formule dans la feuil1pour ca/
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("D6")) Is Nothing Then
If Target.Count > 1 Then Exit Sub
Sheets("DP").Select
ActiveSheet.Unprotect "1234"
Target.Offset(0, -2) = Date
End If

If Not Application.Intersect(Target, Range("D6")) Is Nothing Then
If Target.Count > 1 Then Exit Sub
Sheets("DP").Select
Target.Offset(0, -1) = Time
ActiveSheet.Protect "1234"
End If
End Sub

et il n'efface pas les cellules de D a J sur le feuille DP.
Ok
La date et l'heure se mettent à jour avec la validation.
La saisie s'efface après validation
 

Pièces jointes

  • Detection V2.xlsm
    27.5 KB · Affichages: 4

Phil69970

XLDnaute Barbatruc
@hutch57

Le code est assez facile à comprendre.

En gros c'est le nom des 2 feuilles que j'ai mise en variable cela évite de les répéter

Set Ws1 = Worksheets("DP") '<== c'est la feuille DP
Set Ws2 = Worksheets("Datas") '<== c'est la feuille Datas

Chaque fois que j'écris par exemple
Ws1.Range("D6:J6").Value = ""
C'est comme si j'écris
Worksheets("DP").Range("D6:J6").Value = ""
 

hutch57

XLDnaute Occasionnel
Phil,
par contre dans ma feuil1 j'avais ca en code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("D6")) Is Nothing Then
If Target.Count > 1 Then Exit Sub
Sheets("DP").Select
ActiveSheet.Unprotect "*1234*"
Target.Offset(0, -2) = Date
End If

If Not Application.Intersect(Target, Range("D6")) Is Nothing Then
If Target.Count > 1 Then Exit Sub
Sheets("DP").Select
Target.Offset(0, -1) = Time
ActiveSheet.Protect "*1234*"
End If
End Sub
Comment tu as intégrer ca dans le code
merci de ton retour
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
315 059
Messages
2 115 817
Membres
112 553
dernier inscrit
carlos33