problème de récupération de données dans un formulaire

cgpa

XLDnaute Occasionnel
Bonjour le forum,
N'étant pas un grand spécialiste de vba, je pêche ci et là des morceaux de codes que j'adapte pour mes besoins. En général, cela me réussit. Mais ici, je galère.
Je désire afficher un formulaire dans lequel je peux choisir un contact, et les données du contact doivent apparaître dans les textbox. Cependant, elles apparaissent mais mélangés. Il n'y a que quand je crée le contact que les données sont renvoyées dans les bonnes cellules de la feuille. J'ai le même problème si je désire modifier le contact à partir du formulaire. Je ne parviens pas à comprendre où est l'erreur. Pouvez-vous m'aider? Merci d'avance.
 

Pièces jointes

  • base pour demande aide.xlsm
    210.8 KB · Affichages: 72

Lone-wolf

XLDnaute Barbatruc
Bonsoir cgpa et bonne année

Ce classeur est de quelq'un d'autre mais ce n'ai pas grave.

1) Dans le bouton de modification, il faut te baser juste avec la feuille données, l'autre ne sert à rien puisque les sociétés y sont déjà inscrites.
2) Comme tu utilise ctl(conrôles). Dans les proriétés de toutes les textbox's, tu trouvera "Tag". Ici il faudra inscrire le numéro des colonnes, exemples: A =1; B=2; C=3; D=4 etc. Ensuite dans la macro Charge_Infos

VB:
Dim ctl As Control, col as long, rw

For Each ctl In Me.Controls
col = Val(ctl.Tag)
If TypeName(ctl) = "TextBox" Then
If col > 0 Then
With Sheets("donnees")
rw = Application.Match(cboNomContact, .Columns(3), 0)
ctl.value = .Cells(rw, col)
End With
End if
End if
Next ctl
 
Dernière édition:

cgpa

XLDnaute Occasionnel
Bonsoir Lone-wolf, meilleurs voeux pour cette année et celles à venir! Merci pour cette information et cette analyse. Comme j'ai oublié le fichier au bureau, je tenterai la modification lundi (je n'ai pas la même version d'Excel à la maison). Cela me semble compréhensible. J'ai vu le Tag en propriété, j'espère que cela ira. Bon we.
 
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Bonjour cgpa

J'ai fait un grand nettoyage du fichier et j'ai ajouter SmartIdenter dans le zip. Il Faudra l'installer pour identer tes prochaines macros. Laisse-le faire, un fois terminer, un lien ("Ident") viendra s'ajouter dans le menu (clic-droit sur le module, formulaire et feuille pour le voir). Mais tu peux identer tout le projet en une fois. Pour cela ferme tous les dossiers, clic-droit sur (VBA Project, Nom du classeur) , puis clique sur Ident.

Il y a une chose que je n'ai pas fait , c'est toutes ces macro d'appel que tu as dans les formulaires qu'il faudra supprimer et les mettre directement dans le formulaire lui concernant. Pas besoin de faire 10 macros juste pour 2 ou trois lignes.
 

Pièces jointes

  • Fichiers.zip
    455.7 KB · Affichages: 79

cgpa

XLDnaute Occasionnel
Bonjour Lone-Wolf,
Merci pour tout ce travail. J'ai bien activé "Ident", c'est bien plus lisible. Hier, j'ai travaillé sur des essais, mais malheureusement il me reste des soucis que je ne parviens pas à résoudre. Par exemple, je ne sais plus créer de contact puisque la feuille "Liste" a disparu. Pour la même raison, je ne sais plus supprimer un contact (il y a un appel qui ne fonctionne plus: Me.lblNbAppels.Caption = "0"). Avez-vous une idée de ce qui se passe et vers où je devrais diriger mes recherches? Enfin, je désirer sélectionner la société dans le formulaire à partir du textbox "tbosociétécontact" au lieu du CboNomcontact. Pouvez-vous m'aiguiller ? Merci beaucoup et excellente journée!
 

Lone-wolf

XLDnaute Barbatruc
Bonsoir cgpa

