Code à nettoyer

Bonjour,

Sébastien m'a qualifié ce code de pas trés propre ,

Mais si quelqu'un pouvait me montrer comment le "nettoyer" , çà serait nickel

'remplissage BD pour les champs manquants d'une ligne CB en 1ere ligne (6)
    ' en insertion ligne, montant changeable
    '(décalage une ligne spinbutton pas + bas que 2)
    If Sheets("BD").Range("A" & ligne_selectionnee) = ligne_selectionnee - 1 And Sheets("BD").Range("J" & ligne_selectionnee) = "" Then
        MsgBox "ok" 'si Range A2 BD = 2-1 et Range J2 BD
        Sheets("BD").Range("E" & ligne_selectionnee) = Sheets("saisie").Range("E6") 'client
        Sheets("BD").Range("F" & ligne_selectionnee) = Sheets("saisie").Range("F6") 'kms
        Sheets("BD").Range("G" & ligne_selectionnee) = Sheets("saisie").Range("G6") 'liste deroul
        Sheets("BD").Range("H" & ligne_selectionnee) = Sheets("saisie").Range("H6") 'obs
        Sheets("BD").Range("I" & ligne_selectionnee) = Sheets("saisie").Range("I6")  'montant
'modification BD pour les champs d'une ligne ESP en 1ere ligne (6)
    ElseIf Sheets("BD").Range("A" & ligne_selectionnee) = ligne_selectionnee - 1 And Sheets("BD").Range("J" & ligne_selectionnee) = "perso" Then
        Sheets("BD").Range("C" & ligne_selectionnee) = Sheets("saisie").Range("C6")  'date
        Sheets("BD").Range("D" & ligne_selectionnee) = Sheets("saisie").Range("D6")  'prestataire
        Sheets("BD").Range("E" & ligne_selectionnee) = Sheets("saisie").Range("E6") 'client
        Sheets("BD").Range("F" & ligne_selectionnee) = Sheets("saisie").Range("F6") 'kms
        Sheets("BD").Range("G" & ligne_selectionnee) = Sheets("saisie").Range("G6") 'liste deroul
        Sheets("BD").Range("H" & ligne_selectionnee) = Sheets("saisie").Range("H6") 'obs
        Sheets("BD").Range("I" & ligne_selectionnee) = Sheets("saisie").Range("I6")  'montant

    End If

    '2 eme ligne

'remplissage BD pour les champs manquants d'une ligne CB en 1ere ligne (7)
    If Sheets("BD").Range("A" & ligne_selectionnee + 1) = ligne_selectionnee And Sheets("BD").Range("J" & ligne_selectionnee) <> "perso" Then
        Sheets("BD").Range("E" & ligne_selectionnee + 1) = Sheets("saisie").Range("E7") 'client
        Sheets("BD").Range("F" & ligne_selectionnee + 1) = Sheets("saisie").Range("F7") 'kms
        Sheets("BD").Range("G" & ligne_selectionnee + 1) = Sheets("saisie").Range("G7")
        Sheets("BD").Range("H" & ligne_selectionnee + 1) = Sheets("saisie").Range("H7") 'obs
        Sheets("BD").Range("I" & ligne_selectionnee + 1) = Sheets("saisie").Range("I7")  'montant

'modification BD pour les champs d'une ligne ESP en 1ere ligne (7)
    ElseIf Sheets("BD").Range("A" & ligne_selectionnee) = ligne_selectionnee And Sheets("BD").Range("J" & ligne_selectionnee) = "perso" Then
        Sheets("BD").Range("C" & ligne_selectionnee + 1) = Sheets("saisie").Range("C7")  'date
        Sheets("BD").Range("D" & ligne_selectionnee + 1) = Sheets("saisie").Range("D7")  'prestataire
        Sheets("BD").Range("E" & ligne_selectionnee + 1) = Sheets("saisie").Range("E7") 'client
        Sheets("BD").Range("F" & ligne_selectionnee + 1) = Sheets("saisie").Range("F7") 'kms
        Sheets("BD").Range("G" & ligne_selectionnee + 1) = Sheets("saisie").Range("G7")
        Sheets("BD").Range("H" & ligne_selectionnee + 1) = Sheets("saisie").Range("H7") 'obs
        Sheets("BD").Range("I" & ligne_selectionnee + 1) = Sheets("saisie").Range("I7")  'montant

    End If

        '3eme ligne

