Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

4 problèmes en VBA

22 réponses
Avatar
Dominique
Bonjour,
Je viens de cr=E9er une feuille de calcul pour enregistrer des documents
(Num=E9ro, Titre, Auteur, Date-doc, ISBN=85). Compl=E8te d=E9butante en VBA=
,
j'ai r=E9ussi, en piochant des petits morceaux de code =E0 droite, =E0
gauche, =E0 cr=E9er un userform qui me satisfait. Enfin presque. J'ai
quand m=EAme plusieurs petits probl=E8mes pour lesquels j'ai besoin de
votre aide.

1. Je voudrais que le champ "Date-doc" ne comprenne que l'ann=E9e. J'ai
r=E9ussi =E0 limiter l'entr=E9e =E0 4 caract=E8res chiffres. Si ce ne sont =
pas
des chiffres qui sont saisis, un message d'erreur s'affiche, la bo=EEte
"Date-doc" est vid=E9e et en attente d'une nouvelle entr=E9e. Mon
probl=E8me : comment imposer des dates coh=E9rentes ? Parce que si j'entre
3084, la saisie est accept=E9e=85

2. Toujours dans ce champ "Date-doc", mais aussi dans ISBN et Num=E9ro,
je saisis des chiffres dans le userform mais le r=E9sultat affich=E9 dans
la table est sous forme texte, m=EAme si je param=E8tre ces colonnes par
'Format de cellule'. Ca ne me g=EAne pas outre mesure puisque je n'ai
pas de calcul =E0 faire dans ces zones mais le petit triangle qui
annonce l'erreur dans le coin de chaque cellule me d=E9range beaucoup
lui=85

3. Encore par rapport aux champs num=E9riques : si j'entre des lettres
dans le champ "num=E9ro" et que je clique sur mon bouton "OK", j'ai bien
un message d'erreur. Mais toutes les donn=E9es (y compris non valides)
sont n=E9anmoins saisies dans ma table. Comment faire pour que le bouton
"OK" n'autorise l'enregistrement des donn=E9es que si elles sont TOUTES
valides ?

4. Et derni=E8re chose=85 j'aimerais bien que le champ "Num=E9ro" se
remplisse automatiquement : 1, 2, 3, 4, etc. et que le curseur du
userform se place directement sur le champ suivant. J'ai toujours la
possibilit=E9 de pr=E9-remplir la colonne de la table et de supprimer la
bo=EEte de saisie du userform, mais tant qu'=E0 faire=85

Si vous voulez que je vous passe mon document, ce n'est pas un
probl=E8me, faites-le moi juste savoir. Je vous remercie par avance.
Dominique.

2 réponses

1 2 3
Avatar
michdenis
Et pour ton dernier problème :
*********************************************
4. Et dernière chose… j'aimerais bien que le champ "Numéro" se
remplisse automatiquement : 1, 2, 3, 4, etc. et que le curseur du
userform se place directement sur le champ suivant. J'ai toujours la
possibilité de pré-remplir la colonne de la table et de supprimer la
boîte de saisie du userform, mais tant qu'à faire…
*********************************************

Une suggestion :

A ) d'abord, utilise un contrôle "Label" (étiquette) , Tu t'assures que
personne ne peut modifier sa valeur... !

Dans la procédure Initialize qui s'exécute en ouvrant le formulaire,
tu appelles la procédure "Incrémenter_Champ_Auto" qui se charge
de récupérer la dernière entrée dans ton tableau de la colonne A de
la feuille "Feuil1" et ajoute 1
Comme la variable "Valeur_Champ_Auto" a été déclaré avec l'expression
Static, la variable conserve sa valeur pour la durée où le formulaire sera
ouvert.

Pour incrémenter la valeur, chaque fois que tu videras tes autres champs
pour la saisie d'un nouvel enregistrement, tu n'as qu'à appeler la procédure:
Incrémenter_Champ_Auto

'--------------------------------------
Private Sub UserForm_Initialize()
Incrémenter_Champ_Auto
End Sub
'--------------------------------------
Sub Incrémenter_Champ_Auto()

