Userform résultats formules retournées automatiquement dans le formulaire

Bonjour,

je suis novice en VBA et avec l'aide de tuto, j'essai de créer un Userform pour remplir un tableau.

Dans mon tableau initial, les premières colonnes comportent des formules. Dès que l'utilisateur rempli le premier champ qui concerne la Date du jour, il m'aurait faut que la formule qui se trouve dans la colonne suivant se fasse et que que le résultat apparaisse dans ma Userform automatiquement. C'est pareil pour deux ou trois autres champs qui comporte des formules.

Je joins mon tableau initiale

Bonjour,

Merci de compléter le profil de votre compte en ajoutant votre version excel

Une petite présentation ICI serait la bienvenue

Si vous ne l'avez pas encore fait, je vous invite à lire :
- La charte du forum
- Quelques fonctionnalités du forum à connaître
qui vous aideront dans vos demandes et réponses sur ce forum.

Regardez aussi les petites icônes mises à votre disposition dans la barre de menu qui :
- vous permettent de poster un code (</>)
- ou de clôturer un fil lorsque vous avez terminé (V)

Merci pour votre participation

Crdlt

Désolé pour le fils, je suis encore novice sur ce forum.

Mon profil est l'Office 365 entreprise

Bonjour à tous,

je suis novice en VBA, mais prêt à apprendre de vos retours. Et d'abord merci à ce site d'exister.

Voila, j'ai un fichier Excel avec quelques formules. Je veux créer un formulaire de saisi des données avec une Userform.

J'ai déjà commencé le travail (merci google), mais certaines choses ne fonctionnent pas bien.

Dans le formulaire le premier champ concerne la date du jour qui s'affiche automatiquement.

A partir de là, je voudrais que les champs du formulaires se calculent automatiquement (selon les formules contenues dans le tableau initial) et s'affichent dans le formulaire. Les champs concernés sont : Année; Numéro; Numéro_Marché et Numero_lot.

Par ailleurs comment faire passer les enregistrements à la ligne suivante après chaque ajout de nouvelle ligne ? Cela ne fonctionne pas encore dans mon formulaire.

Je vous joins mon fichier et mon essai de Userform pour avoir un meilleur retour de votre part.

Je vous remercie et vous salut bien bas pour vos aides et retsours.

Bonsoir

Dans le formulaire le premier champ concerne la date du jour qui s'affiche automatiquement.

A partir de là, je voudrais que les champs du formulaires se calculent automatiquement (selon les formules contenues dans le tableau initial) et s'affichent dans le formulaire. Les champs concernés sont : Année; Numéro; Numéro_Marché et Numero_lot.

Pourquoi voulez-voulez utiliser des formules dans votre tableau ?
On peut faire cela directement dans l'USF

Bonsoir Dan,

d'abord merci pour cette première réponse, tant espérée, je ne savais pas que l'on pouvais mettre des formules dans l'USF.

Du coup, comment on fait cela ? Si vous pouvez me retourner un exemple avec les éléments de mon tableau et USF...je vous remercie par avance.

Question : dès que la date sera insérée automatiquement (date du jour) le reste des formules du USF s'exécuteront ?

Merci pour ton retour

Bonjour

je ne savais pas que l'on pouvais mettre des formules dans l'USF.....

Question : dès que la date sera insérée automatiquement (date du jour) le reste des formules du USF s'exécuteront ?

La réponse est oui.

Je vais y aller pas à pas car cela nécessite des modifications dans ce que vous avez actuellement. L'avantage est déjà que votre fichier est bien réalisé

Une première chose que je vous propose de faire :

- Supprimez toutes les propriétés ROWSSOURCE dans vos combobox. Evitez cette instruction qui pose parfois des soucis et préférez lui toujours l'instruction LIST ou ADDITEM
- Supprimez tous les noms utilisés pour les Rowssource dans le gestionnaire de noms. Vous ne devriez plus en avoir besoin
- Une fois les 2 points ci-dessus terminé mettez ce code à la place de celui existant

Private Sub UserForm_Initialize()
txtDate.Value = Format(Now, "DD/MM/YYYY")
txtAnnee.Value = Year(Date)
With Feuil3
    cboTypeMarche.List = .ListObjects("TTypeMarche").DataBodyRange.Value
    cboChargeMission.List = .ListObjects("TChargeMisssion").DataBodyRange.Value
    cboProcedure.List = .ListObjects("TProcedure").DataBodyRange.Value
    cboCodeNCMP.List = .Range("ListeCodeNCMP").Value 
    cboMode.List = .ListObjects("Tmode").DataBodyRange.Value
    cboNaturePrix.List = .ListObjects("Tprix").DataBodyRange.Value
End With
End Sub

Faites un test d'ouverture de l'USF et dites moi si ok avant que je ne continue. Vous verrez notamment que l'année s'affiche automatiquement dans la textbox.

NB : Si vous avez une erreur à l'ouverture, cela peut provenir d'un Rowssource non supprimé.

Question : pourquoi n'avez vous pas défini un tableau structuré pour le tableau jaune qui reprend les listes des code NCMP ?

Bonjour Dan,

merci encore pour ce retour.

Comme vous me l'aviez conseillé j'ai supprimer toutes les propriétés ROWSSOURCE dans vos combobox ainsi que tous les noms utilisés pour les Rowssource dans le gestionnaire de noms.

J'ai copie/coller le code et après lancement je me retrouve avec cette erreur suivante : Erreur '1004' La méthode 'Range' de l'objet_'Worksheet' a échoué

Par ailleurs, concernant les listes j'avais plutôt travaillé sur celles se trouvant dans l'onglet " Codifications listes protégées" que je compte masquer par la suite pour éviter les manipulations.