'remplissage BD pour les champs manquants d'une ligne CB en 1ere ligne (8)
    If Sheets("BD").Range("A" & ligne_selectionnee + 2) = ligne_selectionnee + 1 And Sheets("BD").Range("J" & ligne_selectionnee) <> "perso" Then
        Sheets("BD").Range("E" & ligne_selectionnee + 2) = Sheets("saisie").Range("E8") 'client
        Sheets("BD").Range("F" & ligne_selectionnee + 2) = Sheets("saisie").Range("F8") 'kms
        Sheets("BD").Range("G" & ligne_selectionnee + 2) = Sheets("saisie").Range("G8")
        Sheets("BD").Range("H" & ligne_selectionnee + 2) = Sheets("saisie").Range("H8") 'obs
        Sheets("BD").Range("I" & ligne_selectionnee + 2) = Sheets("saisie").Range("I8")  'montant

'modification BD pour les champs d'une ligne ESP en 1ere ligne (8)
    ElseIf Sheets("BD").Range("A" & ligne_selectionnee + 2) = ligne_selectionnee + 1 And Sheets("BD").Range("J" & ligne_selectionnee) = "perso" Then
        Sheets("BD").Range("C" & ligne_selectionnee + 2) = Sheets("saisie").Range("C8")  'date
        Sheets("BD").Range("D" & ligne_selectionnee + 2) = Sheets("saisie").Range("D8")  'prestataire
        Sheets("BD").Range("E" & ligne_selectionnee + 2) = Sheets("saisie").Range("E8") 'client
        Sheets("BD").Range("F" & ligne_selectionnee + 2) = Sheets("saisie").Range("F8") 'kms
        Sheets("BD").Range("G" & ligne_selectionnee + 2) = Sheets("saisie").Range("G8")
        Sheets("BD").Range("H" & ligne_selectionnee + 2) = Sheets("saisie").Range("H8") 'obs
        Sheets("BD").Range("I" & ligne_selectionnee + 2) = Sheets("saisie").Range("I8")  'montant

    End If

        '4éme ligne

'remplissage BD pour les champs manquants d'une ligne CB en 1ere ligne (9)
    If Sheets("BD").Range("A" & ligne_selectionnee + 3) = ligne_selectionnee + 2 And Sheets("BD").Range("J" & ligne_selectionnee) <> "perso" Then
        Sheets("BD").Range("E" & ligne_selectionnee + 3) = Sheets("saisie").Range("E9") 'client
        Sheets("BD").Range("F" & ligne_selectionnee + 3) = Sheets("saisie").Range("F9") 'kms
        Sheets("BD").Range("G" & ligne_selectionnee + 3) = Sheets("saisie").Range("G9")
        Sheets("BD").Range("H" & ligne_selectionnee + 3) = Sheets("saisie").Range("H9") 'obs
        Sheets("BD").Range("I" & ligne_selectionnee + 3) = Sheets("saisie").Range("I9")  'montant

'modification BD pour les champs d'une ligne ESP en 1ere ligne (9)
    ElseIf Sheets("BD").Range("A" & ligne_selectionnee + 3) = ligne_selectionnee + 2 And Sheets("BD").Range("J" & ligne_selectionnee) = "perso" Then
        Sheets("BD").Range("C" & ligne_selectionnee + 3) = Sheets("saisie").Range("C9")  'date
        Sheets("BD").Range("D" & ligne_selectionnee + 3) = Sheets("saisie").Range("D9")  'prestataire
        Sheets("BD").Range("E" & ligne_selectionnee + 3) = Sheets("saisie").Range("E9") 'client
        Sheets("BD").Range("F" & ligne_selectionnee + 3) = Sheets("saisie").Range("F9") 'kms
        Sheets("BD").Range("G" & ligne_selectionnee + 3) = Sheets("saisie").Range("G9")
        Sheets("BD").Range("H" & ligne_selectionnee + 3) = Sheets("saisie").Range("H9") 'obs
        Sheets("BD").Range("I" & ligne_selectionnee + 3) = Sheets("saisie").Range("I9")  'montant

    End If

        ' 5éme ligne

'remplissage BD pour les champs manquants d'une ligne CB en 1ere ligne (10)
    If Sheets("BD").Range("A" & ligne_selectionnee + 4) = ligne_selectionnee + 3 And Sheets("BD").Range("J" & ligne_selectionnee) <> "perso" Then
        Sheets("BD").Range("E" & ligne_selectionnee + 4) = Sheets("saisie").Range("E10") 'client
        Sheets("BD").Range("F" & ligne_selectionnee + 4) = Sheets("saisie").Range("F10") 'kms
        Sheets("BD").Range("G" & ligne_selectionnee + 4) = Sheets("saisie").Range("G10")
        Sheets("BD").Range("H" & ligne_selectionnee + 4) = Sheets("saisie").Range("H10") 'obs
        Sheets("BD").Range("I" & ligne_selectionnee + 4) = Sheets("saisie").Range("I10")  'montant

