Useform et Mise à jour des données d'un tableau

jonleboss

XLDnaute Junior
Bonjour à tous,

Je suis partis d'une base de fichier déjà existante et excellente que j'ai un peu modifier / compléter. Cependant, j’aimerais y ajouter quelques fonctionnalités. Étant plus que débutant, je fais appel à vos sérieuses compétences :D Je suis très cartésien donc voici mes questions organisées que j’espère de façon assez précise :

1 / Comment coder le bouton « impression » dans le useform « résultat » pour que les données affichées s’exportent au bon endroit ( dans les bonnes cases laissées vide en face des intitulés ) dans l’onglet « impression » ? J’aimerais que la fenêtre d’impression s’ouvre dès la copie des données dans l’onglet « impression »

2 / Comment coder la mise à zéro du formulaire de saisie des données dans le useform « saisir » via le bouton « Effacer le formulaire la fiche » ?

3 / Comment coder la suppression / effacement des données de la ligne sélectionnée dans le useform « fenetresup » via le bouton « supprimer la fiche » ?

4 / Comment coder la suppression des données de la ligne sélectionnée dans le useform « resultat » via le bouton « supprimer la fiche » ?

5 / J’aime bien comprendre les fonctions que j’utilise, ainsi pourrait-on m’expliquer la signification de l’extrait de code suivant ?

Dim cel As Range, lig&, i&
If ComboBox1 <> "" Then
Set cel = Feuil1.Range("A2:A" & Feuil1.Range("A" & Rows.Count).End(xlUp).Row).Find(ComboBox1, , , xlWhole)
If Not cel Is Nothing Then lig = cel.Row Else MsgBox "Aucune correspondance trouvée", , "Pas de Corespondance": Exit Sub


Je ne comprends pas l’intérêt de la Combox1 dans le code puisque même si elle est vide le message "Aucune correspondance trouvée", , "Pas de Corespondance" ne s’affiche pas. Par ailleurs, pourquoi la Feuil1 est citée alors qu’aucune donnée ne transite sur cette dernière ?

Je pense pas qu’il y ait beaucoup de challenge pour les pros que vous êtes … Mais, c’est hors de ma portée ;)

Merci d’avance.

Jonathan
 

Pièces jointes

  • création formulaire_JM.xls
    99 KB · Affichages: 54

Robert

XLDnaute Barbatruc
Repose en paix
Re : Useform et Mise à jour des données d'un tableau

Bonjour Jonathan. bonjour le forum,

Des messages inquétants à l'ouverture de ton fichier ??? Du coup j'ai même pas ouvert... Tu devrais regarder ça de plus près sinon tu risques de ne pas obtenir de réponse.
 

jonleboss

XLDnaute Junior
Re : Useform et Mise à jour des données d'un tableau

Bonjour Robert,

J'ai ouvert le fichier sur mon PC et effectivement, il y avait un problème liée à la macro qui se lançais ( Useform.show ) à l'ouverture du fichier.

Merci pour avoir pris le temps de m'indiquer ce problème, j'ai mis une nouvelle version en PJ. Ayant un peu avancé de mon coté, mes questions ont diminué :)

1 / Comment coder le bouton « impression » dans le useform « résultat » pour que les données affichées s’exportent au bon endroit ( dans les bonnes cases laissées vide en face des intitulés ) dans l’onglet « impression » ? J’aimerais que la fenêtre d’impression s’ouvre dès la copie des données dans l’onglet « impression »

2 / Comment coder la modification des données d'une fiche chargée avec le userform " resulat " et les renvoyer vers la feuille recap ?

3 / J’aime bien comprendre les fonctions que j’utilise, ainsi pourrait-on m’expliquer la signification de l’extrait de code suivant ?

Dim cel As Range, lig&, i&
If ComboBox1 <> "" Then
Set cel = Feuil1.Range("A2:A" & Feuil1.Range("A" & Rows.Count).End(xlUp).Row).Find(ComboBox1, , , xlWhole)
If Not cel Is Nothing Then lig = cel.Row Else MsgBox "Aucune correspondance trouvée", , "Pas de Corespondance": Exit Sub