Je n'ai pas vu lblNbAppels, il y a lblcommentaires dans frmcontact. Le plus simple aurait été de ne pas modifier le noms des contrôles. J'ai changé carrement la façon d'utiliser le formulaire frmCreationContact et renommé frmModifContacts (regarde les macros avant de l'utiliser). J'ai ajouté une colonne "Métiers", dans la feuille métiers. Un petit exemple

Aide-constructeur métallique
Aide-polybâtisseur
Artisan du bois
Assistant en pharmacie
Assistant en podologie

Et il y a une chose que j'aimerais savoir, qui a fait toutes ces macros, pour faire ce que fait frmmodifcontacts. De plus, pourquoi ajouter le nom du module procedures.nomdelamacro.... pour appeler une macro? Call CreeContact, c'est tout ce qu'il faut écrire. De plus et c'est le pire, déclarer la macro NumRefContact qui n'existe pas ( Public NumRefContact As Long ), faut le faire.

Avec frmcontacts, sélectionne le nom de la société puis, pour ajouter - modifier ou supprimer, clique sur les boutons correpondants.
 

Pièces jointes

  • base pour demande aide-V3 Corrigée.xlsm
    211.3 KB · Affichages: 39
Dernière édition:

cgpa

XLDnaute Occasionnel
Bonjour Lone-wolf, quel boulot tu as accompli, merci beaucoup. Le code est plus lisible et la façon d'utiliser le formulaire est claire. Cependant, j'ai relevé deux soucis (accepterais-tu d'y jeter encore un coup d'œil?):

1. A partir du formulaire de base frmContacts, le clic sur "créer un contact" s'arrête ici si je n'ai pas sélectionné de contact:
Dim Buttons(1 To 56) As New ColorButtonClass

Si j'ai sélectionné un contact, il s'arrête ici (donnée introuvable):
Private Sub CmdNouveau_Click()
frmModifContacts.Show
frmModifContacts.CmdValider.Visible = True
End Sub
=> CmdValider : où est-il? car le code s'arrête et je ne parviens pas à le modifier pour qu'il créer le contact.

2. Une fois un contact à modifier sélectionné, le second formulaire s'ouvre. Ici, il n'appelle pas les corps de métier ni les travaux proposés que tu as créés (très belle amélioration du service, soit écrit en passant). Par contre, si je modifie le contact en ajoutant un choix dans les combobox, ceux-ci sont bien reportés dans la feuille de données. Si je n'ajoute pas de choix, les données initiales des colonnes concernées sont donc logiquement effacées. Le problème est donc à l'initialisation du formulaire. Si je comprends bien la démarche, le formulaire "frmModifcontacts" vient puiser ses données dans ce qui vient d'être affiché dans le premier formulaire "frmcontacts". Là, je ne vois pas où se trouve le problème dans le code, pourtant il doit y en avoir un.

2. b) Sur ce second formulaire, le bouton "modifier" pose problème lorsqu'on modifie le nom de la société (il fonctionne pour les autres données). Voici l'erreur d'exécution 13 - incompatibilité de type et la ligne du code problématique:
.Cells(rw, col) = Controls("TextBox" & col). Pourtant, cela fonctionne avec les autres données. Est-ce parce qu'il faut garder le même nom pour cette cellule?

Tes modifications sont importantes et judicieuses, merci.

Lorsqu'on a modifié le contact, le formulaire de base est toujours affiché. Comment peut-on le laisser afficher mais en effaçant toutes les données pour qu'il soit vierge?

En tout cas, un tout grand merci pour cette amélioration.
 

cgpa

XLDnaute Occasionnel
Bonsoir Lone-Wolf,
après avoir cherché une solution tout l'après-midi, j'ai tout de même avancé. J'ai pu résoudre mon problème de création de contact (cela fonctionne maintenant). Par contre, je buche toujours sur un problème lors de la modification du contact: le formulaire de modification n'appelle pas les corps de métier ni les travaux proposés que tu as créés et je ne trouve pas la solution. Peux-tu m'aider? Pour le problème 2b) repris dans mon précédent post (la modification ne fonctionne pas si on modifie le nom de la société puisque le code recherche le nom initial pour trouver la ligne), j'ai créé un textbox reprenant le numéro de référence pour que l'appel démarre de là (le numéro de référence ne changer pas). Je pense ainsi pouvoir modifier le nom de la société au même titre qu'une autre donnée du formulaire. Mais comme le bouton de modification ne fonctionne pas en l'état à cause de l'appel des métiers qui n'apparait pas, je suis bloqué. C'est sûrement une bêtise, mais je n'y arrive pas. Peux-tu jeter un œil?
 

