Raccourcir un code Contenant des If

Bonjour le Forum,

J'ai écris un code qui permet de remplir des plages de données dans une feuille dont voici :

Function SaisieCodeBarre()
If Me.Cbx_produit2 = "" Then
MsgBox "Veuillez dabord sélectionner un produit.", vbOKOnly + vbExclamation, "Code Barre"
Else
 If MsgBox("Voulez-vous Créer le CodeBarre de ce Produit?", vbYesNo + vbQuestion, "Création Code Barre") = vbYes Then
  If Feuil8.Range("D3") = "" Then
    Feuil8.Range("D2") = Me.TextReference
    Feuil8.Range("D3") = Me.Cbx_produit
    Feuil8.Range("D4") = Me.TextDesignation
    MsgBox "Code Barre créer avec succès", vbOKOnly + vbInformation, "CodeBarre"
  ElseIf Feuil8.Range("D7") = "" Then
    Feuil8.Range("D6") = Me.TextReference
    Feuil8.Range("D7") = Me.Cbx_produit
    Feuil8.Range("D8") = Me.TextDesignation
    MsgBox "Code Barre créer avec succès", vbOKOnly + vbInformation, "CodeBarre"
  ElseIf Feuil8.Range("D11") = "" Then
    Feuil8.Range("D10") = Me.TextReference
    Feuil8.Range("D11") = Me.Cbx_produit
    Feuil8.Range("D12") = Me.TextDesignation
    MsgBox "Code Barre créer avec succès", vbOKOnly + vbInformation, "CodeBarre"
  ElseIf Feuil8.Range("D15") = "" Then
    Feuil8.Range("D14") = Me.TextReference
    Feuil8.Range("D15") = Me.Cbx_produit
    Feuil8.Range("D16") = Me.TextDesignation
    MsgBox "Code Barre créer avec succès", vbOKOnly + vbInformation, "CodeBarre"
  ElseIf Feuil8.Range("D19") = "" Then
    Feuil8.Range("D18") = Me.TextReference
    Feuil8.Range("D19") = Me.Cbx_produit
    Feuil8.Range("D20") = Me.TextDesignation
    MsgBox "Code Barre créer avec succès", vbOKOnly + vbCritical, "CodeBarre"
  Else
  FrmSupprimerCodeBarre.Show
  End If
 End If
End If
End Function
image

Le problème c'est qu'il y a beaucoup de plages différentes et je voudrais donc savoir si par hasard il y aurais la possibilité de raccourcir ce code ? j'ai mis 5 plages sur ce code mais il y en a normalement 20... du coup s'il y a une méthode pour réduire la taille du code je prend . Merci pour votre aide.

Cordialement.

bonjour,

on peut encore créer un boucle des 5 cellules pour raccourcir en plus

     Dim c     As Range
     If Me.Cbx_produit2 = "" Then
          MsgBox "Veuillez dabord sélectionner un produit.", vbOKOnly + vbExclamation, "Code Barre"
     Else
          If MsgBox("Voulez-vous Créer le CodeBarre de ce Produit?", vbYesNo + vbQuestion, "Création Code Barre") = vbYes Then
               If feuil8.Range("D3") = "" Then
                    Set c = feuil8.Range("D2")
               ElseIf feuil8.Range("D7") = "" Then Set c = feuil8.Range("D6")
               ElseIf feuil8.Range("D11") = "" Then Set c = feuil8.Range("D10")
               ElseIf feuil8.Range("D15") = "" Then Set c = feuil8.Range("D14")
               ElseIf feuil8.Range("D19") = "" Then Set c = feuil8.Range("D18")
               End If

               If Not c Is Nothing Then
                    c.Resize(3).Value = Application.Transpose(Me.TextReference, Me.Cbx_produit, Me.TextDesignation)
               Else
                    FrmSupprimerCodeBarre.Show
               End If
          End If
     End If

re,

    Dim c As Range, b As Boolean
     If Me.Cbx_produit2 = "" Then
          MsgBox "Veuillez dabord sélectionner un produit.", vbOKOnly + vbExclamation, "Code Barre"
     Else
          If MsgBox("Voulez-vous Créer le CodeBarre de ce Produit?", vbYesNo + vbQuestion, "Création Code Barre") = vbYes Then
               For i = 0 To 100     'boucle 100 fois
                    Set c = feuil8.Range("D3").Offset(i * 4)
                    If c.Value = "" Then
                         c.Offset(-1).Resize(3).Value = Application.Transpose(Me.TextReference, Me.Cbx_produit, Me.TextDesignation)
                         b = True     'drapeau
                         Exit For
                    End If
               Next
               If Not b Then FrmSupprimerCodeBarre.Show     'si après 100 boucles, rien trouvé
          End If
     End If

Bonsoir BsAlv,

Merci pour les 2 propositions, le premier fonctionne très bien pourrais tu juste m'expliquer cette ligne stp?

               If Not c Is Nothing Then
                    c.Resize(3).Value = Application.Transpose(Me.TextReference, Me.Cbx_produit, Me.TextDesignation)
               Else

A quoi correspond le Resize(3), Merci encore.

re,

le range c était assigné plus haut et était une ligne plus haut que la cellule qui devrait être vide.

Alors avec cette ligne, on veut assigner 3 cellules, cette cellule et les 2 en dessous, pour écrire 3 valuers de l'userforme.

https://docs.microsoft.com/fr-fr/office/vba/api/excel.range.resize

Avec ce "resize", on peut agrandir une plage dans les 2 directions à partir d'une cellule.

resize a 2 variables, le premier est le nombre de lignes et le 2ieme le nombre de colonnes.

Rechercher des sujets similaires à "raccourcir code contenant"