Programmation pour répertoire sous Excel

Bonjour à tous,

Nouvelle sur le forum, je me suis lancée dans l'élaboration d'un répertoire sous Excel.

Pour ça, j'ai utilisé le tutoriel de cette adresse: https://cellulexcel.blogspot.com/p/qui-na-pas-un-jour-utilise-loption.html

J'ai crée mon formulaire et mon tableau Excel avec 13 colonnes. J'ai trois boutons de commande (Nouveau Contact, Modifier et Annuler) et 13 zones de textes dont une "zone de liste modifiable".

Arrivée au moment de la programmation j'ai inscrit ceci:

Option Explicit

Dim Ws As Worksheet

'Correspond au programme du bouton QUITTER

Private Sub CommandButton1_Click()

Unload Me

End Sub

Private Sub TextBox13_Change()

End Sub

'Correspond au programme du FORULAIRE

Private Sub UserForm_Initialize()

Dim J As Long

Dim I As Integer

Set Ws = Sheets("FICHIER ADRESSES") 'Attention ce nom doit correspondre au nom de votre ONGLET

With Me.ComboBox1

For J = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row

.AddItem Ws.Range("A" & J)

Next J

End With

For I = 1 To 13

Me.Controls("TextBox" & I).Visible = True 'affiche les données dans les textbox

Next I

End Sub

'Correspond au programme du bouton MODIFIER

Private Sub CommandButton2_Click()

If MsgBox("Etes-vous certain de vouloir modifier ce contact ?", vbYesNo, "Demande de confirmation") = vbYes Then

Dim Ligne As Long

Dim I As Integer

If Me.ComboBox1.ListIndex = -1 Then Exit Sub

Ligne = Me.ComboBox1.ListIndex + 2

For I = 1 To 13

If Me.Controls("TextBox" & I).Visible = True Then

Ws.Cells(Ligne, I + 1) = Me.Controls("TextBox" & I)

End If

Next I

End If

'Code permettant de modifier le format de la plage de cellule en format nombre

With Ws.Range("D2:d10")

.NumberFormat = "0"

.Value = .Value

End With

End Sub

'Correspond au programme de la LISTE DEROULANTE

Private Sub ComboBox1_Change()

Dim Ligne As Long

Dim I As Integer

If Me.ComboBox1.ListIndex = -1 Then Exit Sub

Ligne = Me.ComboBox1.ListIndex + 2

For I = 1 To 13

Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 1)

Next I

End Sub

Le problème c'est que cela ne fonctionne pas et je n'arrive pas à saisir pourquoi... Si quelqu'un peut m'aider ce serait super sympa !

Merci par avance,

Mélissa

Bonjour et bienvenue sur le forum

Quelques remarques sur ton code.

On y trouve :

'Correspond au programme du FORULAIRE
Private Sub UserForm_Initialize()
Dim J As Long
Dim I As Integer

Set Ws = Sheets("FICHIER ADRESSES") 'Attention ce nom doit correspondre au nom de votre ONGLET

With Me.ComboBox1
For J = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
.AddItem Ws.Range("A" & J)
Next J
End With

For I = 1 To 13
Me.Controls("TextBox" & I).Visible = True 'affiche les données dans les textbox
Next I
End Sub

• Je ne sais pas ce que tu entends par ‘’programme du FORMULAIRE’’ mais la macro ‘’ UserForm_Initialize() ‘’ est le programme qu’exécute la macro avant d’afficher une boite de dialogue.

• Le chargement de ton ComboBox1 a son code à cet endroit-là et fonctionne très bien

• En revanche, l’instruction :

Me.Controls("TextBox" & I).Visible

N’affiche pas les données dans les TextBox mais rend ces TextBox visibles. Or, par défaut, ces contrôles sont déjà visibles. Cette instruction est donc inutile.

Pour afficher par exemple la ligne i des données de ton tableau dans les TextBox, il te faudrait mettre :

Me.Controls("TextBox" & I) = Cells(2, I).Value

• Tu as encore ce code :

Private Sub ComboBox1_Change()
…
…
Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 1)

Modifie cette ainsi cette instruction :

Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I)

Et les TextBox correspondront aux données de la ligne de ton ComboBox

Si tu avais joint ton propre fichier, cela aurait été mieux pour les explications ….

Bye !

26classeur1.xlsm (27.74 Ko)

Bonjour,

Tout d'abord merci pour ta réponse ultra rapide !

Bon j'ai essayé de comprendre ton exemple et de l'appliquer à mon fichier mais je suis vraiment une novice du coup je galère toujours...quand j'utilise la touche F5 pour voir ce que cela donne j'ai le message - "Erreur d'exécution '9' - qui s'affiche...

Je n'avais pas vu qu'on pouvait joindre un fichier, je te montre ce que j'ai fait, peut être que tu pourras m'éclairer.

Merci encore,

Bon après-midi

16test2.zip (11.96 Ko)

Bonjour

Tu écris :

quand j'utilise la touche F5 pour voir ce que cela donne j'ai le message - "Erreur d'exécution '9' - qui s'affiche...

Dans ce cas-là, tu es renvoyée sur la commande qui a lancé l’affichage de la boite de dialogue.

Un truc pour voir où la macro bloque : tu la fais avancer pas à pas avec la touche F8.

Autre chose concernant ta macro : quand tu utilises une instruction du style :

Me.Controls("TextBox" & i) = Ws.Cells(Ligne, i + 1)

Assure-toi bien que les numéros de TextBox (TexBox1, TextBox2,…) correspondent bien à ce que tu as dans les cellules de la colonne correspondante ; ici : i + 1

