Saisie automatique de champs userform depuis Inputbox

re …

avec un bouton de contrôle formulaire, en étant passé par

UserForm1.CheckBox1.Tag = CheckBox_Autre.Value

reprendre avec

Sheets("Feuil2").Shapes("AUTRE").OLEFormat.Object.Value = CheckBox1.Tag = "Vrai" 

Pour la première question, c’est à toi d’essayer en pesant le pour ou le contre (avantage et inconvénient en découlant).

Pour la seconde tu as déjà un modèle à reprendre pour l’ajout demandé.

On ne sait pas quelle est l’utilité de ces ajouts*. Peut-être qu’il sera plus simple avec de fausses cases à cocher.

Je pense que la connaissance du contexte aurait permis des solutions plus rapidement.

Bonjour JeanBaptisteP,

Tu as du mal recopié le code fourni.

Je joins le fichier ou est présent ce code et cela fonctionne bien.

Ensuite il me semble que la proposition d'André13 sur l'ajout d'un Frame au formulaire principal était mieux adapté qu'un 2ième formulaire ne présentant que trois textbox. Il suffit de faire de la place sur le 1ier en réduisant les controls ou les espaces entre eux. Ou en réduisant le Zoom à 60%

Bonsoir à vous tous!

Pour commencer, je tenais à vous remercier pour vos propositions de code, c'est très gentil de m'aider.

Pour répondre à vos remarque, les fichiers que j'ai pu joindre ne sont que des exemples, mon projet comporte bien plus que 3 textbox sur chaque UF.

Par souci de confidentialité je ne peux pas le publier ici mais j'adapte vos codes à mon projet.

Pour répondre à votre remarque XCellus, je n'ai pas choisi de réduire à 60% le zoom sur ma UF car celle-ci ne serait plus lisible dans ce cas. La proposition de Andre13 était très bien mais je n'ai pas réussi à l'optimiser pour mon projet sachant qu'il y aurait une dizaine de textbox et checkbox à déplacer vers le bas pour y insérer les autres textbox dans le cas ou Checkbox1est validé.

Peut-être avez-vous des propositions d'amélioration !

En tous cas je vais regarder tout ce que vous m'avez proposé demain, à tête reposée !

Encore un grand merci pour votre contribution.

Bonne fin de soirée.

J-Baptiste

Bonjour…

Je reprends ma proposition* avec un seul formulaire dans lequel j’ai gardé le seconde cadre mais en ajoutant des contrôles pour un exemple de gestion plus développée.

Bien entendu, elle n’est valable que si d’autres interférences n’interviennent pas*.

*J’avoue que je n’ai pas lu plus de 70 interventions en ne traitant que le dernier sujet.

9usf-et-report.xlsm (34.65 Ko)

Re ...

Oups, avec le bon fichier

17usf-et-report.xlsm (30.91 Ko)

!

Bonjour à vous tous,

La solution proposée par XCellus fonctionne très bien mais je bloque sur un élément. En effet, dans le code ci-dessous je n'arrive pas à recopier les textbox1 à textbox3 une fois que j'ai dupliqué la "Feuil2". Pourtant cela fonctionne bien pour la "Feuil3". Avez-vous une idée ?

Private Sub CommandButton1_Click()

Worksheets("Feuil3").Copy After:=Sheets(Sheets.Count)
With ActiveSheet

.Range("A2") = Me.Controls("TextBox1"): Me.Controls("TextBox1") = ""
.Range("A3") = Me.Controls("TextBox2"): Me.Controls("TextBox2") = ""
.Range("A4") = Me.Controls("TextBox3"): Me.Controls("TextBox3") = ""

If CheckBox1 = True Then
Worksheets("Feuil2").Copy After:=Sheets(Sheets.Count)
With ActiveSheet

.Range("B3") = Me.Controls("TextBox1"): Me.Controls("TextBox1") = ""
.Range("B4") = Me.Controls("TextBox2"): Me.Controls("TextBox2") = ""
.Range("B5") = Me.Controls("TextBox3"): Me.Controls("TextBox3") = ""

