Mon premier UserForm

Hello
je viens de réussir mon premier Userform :+1:
Pour les trois premiers textBox ça va puisque les cellules de destination sont fixes (toujours les mêmes).et sur l’onglet ou s’ouvre le userform !
Là où je suis dans la panade, c’est le dernier textBox qui doit aller s’inscrire dans la première cellule vide de la colonne F dans un TS sur un autre onglet.
J’ai bien essayé d’adapter un code que Cow18 m’avais fait, avec les déclarations de variable, mais…

Je ne serais pas contre un petit coup de pouce pour ce dernier textBox :innocent:

Exercice pratique 1.xlsm (603,3 Ko)

@rhodo y aurait moyen de répondre sans faire un roman ? ça fait 10 minutes que tu écris…

désolé, ce message est erroné.

Merci, mais…
Tout ce que je demandais était un coup de pouce pour la dernière textbox, je ne veux l’avoir à l’ouvrir qu’une fois, et ce, en cliquant sur le bouton pour appeler l’userform, les raccourcis, comment dire… Je m’en fous, entre temps, j’ai continué à faire ma petite pratique avec un unprotect à l’ouverture du userform et un protect quand je valide en cliquant sur fermer…
Ta solution, même si elle t’apparait plus logique, ce n’est pas ce que je veux.
Je préfère les trucs minimalistes, là, il faut ouvrir le fichier, faire le raccourci, rentrer les chiffres, fermer le userform, changer d’onglet, refaire le raccourci, retaper les chiffres et refermer le userform, alors que ma méthode demande juste une fois l’affichage du userform de tout rentrer et de cliquer sur fermer.
Mais je regarderai quand même ton travail…

désolé, ce message est erroné.

ben si je viens d’essayer et non, il faut ouvrir le userform deux fois sur deux onglets, alors que je ne veux qu’une ouverture du userform sur un onglet et tout renseigner dans le même userform, sans avoir à changer d’onglet ou de recharger le userform

De plus, si c’est seulement pour afficher le userform sur l’onglet CAC40 et après devoir rentrer la valeur, je n’ai pas besoin d’un userform alors, à ce moment, je rentre la valeur directement dans le tableau. Ce qui sera plus rapide…

à ce moment il suffit de cliquer sur le bouton "Fermer"

de toutes manières, je ne l’ouvre jamais par « mégarde »

désolé, ce message est erroné.

Les Looney Tunes, ça te parle ? la bête furieuse qui déménage tout en tourbillonnant… c’est un diable de Tasmanie, on est loin de l’écureuil

1 « J'aime »

désolé, ce message est erroné.

Le mien, c’est le baby taz

elle me plait plus (+)

je l’ai adapté à ma sauce,

  • j’ai gardé ton code pour le remplissage des TextBox
  • J’ai viré la partie "raccourci" et remis/gardé mon clic sur le bouton…
  • J’ai rajouté un Unprotect et protect (j’ai verrouillé toutes les cellules de l’onglet pour éviter la perte des formules) après le traitement des 3 premières valeurs, avant le changement d’onglet, et rajouter un Worksheets(« CAC40 »).activate
Private Sub ToggleButton1_Click()
  Dim v#, n&, r&: r = 2
  ' Ont dévérouille la feuille Valeur
  Sheets("Valeur").Unprotect
  
  With Worksheets("Valeur")
    v = Val(Replace$(TxB_equilibre, ",", ".")): If v > 0 Then [Equilibre] = v
    v = Val(Replace$(TxB_prudence, ",", ".")): If v > 0 Then [Prudence] = v
    v = Val(Replace$(TxB_stoeffler, ",", ".")): If v > 0 Then [Stoeffler] = v
  End With
   ' Re-verrouiller l'onglet "Valeur" en cliquant sur le bouton "Fermer"
    Sheets("Valeur").Protect 
    
  v = Val(Replace$(TxB_CAC40, ",", "."))
  'normalement, quand on utilise un TS, il ne doit pas y avoir de lignes vides dedans !
  'je les ai laissées car tu as l'habitude d'utiliser ton tableau tel qu'il est, mais
  'du coup, c'est plus compliqué de trouver quelle est la dernière ligne utilisée ;
  'd'où le Do .. Loop que j'ai employé.
  
  With Worksheets("CAC40")
    With .ListObjects("Tab_Cloture")
      If Not .DataBodyRange Is Nothing Then
        n = .ListRows.Count: If n > 0 Then r = n + 1
      End If
    End With
    
    Do While .Cells(r, 6) = "": r = r - 1: Loop
    If v > 0 Then .Cells(r + 1, 6) = v
    
    ' Fermer le UserForm
  Unload UF_saisievaleur
   End With
   
   ' affichage de l'onglet
Worksheets("CAC40").Activate

  
End Sub