Je ne comprends pas l’intérêt de la Combox1 dans le code puisque même si elle est vide le message "Aucune correspondance trouvée", , "Pas de Corespondance" ne s’affiche pas. Par ailleurs, pourquoi la Feuil1 est citée alors qu’aucune donnée ne transite sur cette dernière ?

Jonathan
 

Pièces jointes

  • création formulaire_JM_1.xls
    95.5 KB · Affichages: 46
  • création formulaire_JM_1.xls
    95.5 KB · Affichages: 53
  • création formulaire_JM_1.xls
    95.5 KB · Affichages: 48
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Useform et Mise à jour des données d'un tableau

Bonsoir Jonathen, bonsoir le forum,

Tout d'abord, les explications concernant ce bout de code :
Code:
Dim cel As Range, lig&, i&'déclaration des variable
If ComboBox1 <> "" Then'condition : si la ComboBox1 n'est pas vide
Set cel = Feuil1.Range("A2:A" & Feuil1.Range("A" & Rows.Count).End(xlUp).Row).Find(ComboBox1, , , xlWhole)
If Not cel Is Nothing Then lig = cel.Row Else MsgBox "Aucune correspondance trouvée", , "Pas de Corespondance": Exit Sub
Un onglet peut être appelé de trois manières différrentes : son nom (Propriété Name), son nom de code (proprieté CodeName) et son index (Numéro d'ordre dans la liste)
On peut donc séléctionner l'onglet Feuil1 (Recap) dans ton exemple par :
Code:
Feuil1.Select
Sheets("Recap").Select
Sheets(2).Select
• La variable cel est donc définie comme étant la recherche Find :
Set cel = Feuil1.Range("A2:A" & Feuil1.Range("A" & Rows.Count).End(xlUp).Row).Find(ComboBox1, , , xlWhole)
• de la valeur entière de la valeur de la ComboBox1 :
Set cel = Feuil1.Range("A2:A" & Feuil1.Range("A" & Rows.Count).End(xlUp).Row).Find(ComboBox1, , , xlWhole)
• dans l'onglet Feuil1 (soit Recap) :
Set cel = Feuil1.Range("A2:A" & Feuil1.Range("A" & Rows.Count).End(xlUp).Row).Find(ComboBox1, , , xlWhole)
• dans la plage A2:A et dernièle ligne éditée de cet onglet :
Set cel = Feuil1.Range("A2:A" & Feuil1.Range("A" & Rows.Count).End(xlUp).Row).Find(ComboBox1, , , xlWhole)

• Si il existe au moins une occurrence trouvée :
If Not cel Is Nothing Then
• la variable lig est égale à la ligne de l'occurrence trouvée
lig = cel.Row
• sinon un message signale qu'aucune occurrence n'est trouvée et la procédure s'arrête
Else MsgBox "Aucune correspondance trouvée", , "Pas de Corespondance": Exit Sub

En pièce jointe ton fichier modifié et commenté.
 

Pièces jointes

  • Jonathan_v01.xls
    130.5 KB · Affichages: 70

jonleboss

XLDnaute Junior
Re : Useform et Mise à jour des données d'un tableau

Bonjour Robert,

Désolé pour le délai dans ma réponse mais je n'avais pas vu que le sujet avait trouvé quelqu'un de courageux pour répondre :)

Merci beaucoup car c'est très très complet et instructif.

Je reviens vers vous si je suis perdu ...

Bonne soirée.

Jonathan.
 

jonleboss

XLDnaute Junior
Re : Useform et Mise à jour des données d'un tableau

Bonsoir Robert,

Encore merci … Je regrette des fois de ne pas avoir choisi des études dans l’informatique plutôt que dans la chimie ! J'ai pas mal bosser, tester, perster, ... et ai à nouveau besoin de vos lumières car suis bloqué :)

Pour vous expliquer certains points :

