OVH Cloud OVH Cloud

pb liste modifiable

3 réponses
Avatar
Jean-Pierre
Bonjour,

J'ai créer une applica vba Excel qui gére un carnet d'adresse, j'ai un
tableau Excel avec Nom, Prénom,... et ville.
J'ai un UserForm qui affiche la liste des contacts avec adresse et ville.
Pour facillité les recherches, j'ai créer une liste modifiable qui affiche
les villes (voir code ci-dessous).
J'ai deux questions :

1 - Comment puis-je afficher mes villes par ordre alphabétique
2 - J'ai plusieurs ville qui comment par la lettre "P" Si je tape "P" dans
la liste modifiable, elle m'affiche la première ville commençant par "P" si
je valide, ma liste m'affiche uniquement les contact de cette ville ce qui
est normale.
Moi j'aimerais que lorsque je tape "P", ma liste m'affiche tous les contacts
dont la ville comment par cette lettre.
Comment faire ?

Private Sub UserForm_Initialize()
' Définition des variables
Dim cel As Range
Dim Fin As Integer
Dim i As Integer
' initialisation des variables
Set cel = Range("A1")
Fin = cel.End(xlDown).Row - 1 ' Fin de la liste
' Constitution de la liste Ville
For i = 1 To Fin
list_contact.search_ville.AddItem cel.Offset(i, 4)
Next i

'Appel de la procèdure Liste affichant les contacts
Liste
End Sub

Merci d'avance

JP

3 réponses

Avatar
LE TROLL
Salut,

Affichage alpha croissant -> list1.sorted=true
Mais je ne suis pas certain que ça existe en vba, sinon ->
boucle de tri :o)

' Un tri bulle de ce genre:
for k = 1 to maxi
for i = 1 to to maxi
for j = 1 to maxi
if i <> j then
if list1.list(i) > list1.list(j) then
echange = list1.list(i)
list1.list(i) = list1.list(j)
list2.list(j) = echange
endif
endif
next j
next i
next k

Ben zalors, en affichant tous les commençants par "P" en
tapant "P", ben je dirais que faut trier sur le 1er octet,
si octet1 = "p" -> met dans list2...

Heu, je donne les principes non exhaustifs, si tu veux
du code, demande! En plus je ne sais pas dans quelle
proportion ça s'applique en vbA...
Sinon, tu as plein de logiciels gratuit qui gèrent les
adresses, ou simplement dans Word avec la fonction
"recherche", ça fonctionne très bien :o)
------------------


"Jean-Pierre" a écrit dans le message de news:
42c5090e$0$898$
Bonjour,

J'ai créer une applica vba Excel qui gére un carnet
d'adresse, j'ai un tableau Excel avec Nom, Prénom,... et
ville.
J'ai un UserForm qui affiche la liste des contacts avec
adresse et ville.
Pour facillité les recherches, j'ai créer une liste
modifiable qui affiche les villes (voir code ci-dessous).
J'ai deux questions :

1 - Comment puis-je afficher mes villes par ordre
alphabétique
2 - J'ai plusieurs ville qui comment par la lettre "P" Si
je tape "P" dans la liste modifiable, elle m'affiche la
première ville commençant par "P" si je valide, ma liste
m'affiche uniquement les contact de cette ville ce qui est
normale.
Moi j'aimerais que lorsque je tape "P", ma liste m'affiche
tous les contacts dont la ville comment par cette lettre.
Comment faire ?

Private Sub UserForm_Initialize()
' Définition des variables
Dim cel As Range
Dim Fin As Integer
Dim i As Integer
' initialisation des variables
Set cel = Range("A1")
Fin = cel.End(xlDown).Row - 1 ' Fin de la liste
' Constitution de la liste Ville
For i = 1 To Fin
list_contact.search_ville.AddItem cel.Offset(i, 4)
Next i

'Appel de la procèdure Liste affichant les contacts
Liste
End Sub

Merci d'avance

JP



Avatar
Hervé
Bonsoir Jean-Pierre,
Comment affiche tu tes contacts une fois la ville sélectionnée ? En
attendant, regarde le code ci-dessous pour ce qui est de l'ordre
alphabétique :

Option Explicit
Option Compare Text 'pour ne pas tenir compte de la case

Private Sub UserForm_Initialize()
Dim I As Integer
Dim Tbl() As String

With Worksheets("Feuil1") 'adapte le nom de la feuille
For I = 1 To .Range(.[A1], _
.[A65536].End(xlUp)).Rows.Count
ReDim Preserve Tbl(1 To I)
Tbl(I) = .Range("A" & I)
Next I
End With

Tri Tbl()

For I = 1 To UBound(Tbl)
Me.search_ville.AddItem Tbl(I)
Next I

'Appel de la procèdure Liste affichant les contacts
Liste
End Sub

Sub Tri(Tbl() As String)
Dim Tempo As String
Dim I As Integer
Dim J As Integer
'éffectue un tri décroissant "<"
'pour un tri croissant ">"
For I = 1 To UBound(Tbl) - 1
For J = I + 1 To UBound(Tbl)
If Tbl(I) > Tbl(J) Then
Tempo = Tbl(J)
Tbl(J) = Tbl(I)
Tbl(I) = Tempo
End If
Next J
Next I
End Sub

Hervé.

"Jean-Pierre" a écrit dans le message de news:
42c5090e$0$898$
Bonjour,

J'ai créer une applica vba Excel qui gére un carnet d'adresse, j'ai un
tableau Excel avec Nom, Prénom,... et ville.
J'ai un UserForm qui affiche la liste des contacts avec adresse et ville.
Pour facillité les recherches, j'ai créer une liste modifiable qui affiche
les villes (voir code ci-dessous).
J'ai deux questions :

1 - Comment puis-je afficher mes villes par ordre alphabétique
2 - J'ai plusieurs ville qui comment par la lettre "P" Si je tape "P" dans
la liste modifiable, elle m'affiche la première ville commençant par "P"


si
je valide, ma liste m'affiche uniquement les contact de cette ville ce qui
est normale.
Moi j'aimerais que lorsque je tape "P", ma liste m'affiche tous les


contacts
dont la ville comment par cette lettre.
Comment faire ?

Private Sub UserForm_Initialize()
' Définition des variables
Dim cel As Range
Dim Fin As Integer
Dim i As Integer
' initialisation des variables
Set cel = Range("A1")
Fin = cel.End(xlDown).Row - 1 ' Fin de la liste
' Constitution de la liste Ville
For i = 1 To Fin
list_contact.search_ville.AddItem cel.Offset(i, 4)
Next i

'Appel de la procèdure Liste affichant les contacts
Liste
End Sub

Merci d'avance

JP




Avatar
Renfield_MVP.VB
Attention au code :

Dim I As Integer
Dim Tbl() As String
With Worksheets("Feuil1") 'adapte le nom de la feuille
For I = 1 To .Range(.[A1], _
.[A65536].End(xlUp)).Rows.Count
ReDim Preserve Tbl(1 To I)
Tbl(I) = .Range("A" & I)
Next I
End With



en effet, les Redim Preserve sont effectué a chaque iteration de la
boucle, ce qui doit ralentir considérablement la chose.

préférer le code suivant :

Dim I As Integer
Dim Tbl() As String
Dim RowCount as Long

ReDim Preserve Tbl(1 To I)

With Worksheets("Feuil1") 'adapte le nom de la feuille
RowCount = .Range(.[A1], .[A65536].End(xlUp)).Rows.Count
ReDim Tbl(1 To RowCount) As String
For I = 1 To RowCount
Tbl(I) = .Range("A" & I)
Next I
End With

Renfield