Ces doublons qui s'accrochent !

  • Initiateur de la discussion Albatros
  • Date de début
A

Albatros

Guest
Bonjour

J'ai tenté divers solutions, trouvées par-ci par-là, mais j'ai des résultats plutôt...étonnants ! Mais jamais ce que je souhaite.

Ce qui est évident pour beaucoup d'entre vous ne l'est pas du tout pour moi, j'ai encore l'impression de lire du Manchou en matière de VBA.

J'ai dans mon userform5

une liste déroulante qui va chercher le nom des clients dans ma feuille, et une autre liste déroulante qui va me permetrre de choisir le numéro de facture du client en question.
Avec cela je vais pouvoir donner divers informations dans ma feuille.

Je suis déjà contente d'y être arrivée.


Dans cette liste déroulante je n'ai besoin de voir qu'une seule fois le nom du client ainsi qu'une seule fois le numéro de sa facture dans l'autre liste déroulante.

Parce que je vais ajouter une ligne ou peut-être 15 pour ce même client.....donc a force d'en ajouter ma liste déroulante elle va arriver a Tokyo :S

Un petit fichier exemple peut-être !.... Si jamais quelqu'un passait par hasard ;)

Bonne fin de journée [file name=albatros.zip size=44315]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/albatros.zip[/file]
 

Pièces jointes

  • albatros.zip
    43.3 KB · Affichages: 30

Temjeh

XLDnaute Accro
Supporter XLD
Bonsoir

Si ca peut t'aider ceci enlève les doublons de la combo en col A:

Private Sub UserForm_Initialize()
Dim i&, j&, Y As Boolean
ComboBox1.Clear
For i = 1 To Range('A1').End(xlDown).Row
If ComboBox1.ListCount = 0 Then ComboBox1.AddItem Range('A' & i).Value
Y = False
For j = 0 To ComboBox1.ListCount - 1
If Range('A' & i).Value = ComboBox1.List(j) Then
Y = True
End If
Next
If Not Y Then ComboBox1.AddItem Range('A' & i).Value
Next
End Sub

Aussi sur plage:

Private Sub UserForm_Initialize()
Dim C As Range
Dim Tbl As New Collection
Dim i As Integer

On Error Resume Next
For Each C In Range('A1:A10')
If Not IsError(C) Then
If C différent '' Then Tbl.Add C.Value, CStr(C.Value)
End If
Next C
On Error GoTo 0
With ComboBox1
.Clear
For i = 1 To Tbl.Count
.AddItem Tbl(i)
Next i
.ListIndex = 0
End With
Set Tbl = Nothing
End Sub

A+

Temjeh


Message édité par: Temjeh, à: 15/05/2006 01:01
 

Albatros

XLDnaute Nouveau
Ah oui ! C'est super !
Je n'ai plus la répétition du nom a chaque fois dans ma liste déroulante...ouf ! Merci infiniment Temjeh, c'est sympa.


J'ai juste un tout petit conflit si je peux me permettre.

J'ai donc adapté ton code sous mon Private Sub UserForm_Initialize()

Avec combox1 et en B.
Ce qui correspond a ma liste pour les noms de clients ce qui donne maintenant :


Private Sub UserForm_Initialize()
With Sheets('compte dentiste')
nbre = Application.CountA(.Range('B2:B1000'))
cptr = 1
While cptr <= nbre
Me.ComboBox1.AddItem .Cells(cptr + 1, 2)
Me.ComboBox2.AddItem .Cells(cptr + 1, 1)
Me.ComboBoxconcerne.AddItem .Cells(cptr + 1, 10)
cptr = cptr + 1

Dim i&, j&, Y As Boolean
ComboBox1.Clear
For i = 1 To Range('B2').End(xlDown).Row
If ComboBox1.ListCount = 0 Then ComboBox1.AddItem Range('B' & i).Value
Y = False
For j = 0 To ComboBox1.ListCount - 1
If Range('B' & i).Value = ComboBox1.List(j) Then
Y = True
End If
Next
If Not Y Then ComboBox1.AddItem Range('B' & i).Value

Next
Wend
End With
End Sub



Et cela fonctionne a merveille ! B)

Mais....
J'ai à côté une liste déroulante qui va correspondre au numéro de facture de ce client.
C'est combox2 en colonne B et j'aimerai bien entendu ne pas y retrouver les doublons de ces numéros de facture.

J'ai essayé de scotcher ton code dessous en changeant le nom de la combox et la colonne mais il entre en conflit avec ceci :

