Simplification de code

Bonjour à tous,

Dans le code suivant je suis arrivé au résultat que je voulais, par contre je suis sure qu'il y a moyen de réduire la 1ère partie mais ça je n'ai pas trouvé.

Dans ce code j'oblige les utilisateurs à remplir toute les cellules avant enregistrement, par contre je n'y suis arriver que en recopiant le code pour chaque cellule qui doit être remplie, C11--> C21, y a t-il un moyen plus simple?

Merci pour votre aide.

Option Explicit

Dim f As Worksheet

Dim lgn&

Sub Enregistrer()

Sheets("Suivi ODACS").Unprotect Password:="MDP"

Set f = Sheets("Suivi ODACS")

If Range("C11").Value = "" Then

MsgBox "Veuillez remplir tous les champs.", vbOKOnly + vbCritical

Range("C11").Select

Exit Sub

End If

If Range("C12").Value = "" Then

MsgBox "Veuillez remplir tous les champs.", vbOKOnly + vbCritical

Range("C12").Select

Exit Sub

End If

If Range("C13").Value = "" Then

MsgBox "Veuillez remplir tous les champs.", vbOKOnly + vbCritical

Range("C13").Select

Exit Sub

End If

If Range("C14").Value = "" Then

MsgBox "Veuillez remplir tous les champs.", vbOKOnly + vbCritical

Range("C14").Select

Exit Sub

End If

If Range("C15").Value = "" Then

MsgBox "Veuillez remplir tous les champs.", vbOKOnly + vbCritical

Range("C15").Select

Exit Sub

End If

If Range("C16").Value = "" Then

MsgBox "Veuillez remplir tous les champs.", vbOKOnly + vbCritical

Range("C16").Select

Exit Sub

End If

If Range("C17").Value = "" Then

MsgBox "Veuillez remplir tous les champs.", vbOKOnly + vbCritical

Range("C17").Select

Exit Sub

End If

If Range("C18").Value = "" Then

MsgBox "Veuillez remplir tous les champs.", vbOKOnly + vbCritical

Range("C18").Select

Exit Sub

End If

If Range("C19").Value = "" Then

MsgBox "Veuillez remplir tous les champs.", vbOKOnly + vbCritical

Range("C19").Select

Exit Sub

End If

If Range("C20").Value = "" Then

MsgBox "Veuillez remplir tous les champs.", vbOKOnly + vbCritical

Range("C20").Select

Exit Sub

End If

If Range("C21").Value = "" Then

MsgBox "Veuillez remplir tous les champs.", vbOKOnly + vbCritical

Range("C21").Select

Exit Sub

End If

If WorksheetFunction.CountA(Range("C11:C21")) > 0 Then

Range("C11:C21").Copy

lgn = f.Range("B1").CurrentRegion.Rows.Count + 1

f.Range("B" & lgn).PasteSpecial xlPasteValues, Transpose:=True

Application.CutCopyMode = False

MsgBox "Votre ODACS a bien été enregistrée."

Range("C11:C21").ClearContents

End If

Sheets("Suivi ODACS").Select

Range("A1").End(xlDown).Offset(1, 0).Select

Sheets("Suivi ODACS").Protect Password:="MDP"

Sheets("Encodage ODACS").Select

Range("C11").Select

End Sub

Bonjour,

Teste ceci

Option Explicit

Dim f As Worksheet
Dim lgn&, i%

Sub Enregistrer()
Sheets("Suivi ODACS").Unprotect Password:="MDP"
Set f = Sheets("Suivi ODACS")
  For i = 11 To 21
    If Cells(i, "C").Value = "" Then
      MsgBox "Veuillez remplir tous les champs.", vbOKOnly + vbCritical
      Cells(i, "C").Select
      Exit Sub
    End If
  Next i

  If WorksheetFunction.CountA(Range("C11:C21")) > 0 Then
    Range("C11:C21").Copy
    lgn = f.Range("B1").CurrentRegion.Rows.Count + 1
    f.Range("B" & lgn).PasteSpecial xlPasteValues, Transpose:=True
    Application.CutCopyMode = False
    MsgBox "Votre ODACS a bien été enregistrée."
    Range("C11:C21").ClearContents
  End If
Sheets("Suivi ODACS").Activate
Range("A1").End(xlDown).Offset(1, 0).Select
Sheets("Suivi ODACS").Protect Password:="MDP"
Sheets("Encodage ODACS").Activate
Range("C11").Select
End Sub

Bonjour M12,

Un grand merci sa fonctionne parfaitement, par contre si je n'abuse pas trop et pour moi continuer à comprendre et apprendre aurait tu quelques explications sur ce que tu as fait.

Encore merci, passe une bonne journée.

Re

tu avais cela

If Range("C11").Value = "" Then
MsgBox "Veuillez remplir tous les champs.", vbOKOnly + vbCritical
Range("C11").Select
Exit Sub
End If

et recopié l'dentique pour chaque cellule de C11 à C21

J'ai donc établi une boucle qui vérifie chaque cellule pour savoir si elle est vide

For i = 11 To 21 'pour i=11 jusqu'à 21 i prendra la valeur ajouté de 1 à chaque tour de boucle
    If Cells(i, "C").Value = "" Then 'si la cellule "i" qui vaut 11 au premier tour de la colonne "C" est vide alors
      MsgBox "Veuillez remplir tous les champs.", vbOKOnly + vbCritical 'j'affiche le message
      Cells(i, "C").Select 'Je sélectionne la cellule ligne 11 colonne C
      Exit Sub 'Je sort de la procédure
    End If
  Next i ' Si la cellule n'est pas vide, je recommence la boucle en ajoutant 1 soit 12, etc jusqu'à 21

M12,

Merci pour tes explications qui me permet d'en apprendre toujours plus.

bonne journée.

Rechercher des sujets similaires à "simplification code"