Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 13/03/2010, 15h57   #1
Nouveau Membre du Club
 
Avatar de CIBOOX
 
Inscription : décembre 2006
Messages : 194
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 194
Points : 32
Points : 32
Par défaut Listbox classée selon un terme

Bonjour
j'ai récupéré un code
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub UserForm_Initialize()
  k = 0
  With Sheets("fournisseurs")
   For i = 2 To .[A65000].End(xlUp).Row
    If .Cells(i, 14) > 0 Then
      Me.ListBox1.AddItem
      Me.ListBox1.List(k, 0) = .Cells(i, 1)
      Me.ListBox1.List(k, 1) = .Cells(i, 2)
      Me.ListBox1.List(k, 2) = .Cells(i, 14)
      k = k + 1
    End If
   Next i
 End With
End Sub
j'aimerai l'adapter avec la fonction like car je cherche avoir dans une listbox avec que les cellules contenant le mot moniteur

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub UserForm_Initialize()
  k = 0
  With Sheets("fournisseurs")
   For i = 2 To .[A65000].End(xlUp).Row
    If .Cells(i, 14) like "*moniteur*" Then
      Me.ListBox1.AddItem
      Me.ListBox1.List(k, 0) = .Cells(i, 1)
      Me.ListBox1.List(k, 1) = .Cells(i, 2)
      Me.ListBox1.List(k, 2) = .Cells(i, 14)
      k = k + 1
    End If
   Next i
 End With
End Sub
mais la listbox reste vide ........
Fichiers attachés
Type de fichier : xls fournisseurs-1-.xls (59,5 Ko, 2 affichages)

Dernière modification par Caro-Line ; 13/03/2010 à 20h10. Motif: Balises code plutôt que quote + Merci de ne pas crier
CIBOOX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2010, 16h06   #2
Expert Confirmé
 
Avatar de casefayere
 
Homme Dominique LEMAIRE
caviste
Inscription : décembre 2006
Messages : 2 108
Détails du profil
Informations personnelles :
Nom : Homme Dominique LEMAIRE
Âge : 57
Localisation : France, Ardennes (Champagne Ardenne)

Informations professionnelles :
Activité : caviste
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : décembre 2006
Messages : 2 108
Points : 3 888
Points : 3 888
Bonjour,
essaye de mettre en haut du module :
ça permettra de ne pas tenir compte des majuscules ou minuscules
si ça ne suffit pas changes :
Code :
If .Cells(i, 14) like "*moniteur*" Then
pour
Code :
If .Cells(i, 14) like "*" & moniteur & "*" Then


a +
casefayere est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2010, 16h21   #3
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 457
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 457
Points : 12 790
Points : 12 790
Bonjour,
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub UserForm_Initialize()
  Dim k As Integer, i As Integer
  With Sheets("fournisseurs")
   For i = 2 To .[A65000].End(xlUp).Row
      If InStr(UCase(.Cells(i, 14)), "MONITEUR") > 0 Then
      Me.ListBox1.AddItem
      Me.ListBox1.List(k, 0) = .Cells(i, 1)
      Me.ListBox1.List(k, 1) = .Cells(i, 2)
      Me.ListBox1.List(k, 2) = .Cells(i, 14)
      k = k + 1
    End If
   Next i
 End With
End Sub
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2010, 19h56   #4
Nouveau Membre du Club
 
Avatar de CIBOOX
 
Inscription : décembre 2006
Messages : 194
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 194
Points : 32
Points : 32
Citation:
Envoyé par casefayere Voir le message
onjour,
essaye e mettre en haut du module :
ça permettra de ne pas tenir compte des majuscules ou minuscules
si ça ne suffit pas changes :
Code :
If .Cells(i, 14) like "*moniteur*" Then
pour
Code :
If .Cells(i, 14) like "*" & moniteur & "*" Then


a +
MERCI A TOI CASEFAYERE ça marche !!!!!

Citation:
Envoyé par mercatog Voir le message
Bonjour,
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub UserForm_Initialize()
  Dim k As Integer, i As Integer
  With Sheets("fournisseurs")
   For i = 2 To .[A65000].End(xlUp).Row
      If InStr(UCase(.Cells(i, 14)), "MONITEUR") > 0 Then
      Me.ListBox1.AddItem
      Me.ListBox1.List(k, 0) = .Cells(i, 1)
      Me.ListBox1.List(k, 1) = .Cells(i, 2)
      Me.ListBox1.List(k, 2) = .Cells(i, 14)
      k = k + 1
    End If
   Next i
 End With
End Sub
j'ai teste aussi ta methode t'es trop fort MERCATOG ça marche aussi!!!

je profite encore de vos connaissances et votre maitrise
car maintenant je dois mettre dans la listbox4 tous les autres appareils ....

en listbox1 j'ai les moniteurs
en listbox2 les micro-ordinateurs
en listbox3 les imprimantes
et en listbox4 le reste ( onduleur , micro, webcam etc )