.Range("B7") = Me.Controls("TextBox1").Tag: Me.Controls("TextBox1").Tag = ""
.Range("B8") = Me.Controls("TextBox2").Tag: Me.Controls("TextBox2").Tag = ""
.Range("B9") = Me.Controls("TextBox3").Tag: Me.Controls("TextBox3").Tag = ""

End With
End If
End With

    Unload Me
End Sub

Merci pour votre retour Ordonc, je vais regarder ça !

Bonne fin de journée

J-Baptiste

Bonjour toutes et tous

peut être en changeant le me

Me.Controls par le nom de ton userform2

ce qui donne dans la seconde partie

userform2.Controls

ou précisez pour les deux userforms tout simplement

userform1.Controls et userform2.Controls à la place de me.Controls

Private Sub CommandButton1_Click()

Worksheets("Feuil3").Copy After:=Sheets(Sheets.Count)
With ActiveSheet

.Range("A2") = Me.Controls("TextBox1"): Me.Controls("TextBox1") = ""
.Range("A3") = Me.Controls("TextBox2"): Me.Controls("TextBox2") = ""
.Range("A4") = Me.Controls("TextBox3"): Me.Controls("TextBox3") = ""

If CheckBox1 = True Then
Worksheets("Feuil2").Copy After:=Sheets(Sheets.Count)
With ActiveSheet

.Range("B3") = Userform2.Controls("TextBox1"): Userform2.Controls("TextBox1") = ""
.Range("B4") = Userform2.Controls("TextBox2"): Userform2.Controls("TextBox2") = ""
.Range("B5") = Userform2.Controls("TextBox3"): Userform2.Controls("TextBox3") = ""

.Range("B7") = Userform2.Controls("TextBox1").Tag: Userform2.Controls("TextBox1").Tag = ""
.Range("B8") = Userform2.Controls("TextBox2").Tag: Userform2.Controls("TextBox2").Tag = ""
.Range("B9") = Userform2.Controls("TextBox3").Tag: Userform2.Controls("TextBox3").Tag = ""

End With
End If
End With

    Unload Me
End Sub

@voir

crdlt,

André

Bonsoir Andre13, merci pour votre réponse et votre proposition ! Malheureusement cela ne fonctionne pas et je ne comprends pas ce qui bloque puisque cela fonctionne bien avec la Feuil3. Etrange...

Je vais essayer de trouver réponse sur des forum.

Bonne soirée.

J-Baptiste

Re

Quand on copie du vide, on ne voit plus rien !

vide

d'où ma mise en garde précédente.

Remarque : Me.Controls("TextBox1") est un abus d'écriture, Textbox1 = ou = Textbox1 suffisent quand le contrôle est dans le formulaire en jeu !

On utilise Me.Controls("TextBox" & n) dans une boucle quand les noms sont indexés !

Ici on ne copie que ce qui concerne les contrôles du premier formulaire donc cela devait passer sans référencement

Private Sub CommandButton1_Click()
    Worksheets("Feuil3").Copy After:=Sheets(Sheets.Count)
    With ActiveSheet
        .Range("A2") = TextBox1
        .Range("A3") = TextBox2
        .Range("A4") = TextBox3
    End With
    If CheckBox1 Then Worksheets("Feuil2").Copy After:=Sheets(Sheets.Count)
    With ActiveSheet
        .Range("B3") = TextBox1: TextBox1 = "" 'ici, pas avant !
        .Range("B4") = TextBox2: TextBox2 = ""
        .Range("B5") = TextBox3: TextBox3 = ""
        .Range("B7") = TextBox1.Tag: TextBox1.Tag = ""
        .Range("B8") = TextBox2.Tag: TextBox2.Tag = ""
        .Range("B9") = TextBox3.Tag: TextBox3.Tag = ""
    End With
    Unload Me
End Sub

Nota : je viens de trouver une raison du contrôle Chexbox qui supplée un bouton bascule (ToggleButton)