'modification BD pour les champs d'une ligne ESP en 1ere ligne (10)
    ElseIf Sheets("BD").Range("A" & ligne_selectionnee + 4) = ligne_selectionnee + 3 And Sheets("BD").Range("J" & ligne_selectionnee) = "perso" Then
        Sheets("BD").Range("C" & ligne_selectionnee + 4) = Sheets("saisie").Range("C10")  'date
        Sheets("BD").Range("D" & ligne_selectionnee + 4) = Sheets("saisie").Range("D10")  'prestataire
        Sheets("BD").Range("E" & ligne_selectionnee + 4) = Sheets("saisie").Range("E10") 'client
        Sheets("BD").Range("F" & ligne_selectionnee + 4) = Sheets("saisie").Range("F10") 'kms
        Sheets("BD").Range("G" & ligne_selectionnee + 4) = Sheets("saisie").Range("G10")
        Sheets("BD").Range("H" & ligne_selectionnee + 4) = Sheets("saisie").Range("H10") 'obs
        Sheets("BD").Range("I" & ligne_selectionnee + 4) = Sheets("saisie").Range("I10")  'montant

    End If

Code en feuille saisie

7ndf-formulaire.xlsm (714.89 Ko)

merci

fronck

Bonjour,

Avec un mot de passe sur l'accès au code (VBE) ????????

ric

le fichier sans mot de passe au vba.

6ndf-formulaire.xlsm (714.90 Ko)

Bonjour,

Répéter 5 fois le même code avec de petites incrémentations ...

Je ne suis pas un expert, mais je dirais qu'une boucle aurait été mon choix.

ric

Bonjour,

j'y ai pensé, mais çà ne réduit pas le nombre de ligne pour moi.

fronck

Bonsoir,

La première chose à faire est de créer une procédure générique pour l'appeler en fonction de paramètres du genre :

Sub Remplissage(R as integer)
'remplissage BD pour les champs manquants d'une ligne CB en 1ere ligne (8)
    If Sheets("BD").Range("A" & ligne_selectionnee + R + 1) = ligne_selectionnee + R And Sheets("BD").Range("J" & ligne_selectionnee) <> "perso" Then
        Sheets("BD").Range("E" & ligne_selectionnee + R + 1) = Sheets("saisie").Range("E8") 'client
        Sheets("BD").Range("F" & ligne_selectionnee + R + 1) = Sheets("saisie").Range("F8") 'kms
        Sheets("BD").Range("G" & ligne_selectionnee + R + 1) = Sheets("saisie").Range("G8")
        Sheets("BD").Range("H" & ligne_selectionnee + R + 1) = Sheets("saisie").Range("H8") 'obs
        Sheets("BD").Range("I" & ligne_selectionnee + R + 1) = Sheets("saisie").Range("I8")  'montant
'modification BD pour les champs d'une ligne ESP en 1ere ligne (8)
    ElseIf Sheets("BD").Range("A" & ligne_selectionnee + R + 1) = ligne_selectionnee + R And Sheets("BD").Range("J" & ligne_selectionnee) = "perso" Then
        Sheets("BD").Range("C" & ligne_selectionnee + R + 1) = Sheets("saisie").Range("C8")  'date
        Sheets("BD").Range("D" & ligne_selectionnee + R + 1) = Sheets("saisie").Range("D8")  'prestataire
        Sheets("BD").Range("E" & ligne_selectionnee + R + 1) = Sheets("saisie").Range("E8") 'client
        Sheets("BD").Range("F" & ligne_selectionnee + R + 1) = Sheets("saisie").Range("F8") 'kms
        Sheets("BD").Range("G" & ligne_selectionnee + R + 1) = Sheets("saisie").Range("G8")
        Sheets("BD").Range("H" & ligne_selectionnee + R + 1) = Sheets("saisie").Range("H8") 'obs
        Sheets("BD").Range("I" & ligne_selectionnee + R + 1) = Sheets("saisie").Range("I8")  'montant
    End If
  End Sub
    

et faire les appels :

For i = 0 to 4
  Call Remplissage(i)
Next i

Ensuite, on peut dire qu'il y a des renseignements communs et donc :