Private Sub ComboBox2_Change()
If Not flag Then
Me.ComboBox1.ListIndex = Me.ComboBox2.ListIndex
End If
flag = False
End Sub

Donc je ne sais pas comment avoir mes deux listes déroulantes sans doublons ???


Mais c'est déjà super d'en avoir au moins une et la plus importante.


Très bonne journée et encore merci.
 
T

Temjeh

Guest
Rebonjour

Désolé javais oublié ce poste:
Remplace les 3 variables i,j et Y par d'autre lettres:

Private Sub UserForm_Initialize()
With Sheets('compte dentiste')
nbre = Application.CountA(.Range('B2:B1000'))
cptr = 1
While cptr <= nbre
Me.ComboBox1.AddItem .Cells(cptr + 1, 2)
Me.ComboBox2.AddItem .Cells(cptr + 1, 1)
Me.ComboBoxconcerne.AddItem .Cells(cptr + 1, 10)
cptr = cptr + 1

Dim i&, j&, Y As Boolean
ComboBox1.Clear
For i = 1 To Range('B2').End(xlDown).Row
If ComboBox1.ListCount = 0 Then ComboBox1.AddItem Range('B' & i).Value
Y = False
For j = 0 To ComboBox1.ListCount - 1
If Range('B' & i).Value = ComboBox1.List(j) Then
Y = True
End If
Next
If Not Y Then ComboBox1.AddItem Range('B' & i).Value

Next

Dim k&, m&, n As Boolean
ComboBox2.Clear
For k = 1 To Range('A2').End(xlDown).Row
If ComboBox2.ListCount = 0 Then ComboBox2.AddItem Range('A' & k).Value
n = False
For m = 0 To ComboBox2.ListCount - 1
If Range('A' & k).Value = ComboBox2.List(m) Then
n = True
End If
Next
If Not n Then ComboBox2.AddItem Range('A' & k).Value

Next

Wend
End With
End Sub

A+

Temjeh
 
A

Albatros

Guest
Aie !
Il entre toujours en conflit !

Voilà donc ce que j'ai maintenant :


Private Sub UserForm_Initialize()
With Sheets('compte dentiste')
nbre = Application.CountA(.Range('B2:B1000'))
cptr = 1
While cptr <= nbre
Me.ComboBox1.AddItem .Cells(cptr + 1, 2)
Me.ComboBox2.AddItem .Cells(cptr + 1, 1)
Me.ComboBoxconcerne.AddItem .Cells(cptr + 1, 10)
cptr = cptr + 1

Dim t&, v&, u As Boolean
ComboBox1.Clear
For t = 1 To Range('B2').End(xlDown).Row
If ComboBox1.ListCount = 0 Then ComboBox1.AddItem Range('B' & t).Value
u = False
For v = 0 To ComboBox1.ListCount - 1
If Range('B' & t).Value = ComboBox1.List(v) Then
u = True
End If
Next
If Not u Then ComboBox1.AddItem Range('B' & t).Value

Next

Dim k&, m&, n As Boolean
ComboBox2.Clear
For k = 1 To Range('A2').End(xlDown).Row
If ComboBox2.ListCount = 0 Then ComboBox2.AddItem Range('A' & k).Value
n = False
For m = 0 To ComboBox2.ListCount - 1
If Range('A' & k).Value = ComboBox2.List(m) Then
n = True
End If
Next
If Not n Then ComboBox2.AddItem Range('A' & k).Value

Next

Wend
End With
End Sub



Et bien il me fait encore un débogage sur :

Private Sub ComboBox2_Change()
If Not flag Then

Me.ComboBox1.ListIndex = Me.ComboBox2.ListIndex
End If
flag = False
End Sub


Et je ne sais pas du tout ce qu'il veut me dire :(

Je joint le fichier tel qu'il est maintenant .....si jamais tu as un petit moment pour de le tester. [file name=albatros_20060515193705.zip size=46900]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/albatros_20060515193705.zip[/file]
 

Pièces jointes

  • albatros_20060515193705.zip
    45.8 KB · Affichages: 28

Temjeh

XLDnaute Accro
Supporter XLD
Rebonsoir

Je ne suis pas un pros et j'ai de la difficulté à comprendre sauf que ton code fonctionne mais si tu sélectionnes la 11ème facture là ca bug et c'est sur que ca bug car avec la fonction liste sans doublons dans ta combo1 tu as 1 item de moins!!! par rapport à la combo2. Donc avec ceci ...Me.ComboBox1.ListIndex = Me.ComboBox2.ListIndex ca bug car il y a 13 d'un bord et 14 de l'autre car le combo2 n'enlève pas les doublons. Si les doublons son des chiffres il ne les enlèvent pas mais si tu met des noms en col A ca fonctionne. Donc je reposte pour toi une question et je te reviens ici avec la rep.

