Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Transformer InputBox en UserForm avec TextBox et CommandButton

Piaf79

XLDnaute Junior
Bonsoir le forum,

Je cherche à insérer une ou plusieurs lignes via UserForm (via TextBox et bouton de validation).
J'ai trouvé ce code mais via InputBox :

VB:
Sub Incrémentation()

    Dim xCount$
LableNumber:
    xCount = Application.InputBox("Nombre de lignes à incrémenter", "Tableau de gestion", , , , , , 1)
       If xCount = "" Or Not IsNumeric(xCount) Then Exit Sub
    If xCount < 1 Then
        MsgBox "La valeur saisie doit être supérieure à 0, merci de renseigner une valeur correcte.", vbInformation, "Tableau de gestion"
        GoTo LableNumber
    End If
    ActiveCell.EntireRow.Copy
    Range(ActiveCell.Offset(1, 0), ActiveCell.Offset(xCount, 0)).EntireRow.Insert Shift:=xlDown
    Application.CutCopyMode = False

End Sub

Est-il possible de "convertir" ce code pour l'intégrer dans un CommandButton ?

Bonne soirée,

Piaf79
 

Piaf79

XLDnaute Junior
Merci vgendron pour le lien.

J'ai essayé de fonctionner ainsi :

VB:
Private Sub CommandButton3_Click()

    Dim X As Integer
    X = TextBox1.Value
    ActiveCell.EntireRow.Copy
    Range(ActiveCell.Offset(1, 0), ActiveCell.Offset(X, 0)).EntireRow.Insert Shift:=xlDown
    Application.CutCopyMode = False
    Unload Me

End Sub

Private Sub TextBox1_Change()

    On Error Resume Next
    
    If Not IsNumeric(Right(TextBox1, 1)) Then
    TextBox1 = Left(TextBox1, Len(TextBox1) - 1)
    End If


End Sub

Cela fonctionne pour toutes les valeurs supérieurs à 0 (ajout du bon nombre de lignes).
Par contre quand je renseigne la valeur 0 et que je valide... il y a deux lignes qui sont ajoutées.
Une aide ?

P79
 

vgendron

XLDnaute Barbatruc
normal, quelle que soit la valeur de X, tu commences par
ActiveCell.EntireRow.Copy ==> tu as donc toujours au moins une ligne ajoutée
pour X=0, autant faire un test
if X<>0 then
ajout de x lignes
end if
 

Piaf79

XLDnaute Junior
normal, quelle que soit la valeur de X, tu commences par
ActiveCell.EntireRow.Copy ==> tu as donc toujours au moins une ligne ajoutée
pour X=0, autant faire un test
if X<>0 then
ajout de x lignes
end if
vgendron,

Voici le code compilé qui a l'air de fonctionner :


VB:
Private Sub CommandButton1_Click()

    Application.ScreenUpdating = False
    Dim lignes As Integer
    Dim debut As Integer
    lignes = TextBox1.Value
    For debut = 1 To lignes
    With ActiveCell.EntireRow
        .Offset(debut, 0).Insert Shift:=xlDown
        .Copy Destination:=.Offset(debut, 0)
    End With
    Next debut
    Unload Me

End Sub

Private Sub TextBox1_Change()

    On Error Resume Next
    
    If Not IsNumeric(Right(TextBox1, 1)) Then
    TextBox1 = Left(TextBox1, Len(TextBox1) - 1)
    End If

End Sub
 

Discussions similaires

Réponses
8
Affichages
728
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…