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 06/09/2011, 17h24   #1
Nouveau Membre du Club
 
Homme
Administrateur de base de données
Inscription : mai 2011
Messages : 99
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Bâtiment

Informations forums :
Inscription : mai 2011
Messages : 99
Points : 29
Points : 29
Par défaut Problème alimenter Listview

Bonjour forum,

J'ai un problème, lorsque mon userform s'initialise, je désire alimenter une listview selon un tableau qui peut contenir différent nombre de variable.

Voici mon code:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
With Me.ListView1
    With .ColumnHeaders
        .Clear
        .Add , , "Contrat", 30
        .Add , , "Nb jours", 30
        .Add , , "Départ.", 30
        .Add , , "Date Prod", 30
    End With
 
    If last > 2 Then
        j = 1
        For i = 3 To last
            .ListItems.Add j, , Sheets("Feuil1").Range("AL" & i).Value                  'Contrat
            .ListItems(j).ListSubItems.Add , , Sheets("Feuil1").Range("AM" & i).Value  'Nb jours
            .ListItems(j).ListSubItems.Add , , Sheets("Feuil1").Range("AO" & i).Value  'Produit
            .ListItems(j).ListSubItems.Add , , Sheets("Feuil1").Range("AP" & i).Value  'Date Prod
        j = j + 1
        Next i
    End If
.View = lvwList
End With
1) Mes entêtes ne s'affiche pas
2) La seule colonne qui s'affiche dans ma listview est la première colonne, donc seulement les contrats.

Merci de votre aide
Beaudelicius est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 23h36   #2
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
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 Last As Long, i As Long, j As Long
Dim Tb
 
With Sheets("Feuil1")
    Last = .Cells(.Rows.Count, "AL").End(xlUp).Row
    If Last > 2 Then
        Tb = .Range("AL3:AP" & Last)
        With Me.ListView1
            .HideColumnHeaders = False
            .View = lvwReport
            .AllowColumnReorder = True
            .FullRowSelect = True
            With .ColumnHeaders
                .Clear
                .Add , , "Contrat", 50
                .Add , , "Nb jours", 50
                .Add , , "Départ.", 50
                .Add , , "Date Prod", 50
            End With
            For i = 1 To UBound(Tb, 1)
                j = j + 1
                .ListItems.Add j, , Tb(i, 1)                    'Contrat
                .ListItems(j).ListSubItems.Add , , Tb(i, 2)     'Nb jours
                .ListItems(j).ListSubItems.Add , , Tb(i, 3)     'Produit
                .ListItems(j).ListSubItems.Add , , Tb(i, 4)     'Date Prod
            Next i
        End With
    End If
End With
End Sub
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/09/2011, 18h49   #3
Nouveau Membre du Club
 
Homme
Administrateur de base de données
Inscription : mai 2011
Messages : 99
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Bâtiment

Informations forums :
Inscription : mai 2011
Messages : 99
Points : 29
Points : 29
Merci mercatog tout marche à la perfection
Beaudelicius est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2011, 20h57   #4
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
On aurait pu s'en passer de la variable j
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 Last As Long, i As Long
Dim Tb
 
With Sheets("Feuil1")
    Last = .Cells(.Rows.Count, "AL").End(xlUp).Row
    If Last > 2 Then
        Tb = .Range("AL3:AP" & Last)
        With Me.ListView1
            .HideColumnHeaders = False
            .View = lvwReport
            .AllowColumnReorder = True
            .FullRowSelect = True
            With .ColumnHeaders
                .Add , , "Contrat", 50
                .Add , , "Nb jours", 50
                .Add , , "Départ.", 50
                .Add , , "Date Prod", 50
            End With
            For i = 1 To UBound(Tb, 1)
                .ListItems.Add i, , Tb(i, 1)               'Contrat
                .ListItems(i).ListSubItems.Add , , Tb(i, 2)    'Nb jours
                .ListItems(i).ListSubItems.Add , , Tb(i, 3)    'Produit
                .ListItems(i).ListSubItems.Add , , Tb(i, 4)    'Date Prod
            Next i
        End With
    End If
End With
End Sub
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/09/2011, 21h08   #5
Nouveau Membre du Club
 
Homme
Administrateur de base de données
Inscription : mai 2011
Messages : 99
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Bâtiment

Informations forums :
Inscription : mai 2011
Messages : 99
Points : 29
Points : 29
OK merci beaucoup, mais j'ai une autre question.

Je veux que lorsque quelqu'un selection un élément dans la listeview et click sur le bouton supprimé, l'élément s'éfface de ma feuille. Avant d'utiliser ton code ça fonctionnait, mais plus maintentant.

Code :
1
2
3
i = ListView1.SelectedItem.Index
Set contrat = Sheets("Feuil1").Range("AL3:AL1000").Find(Me.ListView1.ListItems(i).Text)
Range(Cells(contrat.Row, 38), Cells(contrat.Row, 42)).ClearContents
Pourrais tu me dire pourquoi.

