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
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
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 Ifre,
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 IfBonsoir 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)
ElseA 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.