Bonjour Ordonc, merci beaucoup pour votre précision ! Je m'y connais très peu en VBA donc veuillez m'excuser pour toutes ces questions.

Et si mes textbox sur ma UF2 s'appellent autrement que Textbox1, Textbox2 et Texbox3 mais plutôt Textbox_A, Textbox_B et Textbox_C à quels endroits dois-je modifier cela s'il vous plait ?

Un grand merci pour tout votre travail ! (et aux autres membres du forum aussi !)

Bon dimanche

J-Baptiste

Bonjour à tous,

Après une semaine de tentatives, j'ai trouvé une solution !

Par contre j'ai encore besoin de votre aide. J'ai mis en place un code sur une feuille pour éviter que les utilisateurs puissent la modifier mais je rencontre un problème. Lorsque le MSGBOX s'affiche et que je clique sur "OK" il réapparait une deuxième fois et je ne veux pas. Je ne vois pas quoi modifier :/

Est-ce que quelqu'un aurait la possibilité de m'aider svp ?

Voici le code:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox "Vous n'avez pas la possibilité de modifier cette feuille.", vbExclamation, "EXCEL"
Dim Immuable As Variant
Dim PasTouche As Range
Set PasTouche = Range("A1:Z70")
Immuable = PasTouche.Value
If Not Application.Intersect(Target, PasTouche) Is Nothing Then: PasTouche.Value = Immuable: Range("AA1").Select
Set PasTouche = Nothing
End Sub

Bonne journée

J-Baptiste

Bonjour JeanBaptisteP,

Il serait plus simple de cacher la feuille. Tes utilisateurs n'iront pas y toucher.

Fais un clic droit sur le nom de ta feuille dans l'éditeur VBA. Puis choisis Masquer en fin de fenêtre ouverte.

Bonjour XCellus,

Merci pour votre réponse ! En fait je ne souhaite pas masquer cette feuille car elle doit rester consultable. Pour tout vous dire, l'utilisateur ouvre un userform qui viendra renseigner cette feuille EXCEL lorsqu'il cliquera sur la bouton valider de la USF mais celle-ci ne devra pas être modifiée par la suite. C'est pour cela que je trouvais ce code intéressant ! Mais s'il n'y a pas de solution, tant pis !

J-Baptiste

Suite,

Si elle doit rester seulement consultable et que plus aucun caractère puisse y être incorporé.

Alors il faut protéger la feuille après validation de l'userform. Le format des cellules A1 à Z70 doit être cochée par l'onglet Protection, Verrouillée.

Ensuite par le menu général d'Excel choisir Révision puis Protéger la feuille. Sur la fenêtre ouverte une coche doit être valide sur Protéger la feuille et le contenu...

Dans le tableau en dessous tout doit être décoché. Enfin choisir un mot de passe en haut de fenêtre et le confirmer après.

Il sera plus possible d'utiliser la feuille en écriture. Elle ne sera que consultable.

Merci pour votre proposition XCellus mais le souci c'est que sur la feuille EXCEL j'ai créé un bandeau de commande avec des boutons qui me permettent d'imprimer ou d'envoyer la feuille par mail. C'est pour cela que j'ai verrouillé uniquement une plage et non toute la feuille !

J-Baptiste

A nouveau,

Il suffit alors de cocher dans la fenêtre Autoriser tous les utilisateurs l'avant dernier choix: Modifier les objets.

Ainsi n'importe quel utilisateur pourra lancer en cliquant sur les boutons, l'impression prédéfinie et/ou l'envoi de Mail en rapport à cette feuille.

Tous les autres choix étant décochées.

De plus seule la personne ayant protégée la feuille pourra la déprotéger pour tout autre besoin à venir.

A moins que tu as encore d'autres objections...

D'accord XCellus, je ne connaissais pas cette possibilité ! Je vais essayer cela !

