Renseigner un tableau Excel à partir d'une UserForm

Bonjour à tous,

Je suis débutant VBA et je furète pas mal sur la toile.

Pour l'instant j'ai un tableau de saisie de factures 'TableauFactures' sur 9 Colonnes avec soit du texte, soit un Menu Déroulant. Cela marche très bien.

Mon projet est d'automatiser la saisie à travers une UserForm. A travers les exemples trouvés sur le net, j'ai correctement dimensionné la Form et placé les différents boutons, ComboBox et TextBox. Leurs numéros ne se suivant pas, mais après vérification, la tabulation est correcte.

Malgré la foultitude d'exemples trouvés, j'ai soit un pb de variable déclarée, soit un souci pour trouver la dernière ligne vide et ensuite décaler les cellules par la droite pour déclarer l'origine de l'information saisie (la variable L).

Pour l'instant j'ai ce code qui se déclenche lorsque on clique sur le bouton 'Nouvelle Facture'

'Pour le bouton Nouvelle facture

Private Sub CommandButton1_Click()

  Dim L As Integer

    If MsgBox(" Confirmez-vous l’insertion de cette nouvelle facture ? ", vbYesNo, " Demande de confirmation d’ajout ") = vbYes Then

L = Sheets("TableauFactures").Range("A" & Rows.Count).End(xlUp).Row + 1
'Pour placer le nouvel enregistrement à la première ligne de tableau non vide

        Range(" A " & L).Value = TextBox7

        Range(" B " & L).Value = ComboBox2

        Range(" C " & L).Value = TextBox1

        Range(" D " & L).Value = ComboBox3

        Range(" E " & L).Value = TextBox3

        Range(" F " & L).Value = TextBox4

        Range(" G " & L).Value = ComboBox4

        Range(" H " & L).Value = ComboBox5

        Range(" I " & L).Value = TextBox8

    End If

End Sub

Lorsque je teste ce bout, j'ai un message d'erreur d'exécution 1004 sur le Range , la méthode Range de l'Objet '_Global' a échoué

J'ai essayé avec la fonction Cells, mais pas trouvé la bonne syntaxe.

Merci pour vos conseils.

Bonjour et bienvenue sur le forum

Pour qu'on puisse te conseiller ou t'aider efficacement, il faudrait que tu joignes ton fichier.

S'il est trop gros, compresse le ou passe par www.cjoint.com

Bye !

Merci pour ta réponse, pour l'instant il n'est qu'en développement.

Je ne m'attaque qu'à la partie du Bouton de saisie nouvelle facture. Ensuite il faudra voir les Combo Box pour intégrer les menus déroulants.

Les quelques exemples que j'ai essayés ne semblent pas fonctionner Je n'ai qu'une première ligne vide.1

J'ai apporté quelques corrections et commentaires à ta macro.

Bye !

J'y regarde. Merci beaucoup.

gmb a écrit :

J'ai apporté quelques corrections et commentaires à ta macro.

Bye !

Superbe, merci beaucoup. Cela marche du tonnerre. J'ai supprimé le bouton 'Modifier', nous n'en avons pas besoin en fait.

Par contre, bien que la colonne "Montant" soit correctement paramétrée en 'Nombre', le fait de saisir par le module modifie systématiquement les valeurs saisies en format 'Texte'. N'y a t il pas moyen de forcer le formatage en nombre ?

Merci

Bonjour

Yanderuelle a écrit :

N'y a t il pas moyen de forcer le formatage en nombre ?

Essaie en remplaçant :

wF.Range("F" & L).Value = TextBox4

par :

wF.Range("F" & L).Value = Val(TextBox4)

Bye !

Impecc, cela fonctionne. Merci très beaucoup.

Sinon j'avais trouvé un truc du genre

Range("F" & L) .NumberFormat = "#,##0.00"

Mais je ne savais pas où l'intégrer. Je pense au même niveau que les déclarations de saisie. J'étais en train de travailler dessus.

Merci gmb

Bonjour,

Pour un autre projet, de la même façon que le forçage du format en nombre, existe t il une version pour forcer le formatage en date ?

genre "Dat(TextBox4)" ou "vbDat(TextBox4)" ?

Bien que mon tableau soit correctement paramétré, les dates entrées à la main sont correctes et les calculs de delta date dans une autre colonne sont OK ,les dates entrées par l'intermédiaire de la Userform apparaissent OK dans le tableau, mais le calcul me donne une erreur "#valeur!!"