Sub Remplissage(R as integer)

        Sheets("BD").Range("E" & ligne_selectionnee + R + 1) = Sheets("saisie").Range("E8") 'client
        Sheets("BD").Range("F" & ligne_selectionnee + R + 1) = Sheets("saisie").Range("F8") 'kms
        Sheets("BD").Range("G" & ligne_selectionnee + R + 1) = Sheets("saisie").Range("G8")
        Sheets("BD").Range("H" & ligne_selectionnee + R + 1) = Sheets("saisie").Range("H8") 'obs
        Sheets("BD").Range("I" & ligne_selectionnee + R + 1) = Sheets("saisie").Range("I8")  'montant

    If Sheets("BD").Range("A" & ligne_selectionnee + R + 1) = ligne_selectionnee + R And Sheets("BD").Range("J" & ligne_selectionnee) = "perso" Then
        Sheets("BD").Range("C" & ligne_selectionnee + R + 1) = Sheets("saisie").Range("C8")  'date
        Sheets("BD").Range("D" & ligne_selectionnee + R + 1) = Sheets("saisie").Range("D8")  'prestataire
    End If
End Sub

devrait fonctionner.

Bonjour,

désolé, mais ne te comprenant pas j'ai fait avec mes bases une double boucle et çà marche dans ce sens (macro generer lignes) :

        i = ligne_selectionnee
    For j = 6 To 10

'n° lignes en commençant par 1 alors que ligne_selectionnée commence à 2 en BD
        Worksheets("saisie").Range("A" & j) = Sheets("BD").Range("A" & i)
'jour de la semaine en chiffres (1 = dimanche, 7 = samedi, valeurs en cellules
        Worksheets("saisie").Range("B" & j) = Weekday(Sheets("BD").Range("C" & i))
'date au format 'Format(date_test, "dd.mm.yy")
        Worksheets("saisie").Range("C" & j) = CDate(Sheets("BD").Range("C" & i))
        Worksheets("saisie").Range("D" & j) = Sheets("BD").Range("D" & i)
        Sheets("saisie").Range("E" & j) = Sheets("BD").Range("E" & i)
        Sheets("saisie").Range("F" & j) = Sheets("BD").Range("F" & i)
'listes déroulantes: valeurs en cellules
        Sheets("saisie").Range("G" & j) = Sheets("BD").Range("G" & i)
'cols OBS
        Sheets("saisie").Range("H" & j) = Sheets("BD").Range("H" & i)