Pièces jointes

  • base pour demande aide-V4.xlsm
    199.7 KB · Affichages: 62

Lone-wolf

XLDnaute Barbatruc
Pour les combos des metiers et les services, c'est normal qu'elle n'affichent rien, il faut les ajoutés à la recherche dans la macro d'appel.

VB:
Private Sub CmdModifier_Click()

    If Me.cboSocieteContact.Text = "" Then
        MsgBox "Il n'y a aucun contact à modifier !", vbCritical + vbOKOnly
        Exit Sub
    End If

    frmModifContacts.Show

    On Error Resume Next
    frmModifContacts.TextBox2 = Me.cboSocieteContact
    frmModifContacts.TextBox3 = Me.tboNomContact
    frmModifContacts.TextBox4 = Me.tboPrenomContact
    frmModifContacts.TextBox5 = Me.tboAdresseContact
    frmModifContacts.TextBox6 = Me.tboCodePostalContact
    frmModifContacts.TextBox7 = Me.tboVilleContact
    frmModifContacts.TextBox8 = Me.tboTelProfContact
    frmModifContacts.TextBox9 = Me.tboNumTelecopieContact
    frmModifContacts.TextBox10 = Me.tboTelPortableContact
    frmModifContacts.TextBox11 = Me.tboMailContact
    frmModifContacts.TextBox12 = Me.tboWebContact
    frmModifContacts.TextBox13 = Me.tboTvaContact
    frmModifContacts.TextBox14 = Me.tboRemarquesContact

End Sub

Pour icompatibilité de type, celà vient du faite que tu as du texte espace et nombre dans la colonne Sociétés (Soc 1 - Soc 2 - Soc 3), il faut changer celà par ce que tu veux (toto - tata- titi ect). Il faut modifier la textbox15 par textbox1 et mettre 2 à 14 dans la boucle.
 
Dernière édition:

cgpa

XLDnaute Occasionnel
Bonjour Lone-Wolf,
Merci pour ton explication. Effectivement, en complétant la macro d'appel cela fonctionne pour les métiers et service, j'ai pu corriger. Merci.
Par contre, j'ai toujours le problème lors de la modification ou suppression du contact: le code s'arrête à
.Cells(rw, 1).EntireRow.Delete por la suppression du contact.
.Cells(rw, col) = Controls("TextBox" & col) pour la modification du contact.
Ce sont les deux derniers soucis.
J'ai l'impression d'être un étudiant qui buche sur un problème simple. Peux-tu m'éclairer? J'ai vraiment envie d'aboutir sur ce projet pour pouvoir le nettoyer et proposer un fichier sur ce post qui pourrait être peut-être utile à d'autres. Je te remercie déjà pour toutes les aides que tu m'as apportées.
Bonne journée!
 

Pièces jointes

  • base pour demande aide-V4 - essai correction.xlsm
    149.2 KB · Affichages: 34

Lone-wolf

XLDnaute Barbatruc
Re
C'est sur quel formulaire qu'il y a le problème?

EDIT: j'ai trouvé

Il faut modifier comme ceci, en prenant soins de faire correspondre d'abord les champs comme tu l'as fait pour lautre.

VB:
If reponse = vbYes Then
        With Sheets("donnees")
            rw = Application.Match(TextBox2, .Columns(2), 0)
                .Rows(rw).EntireRow.Delete
        End With
        MsgBox "Le contact à bien été supprimé.", _
               vbCritical + vbOKOnly, "SUPPRESSION"
    Else
        For i = 2 To 14
            Controls("TextBox" & i) = ""
        Next i

        For i = 15 To 20
            Controls("ComboBox" & i) = ""
        Next i
    End If
 
Dernière édition:

cgpa

XLDnaute Occasionnel
Merci Lone-Wolf. Malgré la modification du code, j'ai toujours ce double problème de code qui s'arrête. Le problème se passe dans le formulaire "frmModifcontact":

