Bonjour à tous,
Une adorable personne m'a aidé sur ce forum pour écrire la macro suivante car je débute et au passage merci à tous pour votre aide. Aujourd'hui le besoin évolue, je m'explique :
Sur une feuille "Formulaire", j'ai des données que je vais copier sur une autre feuille "DATA". J'aimerai désormais que ça colle les cellules qui sont uniquement remplies (et donc pas les vides) pour pas que ça écrase les données déjà existante dans DATA.
Ci-dessous la macro et ci-joint une capture écran de la feuille formulaire
Merci pour votre aide et mes meilleurs vœux pour cette nouvelle année
Sub MAJ()
'Etape pour copier coller sur la bonne ligne
Sheets("Formulaire").Unprotect
If Worksheets("Formulaire").Range("M10") >= 0 Then
If MsgBox("Êtes-vous sûr de vouloir modifier la formation " & Range("A1").Value & " ?", vbQuestion + vbYesNo, "Confirmer") = vbYes Then
Sheets("Data").Unprotect
With [Data].ListObject.DataBodyRange.Rows(Me.Cells(1, 1))
.Cells(1, 23) = Range("E14")
.Cells(1, 29) = Range("E16")
.Cells(1, 27) = Range("M16")
.Cells(1, 28) = Range("M18")
.Cells(1, 24) = Range("M14")
.Cells(1, 25) = Range("Q14")
.Cells(1, 26) = Range("Q16")
.Cells(1, 31) = Range("E18")
.Cells(1, 15) = Range("E6")
.Cells(1, 18) = Range("M6")
.Cells(1, 19) = Range("E8")
.Cells(1, 12) = Range("E10")
.Cells(1, 13) = Range("I10")
.Cells(1, 16) = Range("E12")
.Cells(1, 21) = Range("E20")
.Cells(1, 30) = Range("M20")
.Cells(1, 20) = Range("I12")
.Cells(1, 14) = Range("M10")
End With
'Etape pour remettre les formules dans le formulaire après avoir écrasé lors de la modification
Range("C1").Select
Sheets("Sauvegarde").Range("C2:Q20").Copy
'cellule où copier la formule
Sheets("Formulaire").Range("C2").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Sheets("Formulaire").Range("Q10").Select
If MsgBox("Formation modifiée avec succès", vbInformation + vbOKOnly, "Réussite") = vbOK Then
Sheets("Data").Protect
End If
End If
Else
If MsgBox("Enregistrement impossible : Inversion date de début et fin de contrat", vbCritical + vbOKOnly, "Enregistrement impossible") = vbOK Then
End If
End If
Sheets("Formulaire").Protect
End Sub
Une adorable personne m'a aidé sur ce forum pour écrire la macro suivante car je débute et au passage merci à tous pour votre aide. Aujourd'hui le besoin évolue, je m'explique :
Sur une feuille "Formulaire", j'ai des données que je vais copier sur une autre feuille "DATA". J'aimerai désormais que ça colle les cellules qui sont uniquement remplies (et donc pas les vides) pour pas que ça écrase les données déjà existante dans DATA.
Ci-dessous la macro et ci-joint une capture écran de la feuille formulaire
Merci pour votre aide et mes meilleurs vœux pour cette nouvelle année
Sub MAJ()
'Etape pour copier coller sur la bonne ligne
Sheets("Formulaire").Unprotect
If Worksheets("Formulaire").Range("M10") >= 0 Then
If MsgBox("Êtes-vous sûr de vouloir modifier la formation " & Range("A1").Value & " ?", vbQuestion + vbYesNo, "Confirmer") = vbYes Then
Sheets("Data").Unprotect
With [Data].ListObject.DataBodyRange.Rows(Me.Cells(1, 1))
.Cells(1, 23) = Range("E14")
.Cells(1, 29) = Range("E16")
.Cells(1, 27) = Range("M16")
.Cells(1, 28) = Range("M18")
.Cells(1, 24) = Range("M14")
.Cells(1, 25) = Range("Q14")
.Cells(1, 26) = Range("Q16")
.Cells(1, 31) = Range("E18")
.Cells(1, 15) = Range("E6")
.Cells(1, 18) = Range("M6")
.Cells(1, 19) = Range("E8")
.Cells(1, 12) = Range("E10")
.Cells(1, 13) = Range("I10")
.Cells(1, 16) = Range("E12")
.Cells(1, 21) = Range("E20")
.Cells(1, 30) = Range("M20")
.Cells(1, 20) = Range("I12")
.Cells(1, 14) = Range("M10")
End With
'Etape pour remettre les formules dans le formulaire après avoir écrasé lors de la modification
Range("C1").Select
Sheets("Sauvegarde").Range("C2:Q20").Copy
'cellule où copier la formule
Sheets("Formulaire").Range("C2").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Sheets("Formulaire").Range("Q10").Select
If MsgBox("Formation modifiée avec succès", vbInformation + vbOKOnly, "Réussite") = vbOK Then
Sheets("Data").Protect
End If
End If
Else
If MsgBox("Enregistrement impossible : Inversion date de début et fin de contrat", vbCritical + vbOKOnly, "Enregistrement impossible") = vbOK Then
End If
End If
Sheets("Formulaire").Protect
End Sub