- Je me suis réservé les objets Comboxbox1 et TextBox1 pour les fonctions d’affichage et de recherche de la variable « CUP » de mon tableau. Je me suis donc permis de réattribuer les noms de certaines TextBox.

- J’ai mis de côté pour le moment les fonctions d’alimentation dynamique des Combobox du USF « saisir » pour les reprendre plus tard.

Voici mes questions, si vous avez encore le temps d’y répondre ;)

1/ J’ai refait le USF « Saisir » avec mes besoins et mon projet ( mais surtout ta super proposition ) mais je n’arrive pas à adapter la fonction d’ajout d’une nouvelle ligne. La colonne B étant une concaténation, la recherche se fait sur les valeurs de la colonne C tout comme l’ajout d’une nouvelle ligne qui doit commencer dans la 1ère cellule non pleine de la colonne C. Ainsi, dans mon fichier en PJ, pour un ajout, elle devrait venir se positionner en C7. Or pour le moment, ça vient se positionner en C11. J’ai essayé de changer la fonction suivante :

Code:
li = .Cells(Application.Rows.Count, 2).End(xlUp).Row + 1 'définit la ligne li

mais rien n’y fait …

Pouvez-vous m’aider ?

2/ Dans le USF « recherche » que signifie, je ne comprends pas comment fonctionne la fonction d’alimentation dynamique de la ComboBox1 :

Code:
Me.ComboBox1.List = .Range(.Cells(2, 2), .Cells(Application.Rows.Count, 1).End(xlUp)).Value

Elle semble configurer la liste de la ComboBox mais que signifie
Code:
Range(.Cells(2, 2)
et
Code:
Cells(Application.Rows.Count, 1).End(xlUp))
? A quel moment indiquez-vous la plage de données à prendre en compte ?

Comme expliquer en 1/, pour une recherche, on se base sur la colonne B ( concaténation ), il me faut donc afficher la liste des valeurs de B3 à B…. c’est-à-dire les valeurs CUP.

3/ Malheureusement, je n’ai pu tester les fonctions de suppression, de MAJ et d’impression puisque je n’arrive pas à faire fonctionner la fonction recherche.

Merci d’avance.

Jonathan.
 

Pièces jointes

  • Jonathan_v01_15-Dec.xls
    128 KB · Affichages: 48

Robert

XLDnaute Barbatruc
Repose en paix
Re : Useform et Mise à jour des données d'un tableau

Bonjour Jonleboss, bonjour le forum,

En pièce jointe ton fichier corrigé. Tu avais parfois oublié de changé le nom dans le code d'une TextBox ou d'une ComboBox...

J'ai remis l'alimentation dynamique des comboboxes car l'avantage est que quand tu rajoutes une valeur dans ton tableau de l'onglet Config, celle-ci est immédiatement prise en compte. Voici comment ça fonctionne. Tout d'abord, on peut, au choix, nommer une cellule avec Range("A1") (Range(adresse)) ou avec Cells(1, 1) (Cells(Ligne, Colonne)). De la même manière une plage peut être appelée par Range("A2:A10") ou Range(Cells(2, 1),Cells(10, 1)). Ainsi pour definir une plage commençant par B2 et finissant de manière variable par la dernière ligne éditée de la colonne B, on peut utiliser : Range(Cells(2, 2), Cells(Application.Rows.Count, 2).End(xlUp).Row).
• Où Cells(2, 2) correspond à B2
• pour la dernière ligne éditée de la colonne B (= 2),
on part de la dernière ligne de cette colonne soit Cells(Applicartion.Rows.Count, 2)
on remonte (xlUp) pour atteindre la première ligne éditée (End).
Ce code correspond à la manipulation des touches du clavier [Fin] + [Flèche vers le haut]...

Cela répond normalement à toutes tes questions...

Le fichier :


 

Pièces jointes

  • Jonathan_v02.xls
    125.5 KB · Affichages: 70

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
314 628
Messages
2 111 337
Membres
111 105
dernier inscrit
Joffrette