Aide alimentation tableau à partir d'un formulaire

Bonjour,

Je n'arrive pas, lorsque je rentre mes infos dans le formulaire, à venir alimenter correctement le tableau c'est-à-dire dès la première ligne.

Merci par avance pour votre aide

11test-forum.xlsx (15.58 Ko)

Quelqu'un ?

Help

Bonjour,

je crois que tu as joint le mauvais fichier : c'est un .xlsx qui ne contient aucun code VBA, et aucun formulaire !

* seul un fichier .xlsm peut contenir des macros, donc du code VBA

* un UserForm n'est d'aucune utilité sans code VBA associé !

dhany

Oh pardon ! Le voici :

Merci !

12test-forum.xlsm (15.59 Ko)

Bonjour jewlesd,

De retour ?

Tu as des soucis aujourd'hui pour envoyer un fichier correct.

Ton nouveau fichier ne comporte aucune procédure ni de Userform.

Cdlt.

Et oui de retour !

Le dernier fichier envoyé doit être bon

Merci !

Bonjour jewlesd,

De retour ?

Tu as des soucis aujourd'hui pour envoyer un fichier correct.

Ton nouveau fichier ne comporte aucune procédure ni de Userform.

Cdlt.

Et oui de retour !

Le dernier fichier envoyé doit être bon

Merci !

Re,

Et non !...

Cdlt.

Zut... toujours pas ?

2test-forum-vf.xlsm (15.59 Ko)

Re,

Et non !...

Cdlt.

Zut, toujours pas ?

4test-forum-vf.xlsm (15.59 Ko)

@jewlesd

* y'a un p'tit progrès : ton fichier a l'extension .xlsm ; il peut donc contenir du code VBA.

* mais il manque toujours ton formulaire (UserForm) et le code VBA associé !

dhany

Re,

Si tu reprends ton précédent fichier (issu d'un autre post), tu as la solution pour déterminer la première cellule vide (rCell) de ton tableau.

 Set lo = ws.ListObjects(1)
            With lo
                If .InsertRowRange Is Nothing Then
                    Set rCell = .HeaderRowRange.Cells(1).Offset(.ListRows.Count + 1)
                Else
                    Set rCell = .InsertRowRange.Cells(1)
                End If
            End With

A te relire.

Cdlt.

screen

dhany

Re,

Si tu reprends ton précédent fichier (issu d'un autre post), tu as la solution pour déterminer la première cellule vide (rCell) de ton tableau.

Test savings version test.xlsm

 Set lo = ws.ListObjects(1)
            With lo
                If .InsertRowRange Is Nothing Then
                    Set rCell = .HeaderRowRange.Cells(1).Offset(.ListRows.Count + 1)
                Else
                    Set rCell = .InsertRowRange.Cells(1)
                End If
            End With

A te relire.

Cdlt.

Bonjour Jean-Eric,

Ça ne fonctionne pas ou bien c'est moi hein mais voilà ce que ça donne (ça va rentrer les infos lignes 68 au lieu de ligne 6) :

Bonjour,

Pour commencer un tableau (listobject) est dynamique. Il est inutile (déconseillé) de le dimensionner par défaut.

Lors de l'ajout de lignes, les formules, les mises en forme sont reconduites (y.c. les MFCs si existantes).

Tes formules de recherche sont à revoir.

J'ai ajouté une procédure pour réinitialiser le tableau (si nécessité et tests ; voir module CleanDate et procédure Reset_Table).

Je te renvoie le fichier modifié.

A te relire.

Cdlt.

Bonjour,

Pour commencer un tableau (listobject) est dynamique. Il est inutile (déconseillé) de le dimensionner par défaut.

Lors de l'ajout de lignes, les formules, les mises en forme sont reconduites (y.c. les MFCs si existantes).

Tes formules de recherche sont à revoir.

J'ai ajouté une procédure pour réinitialiser le tableau (si nécessité et tests ; voir module CleanDate et procédure Reset_Table).

Je te renvoie le fichier modifié.

A te relire.

Cdlt.

Tracker pour forum v2.xlsm

Merci beaucoup Jean-Eric ! Je vais revoir ton code pour essayer de le comprendre mais ça fonctionne parfaitement

Bonjour,

Pour commencer un tableau (listobject) est dynamique. Il est inutile (déconseillé) de le dimensionner par défaut.

Lors de l'ajout de lignes, les formules, les mises en forme sont reconduites (y.c. les MFCs si existantes).

Tes formules de recherche sont à revoir.

J'ai ajouté une procédure pour réinitialiser le tableau (si nécessité et tests ; voir module CleanDate et procédure Reset_Table).

Je te renvoie le fichier modifié.

A te relire.

Cdlt.

Tracker pour forum v2.xlsm

Re-bonjour Jean-Eric

Je t'embête à nouveau car j'ai une nouvelle question.

Dans le code que tu m'as donné, j'ai ensuite fait des divisions comme suit :

With rCell

.Value = Listedéroulanteinitiatives.Value

.Offset(, 5).Value = Textsavings1.Value

.Offset(, 6).Value = Devises.Value

.Offset(, 7).Value = Textsavings2.Value

.Offset(, 8).Value = Devises2.Value

.Offset(, 9).Value = TextBox1.Value

.Offset(, 10).Value = CDate(TextBox2.Value)

.Offset(, 12).Value = .Offset(, 18).Value / .Offset(, 11).Value

.Offset(, 14).Value = .Offset(, 19).Value / .Offset(, 13).Value

.Offset(, 16).Value = .Offset(, 9).Value / .Offset(, 15).Value

Columns("N:N").NumberFormat = "dd/mm/yyyy"

End With

Or les valeurs au dénominateur (.Offset(, 15).Value, .Offset(, 11).Value, .Offset(, 13).Value) peuvent être égales à 0 et dans ce cas un message d'erreur apparaît car la division par 0 est impossible. Je souhaiterais que cela ne m'affiche rien dans la cellule si leur valeur est égale à 0. Comment puis-je faire ? J'ai essayé d'insérer une fonction if mais ça n'a pas fonctionné...

Merci à toi pour ton aide

Bonjour,

comme ceci :

If .Offset(, 11).Value <> 0 Then .Offset(, 12).Value = .Offset(, 18).Value / .Offset(, 11).Value
If .Offset(, 13).Value <> 0 Then .Offset(, 14).Value = .Offset(, 19).Value / .Offset(, 13).Value
If .Offset(, 15).Value <> 0 Then .Offset(, 16).Value = .Offset(, 9).Value / .Offset(, 15).Value

dhany

Rechercher des sujets similaires à "aide alimentation tableau partir formulaire"