Temjeh
 
A

Albatros

Guest
Effectivement il ne bug plus sur Me.ComboBox1.ListIndex = Me.ComboBox2.ListIndex, par contre en remplaçant .value par .text alors il oublie complètement le tri, et pire encore il ne fait plus la formule Sommeprod qui est en colonne E, à savoir le calcul du solde par clientpour sa facture.

Je ne pensais pas que ce serait si complexe,donc éventuellement je vais peut-être devoir changer completement de fonctionnement en rapport a cette feuille compte, ce qui m'embête beaucoup....mais je ne vois pas la solution !? :(
 

Charly2

Nous a quittés en 2006
Repose en paix
Bonjour Albatros, bonjour Temjeh,
bonjour à toutes et à tous,

Je suis ce fil et je me permets d'intervenir car, comme le dit Temjeh et comme tu en conviens, Albatros, cette modification oblige à aller toucher à plusieurs procédures de ton USF.

Il est tout à fait possible de supprimer les doublons (factures et noms), mais voici les questions qu'il est intéressant de se poser :

1) La recherche doit-elle se faire sur le nom ou sur la facture ?

Car si un client a plusieurs factures, tu ne pourras plus effectuer l'affectation de ListIndex entre tes ComboBoxes. On peut donc imaginer l'initialisation des noms de client et, à chaque sélection, la mise à jour des n° de facture de ce client s'il y en a plusieurs ou l'affichage direct s'il n'y a qu'une facture.

2) J'ai remarqué que, dans ton USF, tu affiches le montant de la facture, mais pas les versements déjà effectuer :

=> on peut prévoir soit d'afficher le solde à payer seul, soit associé à une ListBox reprenant l'ensemble des versements de la facture.

3) Le stockage ne pose pas de souci puisque tu ajoutes les nouvelles informations à la fin de la liste, par contre, lorsqu'un client a été sélectionné, les instructions :

Lig = Me.ComboBox1.ListIndex + 2

With Sheets('compte dentiste')
Textdate = .Cells(Lig, 3)
Textmontantfacturé = .Cells(Lig, 4)
ComboBoxconcerne = .Cells(Lig, 10)
End With

doivent être adaptées car Lig ne correspondra plus à ListIndex + 2.


Je prends exemple sur ton fichier :

* tu as 2 lignes sur la facture n°1 (même client, naturellement). Sans doublons, tu auras dans tes Comboboxes :

Fact | Nom
 1     | L.K.
 2     | C.M.
 3     | L.P.
 4     | M.E.
 ...

Ces deux lignes pour la facture n°1 entraînent, en cas d'affichage sans doublons, un décalage de la ligne pour toutes les factures suivantes :

Si n° Fact = 1, ligne = CB.ListIndex + 2 donne bien 2, par contre, si n° Fact = 2, ligne = CB.ListIndex +2 donne 1 + 2 = 3, or la facture n°2 est en ligne 4 ! :eek:hmy:

Voilà, les modifications ne sont pas très difficiles à réaliser, mais il faut seulement y penser et décider de quelle manière les opérations doivent se dérouler :)

Si tu me donnes le feu vert, à moins que Temjeh ait une autre proposition de code, je mets les mains dans la cambouis :woohoo:

Bonne journée à tous les deux ;)
 
A

Albatros

Guest
Oh ! merci Charly.
Pour obtenir tout ce que j'ai autour de cette feuille compte, les factures, les devis, la particularité d'une facturation d'un dentiste en Suisse, c'est pour moi et mes petites connaissances des semaines et semaines de boulot, et là j'arrive presque au bout de mes peines...... sauf que ce problème me bloque tout.



1) La recherche doit-elle se faire sur le nom ou sur la facture ?

A mon sens je dois me baser sur le numéro de facture tenant compte qu'un client peut bien entendu avoir plusieurs fatures, le critère sera forcément ce numéro.

2) J'ai remarqué que, dans ton USF, tu affiches le montant de la facture, mais pas les versements
déjà effectuer :


C'est seulement parce que je ne sais pas comment faire!!?? j'aurai adoré pouvoir afficher les versement effectués.