j'ai tente le & mais j'ai les 4 listbox vident....
Fichiers attachés
Type de fichier : xls fournisseurs-2-.xls (60,5 Ko, 3 affichages)

Dernière modification par AlainTech ; 08/05/2010 à 19h40. Motif: Fusion de 3 messages
CIBOOX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2010, 20h31   #5
Expert Confirmé
 
Avatar de casefayere
 
Homme Dominique LEMAIRE
caviste
Inscription : décembre 2006
Messages : 2 108
Détails du profil
Informations personnelles :
Nom : Homme Dominique LEMAIRE
Âge : 57
Localisation : France, Ardennes (Champagne Ardenne)

Informations professionnelles :
Activité : caviste
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : décembre 2006
Messages : 2 108
Points : 3 888
Points : 3 888
re,

essayes ce code pour 3 listbox, tu continueras pour 4 listbox
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Private Sub UserForm_Initialize()
Dim k As Integer, i As Integer
 k = 0
With Sheets("fournisseurs")
    For i = 2 To .[A65000].End(xlUp).Row
        If InStr(UCase(.Cells(i, 14)), "MONITEUR") > 0 Then
            Me.ListBox1.AddItem
            Me.ListBox1.Column(1, Me.ListBox1.ListCount - 1) = .Cells(i, 1)
            Me.ListBox1.Column(2, Me.ListBox1.ListCount - 1) = .Cells(i, 2)
            Me.ListBox1.Column(3, Me.ListBox1.ListCount - 1) = .Cells(i, 14)
        End If
        If InStr(UCase(.Cells(i, 14)), "MICRO-O") > 0 Then
            Me.ListBox2.AddItem
            Me.ListBox2.Column(1, Me.ListBox2.ListCount - 1) = .Cells(i, 1)
            Me.ListBox2.Column(2, Me.ListBox2.ListCount - 1) = .Cells(i, 2)
            Me.ListBox2.Column(3, Me.ListBox2.ListCount - 1) = .Cells(i, 14)
        End If
        If InStr(UCase(.Cells(i, 14)), "IMPRIM") > 0 Then
            Me.ListBox3.AddItem
            Me.ListBox3.Column(1, Me.ListBox3.ListCount - 1) = .Cells(i, 1)
            Me.ListBox3.Column(2, Me.ListBox3.ListCount - 1) = .Cells(i, 2)
            Me.ListBox3.Column(3, Me.ListBox3.ListCount - 1) = .Cells(i, 14)
        End If
        k = k + 1
   Next i
 End With
casefayere est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2010, 20h50   #6
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 457
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 457
Points : 12 790
Points : 12 790
Re,
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Private Sub UserForm_Initialize()
Dim i As Integer
Dim j As Byte
Dim k() As Integer
Dim Typ
 
Typ = Array("MONITEUR", "MICRO-", "IMPRIMAN", "")
ReDim k(UBound(Typ))
 
With Sheets("fournisseurs")
    For i = 2 To .[A65000].End(xlUp).Row
        For j = 0 To UBound(Typ)
            If InStr(UCase(.Cells(i, 14)), Typ(j)) > 0 Then
                Me.Controls("ListBox" & j + 1).AddItem
                Me.Controls("ListBox" & j + 1).List(k(j), 0) = .Cells(i, 1)
                Me.Controls("ListBox" & j + 1).List(k(j), 1) = .Cells(i, 2)
                Me.Controls("ListBox" & j + 1).List(k(j), 2) = .Cells(i, 14)
                k(j) = k(j) + 1
                Exit For
            End If
        Next j
    Next i
End With
End Sub
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2010, 21h28   #7
Nouveau Membre du Club
 
Avatar de CIBOOX
 
Inscription : décembre 2006
Messages : 194
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 194
Points : 32
Points : 32
merci à vous deux !!!!

ouha la belle boucle trop fort !!!

je prends pas tous le code mais ça marche !!!!
je connaissais pas que pour le restedes appareils on met ""

petite question au niveau du
Code :
1
2
3
 
Typ = Array("MONITEUR", "MICRO-", "IMPRIMAN", "")
ReDim k(UBound(Typ))
est ce que l' ordre moniteur micro imprim a son importance pour le reste des appareils ?
CIBOOX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2010, 21h47   #8
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 457
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 457
Points : 12 790
Points : 12 790
l'odre impose quelle listbox doit être remplie avec l'item correspondant

listbox1--> item 1: moniteur
listbox2--> item 2; micro
...

Typ = Array("MONITEUR", "MICRO-", "IMPRIMAN", "")
"" doit être en dernier (listbox4)
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2010, 21h58   #9
Nouveau Membre du Club
 
Avatar de CIBOOX
 
Inscription : décembre 2006
Messages : 194
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 194
Points : 32
Points : 32
Merci pour tes explications MERCATOG

Dernière modification par CIBOOX ; 15/03/2010 à 12h47.
CIBOOX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2010, 11h35   #10
Nouveau Membre du Club
 
Avatar de CIBOOX
 