Static Valeur_Champ_Auto As Long

'Tu adaptes le nom de la feuille où est ton tableau
'et le la colonne où sont tes numéros auton dans la feuille
With Worksheets("Feuil1")
x = .Range("A65536").End(xlUp).Row
'Je suppose que la première ligne est l'étiquette de colonne
If x = 1 Then x = 2
Valeur_Champ_Auto = .Range("A" & x) + 1
End With
Me.Label1 = Valeur_Champ_Auto
End Sub
'--------------------------------------

Voilà !



"michdenis" a écrit dans le message de groupe de discussion :

Tu dois te rappeler qu'un textbox contient toujours du texte
mais si c'est des chiffres que tu saisis.

Lorsque tu veux transférer la valeur de ton textbox (du texte) vers
les cellules de ta feuille de calcul, tu dois utiliser les fonctions de
conversion d'excel. Tu peux regarder dans l'aide d'Excel sous
"fonctions de conversion"

Par exemple si la valeur numérique ne contient pas de décimale,
Range("A1").Value = Clng(Textbox1)

Avec valeur décimale
Range("A1").Value = Cdbl(textbox1)

Dans le dernier cas, tu sais, les fonctions de conversion utilisent les paramètres
définis dans le panneau de configuration de Windows. En conséquence, si tu
utilises la virgule comme séparateur décimale dans le panneau de configuration
et le point dans le Textbox lors de la saisie, la fonction Cdbl() ne sait pas travailler
avec le point... pour contourner ce détail, tu adaptes comme ceci :
Range("A1").Value = CDbl(Application.Substitute(TextBox2, ".", ","))

Et dans le cas d'une date dans ton textbox,
If isdate(textbox1) = true then
Range("A1").value = cdate(textbox)
end if

Et dans chaque cas, tu peux appliquer un format de cellule qui te convient.
Pour un format standard
Range("A1").NumberFormat = "General"

un format date
Range("A1").numberformat = "DD/MM/YYYY"





"Dominique" a écrit dans le message de groupe de discussion :

On 20 nov, 21:52, "michdenis" wrote:
Misange est occupée,

Essaie quelque chose comme ceci, tu adaptes
le nom du textbox




Yes ! Ca marche et quoi que je saisisse.
Trop génial... C'est plus que du bonbon ;-)))

Est ce que j'abuse si je propose de passer au second point ?

"Toujours dans ce champ "Date-doc", mais aussi dans ISBN et Numéro,
je saisis des chiffres dans le userform mais le résultat affiché dans
la table est sous forme texte, même si je paramètre ces colonnes par
'Format de cellule'. Ca ne me gêne pas outre mesure puisque je n'ai
pas de calcul à faire dans ces zones mais le petit triangle qui
annonce l'erreur dans le coin de chaque cellule me dérange beaucoup
lui… "

Si tu en as marre, pas de problème !

MERCI !
Dominique
Avatar
Dominique
On 21 nov, 00:17, "michdenis" wrote:
Et pour ton dernier problème :
*********************************************




Merci beaucoup. Sincèrement.
J'ai regardé tout ça un peu rapidement, mais je dois avouer que là, j e
sature un peu : comme je le disais précédemment, ce n'est que la
première fois que je me mets dans le vba, et j'ai la tête un peu en
compote. Je verrai ça plus en détail dans la semaine et voir si mon
userform se tient, parce qu'à force de faire des essais dans tous les
sens, il a sûrement besoin d'être un peu "nettoyé" et les différent es
choses qui ne marchent pas viennent peut-être de là ?
Quoi qu'il en soit, je sens bien que je me pique au jeu... Mon compte
sur Excelabo vient d'être validé, je vais charger des exemples et me
plonger dans tout ça. P'têt même que je vais m'acheter un bouquin ?

En tout cas, je vous remercie encore Misange et MichDenis, et je
reviens vers vous d'ici quelques temps si je patauge !
Dominique.
1 2 3