Pour la liste jaune je ne dois reprendre que la colonne ou il y a les chiffres des codes NCMP. Comment fallait-il que je structure mieux cela ?

Dans l'attente de votre retour. Encore merci Dan.

Je me permets de vous renvoyer aussi le fichier

J'ai copie/coller le code et après lancement je me retrouve avec cette erreur suivante : Erreur '1004' La méthode 'Range' de l'objet_'Worksheet' a échoué

Oui c'est normal car vous avez supprimé le nom "ListeCodeNCMP" dans le gestionnaire de noms qui lui n'était pas un tableau structuré et concerne le tableau en jaune. Désolé c'est un peu de ma faute car j'aurais dû le préciser.

Pour la liste jaune je ne dois reprendre que la colonne ou il y a les chiffres des codes NCMP. Comment fallait-il que je structure mieux cela ?

Non, vous prenez les deux colonnes du tableau en jaune et vous créez un tableau structuré. Ensuite donnez moi le nom que vous lui attribuez. Peut-être lui donner le nom TCodeNCMP ?
Si vous êtes OK sur ce nom, confirmez-moi et modifiez cette ligne dans la Sub initialize
NB : il vous faut mettre un nom en G1 aussi

cboCodeNCMP.List = .ListObjects("TCodeNCMP").DataBodyRange.Value

Par ailleurs, concernant les listes j'avais plutôt travaillé sur celles se trouvant dans l'onglet " Codifications listes protégées" que je compte masquer par la suite pour éviter les manipulations.

Ok c'est noté.

merci de ne pas me poster pas de fichier car j'ai un fichier de travail sur lequel j'effectue les modifications que je vous communique après.

Je n'ai pas encore compris cette notion de tableau structuré. Vous voulez que je le sélectionne et que je le déclare comme tableau de données avec la commande Mettre sous forme de tableau d4excel ?

Pour le nom je suis d'accord avec "TCodeNCMP"

merci pou votre réponse Dan.

Vous voulez que je le sélectionne et que je le déclare comme tableau de données avec la commande Mettre sous forme de tableau d4excel ?

Oui exact. Après si vous cliquez sur une cellule dans le tableau vous verrez dans votre menu Excel à droite un onglet nommé "Création de tableau"
Cela vous montre que votre tableau est au format structuré

Autre point :
Dans votre feuille Tableausource, je ne comprends pas la logique de la colonne N°
Exemple mettons qu'en C2 et C3, vous avez 2022 et que vous mettez le chiffre 1 en F2 et F3. Cela vous renvoie 1 en D2 et D3. Logique cela ?
Je pensais au départ, que la valeur de N° correspondait au nombre de ligne sur la même année
Dans mon exemple : on a deux fois 2022, donc D2 serait égal à 1 et D3 égal à 2

Ok, c'est fait et comme dit plus haut je travaille sur l'onglet "Codifications listes protégées"

Suite aux corrections mon code est le suivant :

Private Sub UserForm_Initialize()
txtDate.Value = Format(Now, "DD/MM/YYYY")
txtAnnee.Value = Year(Date)
With Feuil3
cboTypeMarche.List = .ListObjects("TTypeMarche").DataBodyRange.Value
cboChargeMission.List = .ListObjects("TChargeMisssion").DataBodyRange.Value
cboProcedure.List = .ListObjects("TProcedure").DataBodyRange.Value
cboCodeNCMP.List = .ListObjects("TCodeNCMP").Value
cboMode.List = .ListObjects("Tmode").DataBodyRange.Value
cboNaturePrix.List = .ListObjects("Tprix").DataBodyRange.Value
End With
End Sub

Et quand je j'exécute j'ai l'erreur suite : Erreur d'executon '9' : L'indice n'appartient pas à la sélection

Pensez à utiliser les balises de code lorsque vous postez un code (click sur l'icone </> et coller le code dans la fenetre)

Le tableau structuré est bien défini dans la feuille Codifications listes ? (qui correspond à la feuil3). Vérifiez dans le gestionnaire de noms

vous devriez avoir ceci

presse papier01

Désolé pour les balises, cela ne va plus reproduire.

Non, le tableau structuré est defini dans la feuille "Codifications listes protégées" (feuil2)

Voila ce que j'ai concernant les noms de tableau

ecran2

Non, le tableau structuré est defini dans la feuille "Codifications listes protégées" (feuil2)

Ce n'est pas bon là. Tous les autres tableaux sont dans la feuille "Configuration Listes" et l'USF utilisent tous les tableaux de cette feuille

Vous devez supprimer votre nom TCodeNCMP et renommer le tableau structuré 9 en TCodeNCMP. Ensuite le code fonctionnera

Pourquoi dupliquez-vous en fait ? Vous n'avez pas besoin de cette feuille je pense

dans le gestionnaire des noms le bouton supprimer est grisé, j'y est pas accès et pourtant la feuille n'est pas protégée.

Si vous y avez accès, sélectionnez le nom puis cliquez sur le bouton Modifier

Au final vous devez avoir le gestionnaire de noms comme je vous l'ai montré

J'ai reussi à remettre en plage de cellules normales le tableau de la feuil2, et j'ai pu renommé le tableau structuré 9 en TCodeNCMP.

Cependant, j'ai l'erreur suivante :

Erreur d'exécution '438': Propriété ou méthode non gérée par cet objet

oui juste ! il faut modifier cette ligne dans le code Initialize

cboCodeNCMP.List = .ListObjects("TCodeNCMP").ListColumns(1).DataBodyRange.Value

Désolé...

Si ok, merci de préciser pour le point ici -> https://forum.excel-pratique.com/s/goto/1124436

Rechercher des sujets similaires à "userform resultats formules retournees automatiquement formulaire"