Inscription : décembre 2006
Messages : 194
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 194
Points : 32
Points : 32
Bonjour
j'ai adapté la boucle
mais j'aimerai aussi avoir le cumul pour les quatre catégories en caption
mais j'ai une erreur 138....
il faut cliqué sur bouton 4
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Private Sub UserForm_Initialize()
Dim i As Integer
Dim j As Byte
Dim k() As Integer
Dim Typ
 
Typ = Array("MONITEUR", "MICRO-", "IMPRIMAN", "")
ReDim k(UBound(Typ))
 
With Sheets("feuil2")
    For i = 2 To .[A65000].End(xlUp).Row
        For j = 0 To UBound(Typ)
            If InStr(UCase(.Cells(i, 5)), Typ(j)) > 0 Then
                Me.Controls("ListBox" & j + 1).AddItem
                Me.Controls("ListBox" & j + 1).List(k(j), 0) = .Cells(i, 6)
                Me.Controls("ListBox" & j + 1).List(k(j), 1) = .Cells(i, 5)
                k(j) = k(j) + 1
                Label1.Caption = k & " MONITEURS"
                Label2.Caption = k & " IMPRIMANTES"
                Label3.Caption = k & " MICRO-ORDINATEURS"
                Label4.Caption = k & " AUTRES MATERIEL"
 
 
                Exit For
            End If
        Next j
    Next i
End With
End Sub
Fichiers attachés
Type de fichier : zip test5.zip (46,9 Ko, 5 affichages)
CIBOOX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2010, 13h51   #11
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 457
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 457
Points : 12 790
Points : 12 790
De la même manière (à condition de renommer tes Label: LabelZ pour la Listebox ListboxZ)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Private Sub UserForm_Initialize()
Dim i As Integer
Dim j As Byte
Dim k() As Integer
Dim Typ
 
Typ = Array("MONITEUR", "MICRO-ORDINATEUR", "IMPRIMANTE", "")
ReDim k(UBound(Typ))
 
With Sheets("feuil2")
    For i = 2 To .[A65000].End(xlUp).Row
        For j = 0 To UBound(Typ)
            If InStr(UCase(.Cells(i, 5)), Typ(j)) > 0 Then
                Me.Controls("ListBox" & j + 1).AddItem
                Me.Controls("ListBox" & j + 1).List(k(j), 0) = .Cells(i, 6)
                Me.Controls("ListBox" & j + 1).List(k(j), 1) = .Cells(i, 5)
                k(j) = k(j) + 1
                If j = UBound(Typ) Then
                    Me.Controls("Label" & j + 1).Caption = k(j) & " AUTRE MATERIEL"
                Else
                    Me.Controls("Label" & j + 1).Caption = k(j) & " " & Typ(j) & "S"
                End If
                                Exit For
            End If
        Next j
    Next i
End With
End Sub
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2010, 19h54   #12
Nouveau Membre du Club
 
Avatar de CIBOOX
 
Inscription : décembre 2006
Messages : 194
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 194
Points : 32
Points : 32
avec ton code j'ai 11 moniteurs en label1.caption
j'aimerai avoir le total de moniteurs soit 39 moniteurs....
CIBOOX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2010, 20h11   #13
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 457
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 457
Points : 12 790
Points : 12 790
Citation:
j'aimerai avoir le total de moniteurs soit 39 moniteurs.
à vos ordres!
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Private Sub UserForm_Initialize()
Dim i As Integer
Dim j As Byte
Dim k() As Integer
Dim NB() As Integer
Dim Typ
 
Typ = Array("MONITEUR", "MICRO-ORDINATEUR", "IMPRIMANTE", "")
ReDim k(UBound(Typ))
ReDim NB(UBound(Typ))
 
With Sheets("feuil2")
    For i = 2 To .[A65000].End(xlUp).Row
        For j = 0 To UBound(Typ)
            If InStr(UCase(.Cells(i, 5)), Typ(j)) > 0 Then
                Me.Controls("ListBox" & j + 1).AddItem
                Me.Controls("ListBox" & j + 1).List(k(j), 0) = .Cells(i, 6)
                Me.Controls("ListBox" & j + 1).List(k(j), 1) = .Cells(i, 5)
                k(j) = k(j) + 1
                NB(j) = NB(j) + .Cells(i, 6)
                If j = UBound(Typ) Then
                    Me.Controls("Label" & j + 1).Caption = NB(j) & " AUTRE MATERIEL"
                Else
                    Me.Controls("Label" & j + 1).Caption = NB(j) & " " & Typ(j) & "S"
                End If
                                Exit For
            End If
        Next j
    Next i
End With
End Sub
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2010, 20h18   #14
Nouveau Membre du Club
 
Avatar de CIBOOX
 
Inscription : décembre 2006
Messages : 194
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 194
Points : 32
Points : 32
MERCI MERCATOG pour ta superbe boucle
CIBOOX est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 01h59.


 
 
 
 
Partenaires

Hébergement Web