- supprimer un contact: le code active le formulaire "frmModifContacts" et bug sur la ligne suivante:

.Rows(rw).EntireRow.Delete

Je me demande: ne serait-il pas plus facile de supprimer le contact à partir du premier formulaire ("frmContacts") sans passer pas le second? Mais comment faire?

- modifier contact: le code active le formulaire "frmModifcontacts" et bug à nouveau sur la ligne:

.Cells(rw, col) = Controls("TextBox" & col)

Je désespère... As-tu un idée, si je peux encore abuser de ton temps, car je me rends bien compte que cette situation peut agacer? Merci encore.
 

Pièces jointes

  • base pour demande aide-V4 - essai correction modifier.xlsm
    147.1 KB · Affichages: 37

cgpa

XLDnaute Occasionnel
Grâce à tes remarques, j'ai pu modifier et enfin presque aboutir. Je suis un vrai néophyte: ce n'est pas toujours facile de tout comprendre.
Pour la suppression du contact, j'ai passé l'étape du second formulaire pour pouvoir supprimer de suite à partir du premier. Cela fonctionne! Merci pour tes explications.

Pour la modification du contact, je passe toujours forcément par le second formulaire. Cela fonctionne, sauf si je modifie le nom de la société. Dans ce cas, le code bug à nouveau.
voici l'extrait du code concerné dans le formulaire "frmModifcontact":

Private Sub CmdModifier_Click()
With Application
.EnableEvents = False
.ScreenUpdating = False
.Calculation = xlCalculationManual
.StatusBar = False
End With

For i = 1 To 14
For k = 15 To 20
If Controls("TextBox" & i) = "" Or Controls("ComboBox" & k) = "" Then
Exit For
MsgBox "Veuillez remplir tous les champs avant de poursuivre!", _
vbCritical + vbOKOnly, "AVVERTISSEMENT": Exit Sub
End If
Next k
Next i

With Sheets("donnees")
rw = Application.Match(TextBox2, .Columns(2), 0)
For col = 1 To 14
.Cells(rw, col) = Controls("TextBox" & col) le code bug ici
Next col


Comme le code en l'état ne me permet pas de modifier le nom de la société, afin de trouver une solution, j'ai tenté de modifier la ligne rw = Application.Match(TextBox2, .Columns(2), 0) en rw = Application.Match(TextBox1, .Columns(1), 0) pour que le code renvoie sur base du numéro du contact (textbox1), mais cela ne marche pas. Ma question: comment puis-je adapter le code pour pouvoir modifier le nom de la société (soit la TextBox2 du formulaire frmModifcontact renvoyant à la Colonne 2 de la feuille "donnees").

Je joins le fichier corrigé.

Ca avance, ça avance...
 

Pièces jointes

  • base pour demande aide-V5 erreur modif nom société.xlsm
    159.7 KB · Affichages: 49

cgpa

XLDnaute Occasionnel
Moi j'ai supprimé 2 sociétés sans problèmes, je ne sais pas.

Il faut prendre la macro et la mettre dans le formulaire contact, c'est quand même pas compliqué non?? ;) et adapter pour chaque TB et CB vus qu'elles nont pas le même nom.

Bonjour Lone-Wolf,
Je te remercie pour les avancées considérables sur mon fichier.
J'avais mis un post concernant le dernier problème que j'avais, mais sans réaction. Cela fait plusieurs jours que je cherche la solution, mais je n'y parviens toujours pas. Accepterais-tu de jeter un œil sur ce problème? (cf mon post du 25 janvier). En gros, tout fonctionne sauf lorsque je veux modifier le nom de la société. Toutes les modifications sont acceptées, mais si je modifie le nom de la société, cela ne fonctionne pas (on dirait que le code recherche la ligne du nom de la société avant son changement, mais comme le nom a été modifié, le code bug. J'ai mis l'extrait de code dans le post. Si tu pouvais jeter un œil, ce serait super. Quoiqu'il en soit, merci quand même!
 

Discussions similaires

Statistiques des forums

Discussions
312 164
Messages
2 085 869
Membres
103 007
dernier inscrit
salma_hayek