Merci

En fait en cherchant, l'erreur n'est pas du à la saisie de la date, mais au fait que les cases pour lesquelles dans la UserForm on ne saisie rien, Excel considére qu'il y a une valeur non identifiée. Donc mon test logique ensuite sur cette case ne fonctionne pas.

J'ai un SI(ESTVIDE) qui me renvoie quelque chose à chaque fois, même si rien n'est saisie.

Donc la question est plutôt, comment indiquer à la formule qu'une case où rien n'est saisie est forcément vide ? Où comment saisir dans la UserForm ?

Merci

Bonjour

Yanderuelle2 a écrit :

comment indiquer à la formule qu'une case où rien n'est saisie est forcément vide ?

Je ne comprends pas très bien la question.

Il n'y a dans une TextBox que ce que tu as indiqué à la macro d'y mettre, que ce soit une une valeur saisie directement, une constante (la date du jour par exemple, ou un taux de TVA), le résultat d'un calcul issu d'opérations entre d'autre controles ou des cellules de la feulle de calcul...

Et si tu n'as rien indiqué, la valeur de la TextBox est vide et vaut : ""

Tu peux d'ailleurs tester si cette TextBox est vide :

If TextBox7 = "" Then
...

Où comment saisir dans la UserForm ?

??? Mais ... en cliquant sur le contrôle concerné et en tapant sur les touches du clavier..... !

Bye !

Alors j'explique la logique de la UserForm et ensuite le pb rencontré.

L'utilisateur a deux solutions de saisies.

1/ Saisir une date de signature (colonne I) ET une Date de Fin (Colonne J); OU

2/ Saisir une date de signature (colonne I) ET une durée (en nombre de mois) (colonne K).

Il faut également saisir obligatoirement une période de préavis (colonne L); ou cliquer sur Reconduction tacite (colonne M)

Ensuite un calcul se fait dans la colonne N afin de calculer la date de Préavis

Dans la logique le calcul ne se fait en N que sur test de la colonne A si une info est renseignée SI(ESTVIDE(A3)

  • ensuite, si une date de fin est renseignée en J, alors le calcul à venir en N est une date de préavis = date de fin J - période de préavis L.
  • sinon la date de préavis calculée en N est Date de signature I + durée K - durée de préavis L

Ca c'est pour le calcul.

Ensuite il y a un affichage conditionné sur la colonne N qui vient comparée la date résultat N et la date du jour. Si Date du Jour est supérieure à date Calculée, = affichage en rouge. Dans une étape ultime, je souhaiterai qu'à l'ouverture du fichier, un message mail soit envoyée à une adresse mail programmée.

L'erreur rencontrée.

Si je saisis les valeurs à la main dans le tableau excel, les calculs fonctionnent. N est correct

Si je saisis les valeurs par la UserForm, la première logique fonctionne car il y a bien une valeur en J

PAR CONTRE, en testant la deuxième logique N = I + K -L, j'ai un joli "#valeur"... En cherchant je me suis rendu compte que cela vient du test de la case J. Comme si la Userform remplissait la case avec une valeur vide. Car il suffit d'effacer cette case pour que le calcul devienne bon. D'accord il serait possible d'inverser la logique de test sur la case pour y arriver, mais bon.....

D'où ma question, comment faire la saisie pour que les champs non renseignés soient bien vides ??? Et pas comme si il y avait quelque chose, mais il y a rien ...

Questions subsidiaires :

  • pb de formatage de la saisie des valeurs monnaie par le Userform
  • est il possible d'envoyer un mail sur lorsque une condition est remplie en N ?

Merci pour les explications très utiles comme chaque fois.

Essaie de préciser la valeur de TexBox8 :

Private Sub CommandButton1_Click()

    Set wF = Sheets("Contract data base")
    If MsgBox(" Confirmez-vous l’insertion de cet nouveau contrat ? ", vbYesNo, " Demande de confirmation d’ajout ") = vbYes Then
....        
        wF.Range("I" & L).Value = TextBox7
        wF.Range("J" & L).Value = TextBox8.Value
...
End Sub

Ca marche !!!!!

Merci bien.

Une idée pour le formatage de la monnaie ?

J'ai trouvé

Private Sub TextBox6_AfterUpdate()
    TextBox6.Value = Format(TextBox6.Value, "#,##0.00 €")
    End Sub
Rechercher des sujets similaires à "renseigner tableau partir userform"