What else ?

Bye !

32test3.zip (24.85 Ko)

Bonjour,

Beau boulot

Je voulais savoir si il y a avait moyen de créer une fiche pour une nouveau contact ?

Cordialement,

Leakim

Bonjour,

Encore merci !

Une nouvelle (et dernière, je pense !) chose. J'ai voulu ajouter deux boutons de commande: "Nouveau contact" et "Supprimer". Pour supprimer j'ai réussit et cela semble fonctionner. Par contre pour "Nouveau contact" j'ai utilisé la touche F8 comme tu me l'avais conseillé et ça bloque au niveau de:

L = Sheets("REPERTOIRE CONTACTS").Range("a65536").End(xlUp).Row + 1

Le soucis c'est que je n'arrive pas à comprendre à quoi correspond ce L pour pouvoir trouver l'erreur et modifier... TU pourrais m'expliquer ?

Sinon pour le reste c'est parfait, je suis bien contente du résultat !

Bonne journée !

21test4.zip (19.82 Ko)

Bonjour

Tu écris :

à quoi correspond ce L pour pouvoir trouver l'erreur et modifier...

Ce L est une variable servant à repérer le numéro de la dernière ligne de ton tableau, où tu vas écrire les données de ton nouveaux contact. Elle doit être déclarée. Or, elle ne l’est pas et la macro te demande de le faire.

En effet, en haut de la feuille du module, la première instruction est ‘’Option Explicit ». Elle est facultative mais vivement conseillée. En la mettant, on s’oblige à déclarer les variables avant de s’en servir.

Or, dans la procédure que tu as ajoutée, tu te sers d’une variable ‘’L’’ que tu n’as pas déclarée.

Fais-le,juste après le nom de la procédure :

Private Sub CommandButton4_Click()
Dim L As Long

Et normalement, tout ira bien !

OK ?

Bye !

Bonjour de nouveau,

C'est parfait cela fonctionne et merci pour l'explication (j'aime bien comprendre ce que je fais) !

Finalement j'ai encore une autre question: quand j'ouvre le formulaire alors que je n'ai rien sélectionné, je tombe forcément sur mon premier contact. Est ce possible de modifier cela ? J'aimerais pouvoir avoir un formulaire vierge pour ne pas avoir à supprimer toutes cases pour enregistrer un nouveau contact...

Autre question que je me suis posée après avoir réfléchit à l'utilisation de ce fichier, est-il possible et si oui, est-ce compliqué d'ajouter une option "rechercher" ? Je m'explique: j'aimerais pouvoir faire des recherches par exemple par domaine; en choisissant "domaine A" et pouvoir tomber sur toutes les personnes qui travaille dans le-dit domaine.

Par avance, merci !

Tu écris :

...quand j'ouvre le formulaire alors que je n'ai rien sélectionné, je tombe forcément sur mon premier contact. Est ce possible de modifier cela ? J'aimerais pouvoir avoir un formulaire vierge pour ne pas avoir à supprimer toutes cases pour enregistrer un nouveau contact...

...j'aimerais pouvoir faire des recherches par exemple par domaine; en choisissant "domaine A" et pouvoir tomber sur toutes les personnes qui travaille dans le-dit domaine.

Essaie cette nouvelle version :

53test5.zip (30.28 Ko)

Mille merci !!!

C'est exactement ce que je voulais !!

Très bonne fin de journée à toi !

Mélissa

Bonjour,

Me-revoilà et après mise en pratique de mon répertoire je remarque une petite chose: quand je fais ma recherche par domaine, je n'ai que deux domaines qui apparaissent (ce qui correspond aux lignes de 1 à 55), comment puis-je modifier cela ?

Encore merci par avance,

Bonne journée !

Bonjour

Tu écris :

quand je fais ma recherche par domaine, je n'ai que deux domaines qui apparaissent (ce qui correspond aux lignes de 1 à 55),

Dans le fichier que je t’ai envoyé, il n’a que 17 lignes…

De plus, sur ce même fichier, il y a 9 domaines différents (de 2 à 10) qui se répètent sur 16 lignes. Et les 9 domaines apparaissent bien dans la liste quand on fait une recherche par domaine .

Conclusion : si tu ne m’envoies pas ton propre fichier, en changeant les noms si tu veux, je ne pourrais pas voir et corriger ce qui ne va pas. Pour corriger un bug, il faut que je puisse le reproduire.

Bye !

Voici mon fichier...

Par contre j'ai enlevé quasiment toutes les infos, j'espère que ça te suffira quand même pour voir ce qui cloche...

Merci à toi

17test5.zip (33.02 Ko)

Désolé mais cela ne va pas.

J’ai terminé mon dernier message en te disant : « Pour corriger un bug, il faut que je puisse le reproduire. »

Or, sur le fichier que tu viens d’envoyer, tu as effacé toutes les données . Il n’y a même pas la macro : comment dès lors puis-je reproduire le bug ?

Une seule remarque sur ce fichier : la seule colonne qui contient des données est la colonne A où il y a, clairsemées, des cellules vides. Peut-être ton bug vient-il du fait qu’il y a des lignes vides dans ton tableau : il ne faut pas !

Bye !

Bonjour,

Tu avais raison ce sont les lignes vides qui empêchaient la recherche par domaines de fonctionner. Après avoir remplis ces lignes cela fonctionne parfaitement !

Encore merci à toi !!

Bonne journée,

Mélissa

Rechercher des sujets similaires à "programmation repertoire"