'alertes remplissage
        If Sheets("saisie").Range("H" & j) = "" Then
        Sheets("saisie").Range("H" & j) = _
        "=IF(RC[-1]=""divers"",""Veuillez préciser svp"",IF(RC[-1]=""resto bar accompagné"",""veuillez nommer les invités (ou initiales société)"",""""))"
        End If
'cols chiffres
        Sheets("saisie").Range("I" & j) = Sheets("BD").Range("I" & i)
      i = i + 1
      Next j

fronck

Bonjour à tous,

Pour le code dit "pas très propre" ... un essai ...

La première condition = "" et ElseIf = "perso"

est différente des 4 autres lignes <> "perso" et ElseIf = "perso"

On a donc besoin de deux blocs ...

   Dim Y As Byte
   Dim Z As Byte

      If Sheets("BD").Range("A" & ligne_selectionnee) = ligne_selectionnee - 1 And Sheets("BD").Range("J" & ligne_selectionnee) = "" Then
         For Z = 0 To 4
            Sheets("BD").Cells(ligne_selectionnee, 5 + Z) = Sheets("saisie").Cells(6, 5 + Z)
         Next Z
      ElseIf Sheets("BD").Range("A" & ligne_selectionnee) = ligne_selectionnee - 1 And Sheets("BD").Range("J" & ligne_selectionnee) = "perso" Then
         For Z = 0 To 6
            Sheets("BD").Cells(ligne_selectionnee, 3 + Z) = Sheets("saisie").Cells(6, 3 + Z)
         Next Z
      End If

   For Y = 1 To 4
      If Sheets("BD").Range("A" & ligne_selectionnee + Y) = ligne_selectionnee + (Y - 1) And Sheets("BD").Range("J" & ligne_selectionnee) <> "perso" Then
         For Z = 0 To 4
            Sheets("BD").Cells(ligne_selectionnee + Y, 5 + Z) = Sheets("saisie").Cells(6 + Y, 5 + Z)
         Next Z
      ElseIf Sheets("BD").Range("A" & ligne_selectionnee + Y) = ligne_selectionnee + (Y - 1) And Sheets("BD").Range("J" & ligne_selectionnee) = "perso" Then
         For Z = 0 To 6
            Sheets("BD").Cells(ligne_selectionnee + Y, 3 + Z) = Sheets("saisie").Cells(6 + Y, 3 + Z)
         Next Z
      End If
   Next Y

ric

Bonjour ric,

je me suis accordé une fantaisie, mais pour moi ="" ou <>"perso" signifiat la même chose.

désolé.

merci

fronck

Bonjour,

Good, il y a un bloc de moins

ric

Bonjour,

On peut modifier, par exemple :

Sheets("BD").Range("E" & ligne_selectionnee) = Sheets("saisie").Range("E6")
Sheets("BD").Range("F" & ligne_selectionnee) = Sheets("saisie").Range("F6")
Sheets("BD").Range("G" & ligne_selectionnee) = Sheets("saisie").Range("G6")
Sheets("BD").Range("H" & ligne_selectionnee) = Sheets("saisie").Range("H6")
Sheets("BD").Range("I" & ligne_selectionnee) = Sheets("saisie").Range("I6")

par :

Sheets("BD").Cells(ligne_selectionnee, 5).Resize(, 5).Value = Sheets("saisie").Cells(6, 5).Resize(, 5).Value

Cdlt.

Bonjour à tous,

... je me suis accordé une fantaisie, mais pour moi ="" ou <>"perso" signifiat la même chose ...

Il ne reste donc que ceci pour faire la même chose que le code de la demande ...

que l'on retrouve dans la macro ...

Private Sub CommandButton_enregistrer_Click()

   Dim Y As Byte
   Dim Z As Byte

   For Y = 0 To 4
      If Sheets("BD").Range("A" & ligne_selectionnee + Y) = ligne_selectionnee + (Y - 1) And Sheets("BD").Range("J" & ligne_selectionnee) <> "perso" Then
         For Z = 0 To 4
            Sheets("BD").Cells(ligne_selectionnee + Y, 5 + Z) = Sheets("saisie").Cells(6 + Y, 5 + Z)
         Next Z
      ElseIf Sheets("BD").Range("A" & ligne_selectionnee + Y) = ligne_selectionnee + (Y - 1) And Sheets("BD").Range("J" & ligne_selectionnee) = "perso" Then
         For Z = 0 To 6
            Sheets("BD").Cells(ligne_selectionnee + Y, 3 + Z) = Sheets("saisie").Cells(6 + Y, 3 + Z)
         Next Z
      End If
   Next Y

ric

Bonjour à tous,

Comme indiqué hier à 23h21, j'ai trouvé la solution, mais j'ai pris l'exemple du code de

sub generer lignes

J'ai fait pareil pour

Private Sub CommandButton_enregistrer_Click()

avec

    For i = 6 To 10
    If Sheets("BD").Range("A" & ligne_selectionnee) = ligne_selectionnee - 1 And Sheets("BD").Range("J" & ligne_selectionnee) <> "perso" Then
        Sheets("BD").Range("E" & ligne_selectionnee) = Sheets("saisie").Range("E" & i) 'client
        Sheets("BD").Range("F" & ligne_selectionnee) = Sheets("saisie").Range("F" & i) 'kms
        Sheets("BD").Range("G" & ligne_selectionnee) = Sheets("saisie").Range("G" & i) 'liste deroul
        Sheets("BD").Range("H" & ligne_selectionnee) = Sheets("saisie").Range("H" & i) 'obs
        Sheets("BD").Range("I" & ligne_selectionnee) = Sheets("saisie").Range("I" & i)  'montant
'modification BD pour les champs d'une ligne ESP en 1ere ligne (6)
    ElseIf Sheets("BD").Range("A" & ligne_selectionnee) = ligne_selectionnee - 1 And Sheets("BD").Range("J" & ligne_selectionnee) = "perso" Then
        Sheets("BD").Range("C" & ligne_selectionnee) = Sheets("saisie").Range("C" & i)  'date
        Sheets("BD").Range("D" & ligne_selectionnee) = Sheets("saisie").Range("D" & i)  'prestataire
        Sheets("BD").Range("E" & ligne_selectionnee) = Sheets("saisie").Range("E" & i) 'client
        Sheets("BD").Range("F" & ligne_selectionnee) = Sheets("saisie").Range("F" & i) 'kms
        Sheets("BD").Range("G" & ligne_selectionnee) = Sheets("saisie").Range("G" & i) 'liste deroul
        Sheets("BD").Range("H" & ligne_selectionnee) = Sheets("saisie").Range("H" & i) 'obs
        Sheets("BD").Range("I" & ligne_selectionnee) = Sheets("saisie").Range("I" & i)  'montant
    End If
    ligne_selectionnee = ligne_selectionnee + 1
    Next i
10ndf-formulaire.xlsm (670.87 Ko)

Cà devrait aller non?

merci à tous.

fronck

Rechercher des sujets similaires à "code nettoyer"