Merci
Beaudelicius est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2011, 21h32   #6
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Regarde le commentaire si tu veux supprimer toute la ligne de Feuil1
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub CommandButton1_Click()
Dim c As Range
Dim Contrat As String
Dim i As Integer
 
Contrat = Me.ListView1.SelectedItem.Text
If Contrat <> "" Then
    i = Me.ListView1.SelectedItem.Index
    Set c = Sheets("Feuil1").Range("AL:AL").Find(Contrat, LookIn:=xlValues, lookat:=xlWhole)
    If Not c Is Nothing Then
        c.Resize(1, 5).ClearContents
        'c.EntireRow.Delete 'Pour supprimer toute la ligne
        Set c = Nothing
        Me.ListView1.ListItems.Remove i
    End If
End If
End Sub
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/09/2011, 14h59   #7
Nouveau Membre du Club
 
Homme
Administrateur de base de données
Inscription : mai 2011
Messages : 99
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Bâtiment

Informations forums :
Inscription : mai 2011
Messages : 99
Points : 29
Points : 29
Merci ça fontionne très bien.

Autre petite demande.

J'ai un bouton save, je veux donc ajouter des élément à ma listeview. Voici mon code et il ne fait qu'ajouter le contrat, mes variable ne sont pas vide j'ai vérifier, c'est lorsque j'aliment ma listview que ça ne marche pas

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
Contrat = Me.TextBox1.Value
jour = Me.TextBox2.Value
ID = Sheets("Légendes").Range("F2:F6").Find(Me.ComboBox1.Value).Offset(0, 1)
departement = Me.ComboBox1.Value
dateProd = CLng(Sheets("Feuil1").Range("A2:A10000").Find(Contrat).Offset(0, 11))
 
With Me.ListView1
i = .ListItems.Count + 1
.ListItems.Add i, , Contrat
.ListItems(i).ListSubItems.Add , , jour
.ListItems(i).ListSubItems.Add , , departement
.ListItems(i).ListSubItems.Add , , Format(dateProd, "dd/mm")
 
End With
Merci
Beaudelicius est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 23h07   #8
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Déclare convenablement tes variables (j'ai pris Jour comme String)
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
Dim Contrat As String, Departement As String, Jour As String
Dim i As Integer, Id As Integer
Dim DateProd As Long
Dim c As Range
 
 
Contrat = Me.TextBox1.Value
Jour = Me.TextBox2.Value
Departement = Me.ComboBox1.Value
 
Set c = Sheets("Légendes").Range("F2:F6").Find(Departement, LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
    Id = c.Offset(0, 1)
    Set c = Sheets("Feuil1").Range("A:A").Find(Contrat, LookIn:=xlValues, lookat:=xlWhole)
    If Not c Is Nothing Then
        DateProd = CLng(c.Offset(0, 11))
        Set c = Nothing
        With Me.ListView1
            i = .ListItems.Count + 1
            .ListItems.Add i, , Contrat
            .ListItems(i).ListSubItems.Add , , Jour
            .ListItems(i).ListSubItems.Add , , Id
            .ListItems(i).ListSubItems.Add , , Format(DateProd, "dd/mm")
        End With
    Else
        MsgBox "Contrat " & Contrat & " non trouvé"
    End If
Else
    MsgBox "Département " & Departement & " non trouvé"
End If
End Sub
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 14h18   #9
Nouveau Membre du Club
 
Homme
Administrateur de base de données
Inscription : mai 2011
Messages : 99
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Bâtiment

Informations forums :
Inscription : mai 2011
Messages : 99
Points : 29
Points : 29
Ça ne change rien, et mes variables étaient corrects, car la variable jour représente un nombre de jours, et le problème est encore qu'il n'ajoute que le contrat, les autres éléments ne sont pas ajouter dans la listview.

Merci!
Beaudelicius est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 14h27   #10
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Si Si, j'ai testé sur mon fichier test concocté pour l'occasion et tu devines que c'était sans problème.
Peut être à toi d'adapter en fonction de ton fichier.
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 15h19   #11
Nouveau Membre du Club
 
Homme
Administrateur de base de données
Inscription : mai 2011
Messages : 99
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Bâtiment

Informations forums :
Inscription : mai 2011
Messages : 99
Points : 29
Points : 29
Ok j'ai trouvé mon problème, c'est parce que j'effectuais un sort sur ma colonne 4 (la date de prod) et ça l'efface des données de ma listview,

Code :
1
2
3
4
5
'TRIE
            .Sorted = False
            .SortKey = 3
            .SortOrder = lvwAscending
            .Sorted = True
j'avais pris un code sur internet, mais j'ai enlevé le bout .sorted = true, et tout fonctionne.

Merci de ton aide c'est vraiment apprécié
Beaudelicius est actuellement 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 +2. Il est actuellement 22h04.


 
 
 
 
Partenaires

Hébergement Web