Hello
je viens de réussir mon premier Userform
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
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…
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 »
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
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
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.