J'ai également une nouvelle question. J'ai utilisé un code pour que ma USF soit dimensionnée à la résolution de mon écran de PC. (Juste la hauteur m'intéressait).

Je souhaitais également ajouter la possibilité d'utiliser la molette de la souris pour naviguer dans ma USF? J'ai trouvé un code sur un forum que j'ai collé dans mon projet mais cela ne fonctionne pas. Pourtant si je teste sur un USF vierge cela fonctionne à merveille. Peut-être que mes codes se confondent...

Est-ce que vous pourriez m'aider à analyser car ces en dehors de mes compétences. J'ai beau cherche ou essayer des choses je ne m'en sors pas :/

Voici le lien que j'ai trouvé pour utiliser la molette de la souris dans ma USF: https://github.com/cristianbuse/VBA-UserForm-MouseScroll

Voici les 2 codes que j'ai placé dans des modules:

14codes.zip (9.98 Ko)

Et voici le code que j'ai déjà renseigné dans ma USF:

Private Sub UserForm_initialize()
    mat = Range("Z5")
    Range("Z5") = ""
    With Sheets("Matricules")
        Ln = .Range("A:A").Find(mat, lookat:=xlWhole).Row
        For j = 1 To 7
            Controls("TextBox_" & j) = .Cells(Ln, j + 1).Value
        Next j
    End With
    With Sheets("Destinataires")
        ComboBox1.List = .Range("A2:A" & .Range("A" & Rows.Count).End(xlUp).Row).Value
    End With
    With Sheets("Compteur")
    TextBox_NumBordereau.Value = Right(Year(Date), 2) & "-PARIS-" & Format(.Range("A1"), "000")
    End With
ScrollTop = 0
Application.WindowState = xlMaximized
Me.Height = Application.Height - 5
Frame10.Visible = False
Frame9.Top = 588
ScrollHeight = 1180
End Sub

Un grand merci à ceux qui pourront m'apporter leurs connaissances :)

Bonne soirée

J-Baptiste

Ah si si c'est bon, simplement je n'avais pas placé le code à la fin de ma UserForm Initialize !

Par contre j'aimerais que si ma combobox1 est ouverte et que j'utilise la molette de ma souris pour me déplacer dans ma USF, la combobox1 de ferme, est-ce possible ?

D'avance, merci pour vos propositions :)

J-Baptiste

Suite,

Sincèrement tu n'as pas besoin de passer par cet exemple (touffu) Github utilisant la molette de souris pour se déplacer dans un grand formulaire.

Il suffit de prévoir dans les propriétés de ton userform d'utiliser le ScrollBar Vertical. Par défaut il est positionné à None.

Il y aussi le ScrollBar Horizontal quand le formulaire est trop large. Ou les deux ScrollBars ensemble avec la propriété passé à Both.

Pour ce qui est du vertical, regarde la hauteur du formulaire (propriété Height: exemple 700) et inscrit dans la propriété ScrollHeight une valeur bien supérieure.

Par exemple 1700. Ainsi qu'un ScrollTop à 0 (début de barre) qui représente le haut du formulaire.

Je te renvoie un de tes anciens fichiers ou j'ai placé un label en fin de formulaire. Utilise le clic gauche souris pour attraper "l'ascenceur" à droite du formulaire et fait le descendre jusqu'en bas au niveau du label.

Bonne fin de soirée.

Bonsoir XCellus,

Merci beaucoup d'avoir pris le temps de me répondre. J'avais déjà mis une scroolbar verticale avec une valeur supérieure dans la ScrollHeight. Le souci c'est que mon USF est tellement grande qu'il me fallait ça surtout que je n'ai rien trouvé en vba pour changer la couleur du scrollbar car le gris se voit peu malheureusement.

Mais j'ai réussi à m'en sortir avec le code Github ! Le résultat est conforme à ce que je voulais faire.

Je vous solliciterai surement pour d'autres soucis si vous le voulez bien mais en tous cas un grand merci pour ce que vous avez proposé jusqu'à maintenant :)

Bonne fin de soirée à vous aussi !

J-Baptiste

Rechercher des sujets similaires à "saisie automatique champs userform inputbox"