Pour la suite je dois encore bien relire ce que tu me dis (c'est pas très évident pour moi) mais malheureusement je ne vais pas pouvoir avant la fin de la journée.

Quant au feu vert je te donne la ville entière, je voudrais tellement pouvoir finaliser ce projet qui me tient beaucoup à coeur.


Merci infiniment de ton attention.

Très bonne journée
 

Temjeh

XLDnaute Accro
Supporter XLD
Bonjour Albatros, Charly2

Tu as le feu vert car mes connaissances sont très basic quand c'est des projets déja commencer(moi je sais ce que je veut mais comme tu dit celle des autres est souvent dur a percevoir). J'avais aussi remarquer ces prob. car avec l'histoire d'enlever les doublons on perd des factures à l'affichage car même si elle on le même nom et no de fact ce ne sont pas une même fact donc elle devrait rester sur la liste!!

Enfin propose-lui une idée et je reviens à l'occasion voire le tout et y prendre des idées

Je te laisse entre bonne mains Albatros ...

Merci

Temjeh
 
A

Albatros

Guest
Quoiqu'il en soit Temjeh c'est très gentil à toi d'avoir tenté de trouver une solution, je te remercie, je me sentais seuuuuuuule au monde avec mes combox !


Je te laisse entre bonne mains Albatros ...


Je n'en doute pas je lis régulièrement les réponses de Charly2 par ici et j'suis très impressionnée.



Charly2,
Donc le but pour moi est effectivement de pouvoir comptabiliser les acomptes des patients, ceci en passant par une recherche dans mon userform, et de toujours mettre à jour le solde du patient en rapport a sa facture.

Je cherche principalement a facilité la tâche de la personne qui va utiliser ce fichier et qui n'est pas très copine avec excel.


Je souhaite donc automatiser le plus de choses possible ( Bon ! c'est ce que tous le monde recherche à faire me diras-tu !)laugh:


J'ai un 'petit' soucis sur cette feuille compte, je pensais faire encore des recherches a ce propos, et je vais bien entendu continuer à le faire, mais je te le dis parce que j'ignore dans quelle mesure cela pourrait être lié avec la solutions que tu pourrais me proposer.


Un méchant problème format date, qui se répercute sur mes trois colonnes C F et I.

J'ai un format anglais !!!!
J'ai bien tenté de lui dire à côté de
.Range('C' & L).Value = Textdate.Value de prendre un format (jj/mm/aaaa)mais il ne m'écoute pas :(

Je précise que :
mon pc est bien configuré dans les options régional en Français (France), et non pas en Français (Suisse).
Les options paramètres lingusitiques microsoft office 2003 sont aussi correcctement configurées en Français....et cette andouille se borne a me mettre du format anglais lorsque je passe par mon userform acompte.

J'étais ravie parce que j'avais trouvé l'option sur l'onglet 'Transition' qui est
-Autre mode de saisie des otions-
Je l'ai cochée, et là oh bonheur ! il me donnait enfin le format date jj/mm/aaaa....oui et bien j'ai vite déchanté parce que si je tape une date avec le clavier il me donne systématiquement un 00/01/1900 : :eek: alors qu'elle est juste si je la place avec mon userform...une histoire de fou !!!

Maintenant la question, la grande question, mais c'est peut-être quelque chose qui ne se fait pas du tout, peu habituée aux us et coutumes des forums :eek: je ne le sais pas !?)est-ce que je peux t'envoyer mon fichier en entier ???
Etant donné que cette feuille compte est très liée aux autres par différentes instructions.

Je comprendrai très bien que tu me dises que ce n'est pas une bonne idée.

Toujours est-il qu'il n'y pas le feu au lac comme on dit à Genève ;)
je suis sur le ring avec ce fichier depuis déjà 5 mois.

Voilà !!!
 

Charly2

Nous a quittés en 2006
Repose en paix
Bonsoir Albatros,bonsoir Temjeh, bonsoir le forum :)

C'est bien agréable d'avoir de la lecture en rentrant :p

J'ai bien noté tes remarques et j'essaierais d'en tenir compte de ta 'pas très copine' avec XL ;)

Sinon, j'avais déjà remarqué pour l'option autre mode de saisie que tu avais cochée. J'ai cru que ton fichier était destiné à un autre logiciel... mais j'avais supprimé l'option pour la saisie :)

Je préfèrerais effectivement travailler sur le fichier lui-même de façon à ce que les procédures ou les variables n'entrent pas en conflit avec d'autres si tu as déjà du code.

Je t'envoie mon @ e-mail par MP...

EDITION : Fautes d'orthographes

A+ ;)

Message édité par: Charly2, à: 16/05/2006 20:57
 

Discussions similaires

Réponses
8
Affichages
226