pour la petite histoire les TS avec les lignes sont encore de mes débuts sur Excel et je ne veux pas reprendre toutes mes formules que j’avais faites à l’époque sur toutes les différentes pages incriminées
et comme sur la feuille CAC40, j’ai deux tableaux, je ne veux pas non plus, bien que ce serait plus dans la norme, les fusionnées, il faudrait que je revois toutes mes plages nommées

en général j’utilise plutôt celui-là
unnamed

essaye ce fichier : Exercice pratique 1 - v3.xlsm (604,2 Ko)

ben non, je n’ai pas l’intention d’utiliser l’userform sur un autre onglet…!

dans mon fichier, je les ai verrouillés… donc voila !

ont peut mais ce n’est pas une obligation, avec mes modifs et test préalable, avec l’unload me ça me disait variable non définie, donc comme le unload avec le nom du userform fonctionnait voila…
edit, je viens de voir que j’avais mis un point apres le Unload et avant le Me

par contre, concernant la déclaration des variables, il n’y a pas de type

là d’accord, c’est parce que le tableau commence à la deuxième ligne

v ok ça donne la valeur de mes cellules

n ok, je compte les lignes et tant que c’est différent de zéro, je considère que r = n+1 (mais pourquoi r au lieu de n=n+1) donc je continue et dès que je tombe sur une cellule vide de la colonne 6 je remonte d’une ligne r=r-1 puis je sélectionne la cellule en dessous r+1 de la colonne 6 et j’écris la valeur

ah, donc je crois comprendre n ce sont les lignes de tout mon onglet et dès que n rencontre du vide, il fait n=r-1 pour tomber sur la derniere cellule non vide de la colonne 6 et ecrire dans la cellule r=r+1 soit la premiere celule vide du tableau et de la colonne 6

bonjour, je n’ai pas tout lu, mais je pense que taz067 demande ceci
Exercice pratique 1.xlsm (598,1 Ko)

PS. le TS ne contient pas des lignes vides !

Hello Cow
par contre, avec ton fichier j’ai une erreur de compilation
un End with sans with

Private Sub ToggleButton1_Click()
     Dim c, r

     'vérifier si les 4 Textboxes sont rempli
     If Len(TxB_stoeffler.Text) = 0 Then MsgBox "Stoeffer manque", vbCritical: Exit Sub
     If Len(TxB_prudence.Text) = 0 Then MsgBox "Prudence manque", vbCritical: Exit Sub
     If Len(TxB_equilibre.Text) = 0 Then MsgBox "Equilibre manque", vbCritical: Exit Sub
     If Len(TxB_CAC40.Text) = 0 Then MsgBox "CAC40 manque", vbCritical: Exit Sub

     Range("Stoeffler") = CDbl(Replace(TxB_stoeffler.Value, ".", ","))     'la valeur "double"
     Range("Prudence") = CDbl(Replace(TxB_prudence.Value, ".", ","))
     Range("Equilibre") = CDbl(Replace(TxB_equilibre.Value, ".", ","))

     With Range("Tab_Cloture").ListObject    'le TS (même sans préciser la feuille !!!)
          r = .ListRows.Count                'nombre de listrows
          If r = 0 Then Set c = .InsertRowRange Else Set c = .ListRows.Add.Range     'dépendant si le TS est vide ou pas = .insertrowrange ou listrows.add.range
          If r > 0 Then
               With c.Cells(1)
                    .FormulaR1C1 = "=IF(RC[1]=0,"""",IF(WEEKDAY(R[-1]C)=6,R[-1]C+3,R[-1]C+1))"     'si ce n'est pas la première ligne, formule pour la date
                    .Value = .Value          'remplacer la formule par sa valeur
               End With
          End If                             '*********************Manquant *******************************************************************
          c.Cells(1, 2).Value = CDbl(Replace(TxB_CAC40.Value, ".", ","))     'la 2eme cellule de la nouvelle ligne

          Application.Goto c, 1              'éventuellement se déplacer vers cette cellule
     End With

     Unload Me
End Sub

ce dernier « End If » manque !!! (5 lignes avant end sub)
Vous voyez aussi qu’écrire dans une feuille qui n’est pas la feuille active ne pose pas des problèmes. Remplacer la formule de la date par sa valeur, je préfère cela, si, un jour vous supprimez des lignes ou une autre fausse manipulation …

Oui ça, ça fonctionne maintenant sauf que, le TS clôture est censé écrire la date et la différence par rapport à la veille et le TS ouverture est censé se décaler d’un jour.

Exercice pratique 1.xlsm (601,7 Ko)
si on connait aussi les jours fériés, on ignora le premier janvier

je viens de rajouter les jours fériés dans mon classeur
comment on fait pour les "ignoré"
Exercice pratique 1.xlsm (602,9 Ko)