Bojour,
Pour comprendre les variables tableaux, un peu de lecture s'impose.
Conceptualisation des variables tableau en VBA et Application à l'optimisation du code sous Excel
Utiliser les variables tableaux en VBA Excel
Version imprimable
Bojour,
Pour comprendre les variables tableaux, un peu de lecture s'impose.
Conceptualisation des variables tableau en VBA et Application à l'optimisation du code sous Excel
Utiliser les variables tableaux en VBA Excel
merci Philippe pour toutes ces informations!!
ca fait une semaine que je cherche à resoudre mon problème et j'y suis toujours pas arrivée :(
Malheuesement je n'ai pas assez de temps pour lire et comprendre ces sites afin de pouvoir arriver à une solution, en plus c'est le weekend et je dois m'occupper de mes 3 enfants + ménage + ....etc
donc si quelqu'un d'autre pourrait m'aider à resoudre mon problème je lui serais trés reconnaissante!
et merci d'avance
samawati : Me basant sur l'excellent code de Philippe pour obtenir les titres de colonnes et en créant la base de données sur une seule feuille au lieu de deux, pour simplifier le codage, j'obtiens ce résultat.
Est-ce que cette mise en page et ce code de recherche peuvent te convenir?
Cordialement
Docmarti
Bonjour,
Une autre approche pour mémoriser les n° de lignes filtrés est de les placer dans le premier élément de la liste.
Exemple :
Pour cacher le n° de ligne il suffit de changer la valeur 20 par 0Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Sub InitlstWithAddItem(Filtre As String) ' Initialisation de la liste des données de ListBox dépendant de l'argument Filtre Dim r As Long, c As Integer With lstWithAddItem .ColumnCount = 6: .ColumnWidths = "20;50;60;13;13;15" For r = 1 To rng.Rows.Count If rng.Cells(r, 5) = Filtre Then .AddItem r ' 1er élément de la liste = N° de ligne de la liste des données For c = 2 To rng.Columns.Count .List(.ListCount - 1, c - 1) = rng.Cells(r, c) Next c End If Next r End With End Sub
Et on récupère ce n° de ligne parCode:.ColumnWidths = "20;50;60;13;13;15"
Petite démonstration sur ce classeur avec deux contrôles ListBox.Code:
1
2
3 Private Sub lstWithAddItem_Click() AfficheTextBox Me.lstWithAddItem.Value End Sub
L'un nommé lstWithRowSource dont la liste est alimentée par la propriété RowSource
L'autre nommé lstWithAddItem dont la liste est alimentée par la méthode AddItem
merci Docmarti et Philippe pour les solutions proposés!!
malheureusement elles ne me conviennent pas car j'ai 12 feuilles à gérer! donc impossible de regrouper tout dans une seule feuille!
c'est bizzare qu'il y a pas de solution concréte pour mon cas
Bonjour,
D'abord, c'est la première fois me semble-t-il que l'on parle de plusieurs feuilles (jusqu'à présent il s'agissait de la feuille [Hardware]) et ensuite en tout les cas en ce qui me concerne il n'a jamais été question d'apporter une solution toute faite et clé en main mais simplement de donner des pistes et aussi répondre à certaines questions comme par exemple que
Citation:
alors comment faire pour l'affichage de la TextBox8 jusqu'à TextBox16 ??
bonjour Philippe,
mais non je te reproche rien!! j'apprécie beaucoup tes suggéstions! crois moi :D
ben 12 feuilles car: si le principe fonctionne entre deux feuilles et puisque le numéro de la ligne ne change jamais ==> donc ca devrait fonctionner pour toutes les autres feuilles facilement!
Le seul problème qui existe c'est qu'il y a toujours pas de solution concrete (et c'est la vérité) et ca n'a rien à avoir avec toi entant que personne!!
Mais je vais pas laisser tomber, je vais aller demander sur les sites anglais/allemands et si je trouve une solution (ce que j'espère de tout mon coeur) Ì will populate it here!! :D
à+
Bonjour,
Et bien je n'ai alors rien compris à tes questions.
Quel est le problème exactement ?
Salut Docmarti et Philippe,
ca y est j'ai réussi à resoudre le premier problème :D
voici le code comme promis!
donc maintenant je veux que les données des imprimentes s'affichent sur la Listbox2 et quand je selectionne une imprimente que ses details s'affichent sur la TextBox17.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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91 Private Sub cmdfermer_Click() Unload Me End Sub Private Sub BtnRecherche_Click() Dim xCherche As String, xAdresse As String, xPremier As String Dim Y As Boolean Dim arr() As Variant Dim rng As Range Dim iRowU As Integer ListBox1.Clear ListBox2.Clear xCherche = txtrecherche.Value If chkMod Then sMod = xlWhole Else sMod = xlPart End If If xCherche = "" Then MsgBox "Inserez un nom SVP!", vbExclamation, "Attention!" Exit Sub End If With Worksheets("Utilisateurs") Set rng = .Range("A2:D5000").Cells.Find(what:=xCherche, LookAt:=sMod, LookIn:=xlValues) If Not rng Is Nothing Then xPremier = rng.Address(False, False) Y = True Do Until xAdresse = xPremier ReDim Preserve arr(1 To 5, 0 To iRowU) arr(1, iRowU) = rng.Row arr(2, iRowU) = .Cells(rng.Row, 1) arr(3, iRowU) = .Cells(rng.Row, 2) arr(4, iRowU) = .Cells(rng.Row, 3) arr(5, iRowU) = .Cells(rng.Row, 4) iRowU = iRowU + 1 Set rng = .Cells.FindNext(after:=rng) xAdresse = rng.Address(False, False) Loop xAdresse = "" xPremier = "" End If End With If Y = False Then MsgBox "votre machin n'existe pas!" Else With ListBox1 .ColumnCount = 5 .ColumnWidths = "0;35;70;70;40" .Column = arr End With End If End Sub Private Sub txtrecherche_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) ' rechercher en cliquant sur la tocuhe entrée If KeyCode = 13 Then BtnRecherche_Click End Sub Private Sub ListBox1_Click() Dim n As Integer Dim aRow As Long aRow = ListBox1.List(ListBox1.ListIndex, 0) ' aRow donne le numéro de la ligne selectionnée ' si on utilise des Labels il faut utiliser la syntaxe suivante: aRow= ActiveCell.Row For n = 1 To 7 Me.Controls("TextBox" & n).Value = Worksheets("Utilisateurs").Cells(aRow, n).Value Next For n = 8 To 16 Me.Controls("TextBox" & n).Value = Worksheets("Hardware").Cells(aRow, n - 4).Value Next End Sub
@Philippe: plus de piste s'il te plait je souhaite vraiment la syntaxe à utiliser, si c'est possible bien sur ;)
mais je chercherais de ma part aussi!
merci d'avance!!
Bonjour Philippe et samawati.
J'ai testé la suggestion de Philippe d'utiliser RowSource. J'adore. Je vais l'adopter.
samawati a opté pour l'utilisation d'un tableau à 2 dimensions et s'en tire très bien.
J'ai ajouté un Multipage. Ca pourrait peut-être lui servir pour ajouter certaines de ses 12 feuilles.
Cordialement
Docmarti
Bonjour Docmarti et Philippe,
eh ben un grand merci Docmarti, you did a good job :ccool:
bon pour le code je dois le lire attentivement pour mieux le comprendre!
par contre il m'affiche toujours le message: "Le nombre de lignes n'est pas identique que sur Utilisateurs"
Je pense qu'il faut definir une "LastRow" pourqu'il puisse s'arreter à la derniere ligne non? je pense qu'il compte jusqu'à la fin de la feuille mais je ne suis pas sûre.
à plus tard
salut Docmarti,
bon j'ai lu tout ton code et j'avoue que j'ai rien pigé :(
La Lisbox2, c'est quoi son rôle? et quand j'enlève ca fonctionne pas.
J'ai deux Listbox (1 et 5) d'affichage d'utilisateurs, pourquoi? et quand j'enlève l'une des 2 ca fonctionne pas.
peux tu m'expliquer un peu ton code s'il te plait?
sinon est ce possible d'adapter ce que tu as realisé à mon dernier code?
merci d'avance!!
Bonjour samawati
J'ai enlevé le ListBox de la feuille Hardware pour simplifier la compréhension.
Donc il reste 3 Listbox :
celui du haut affiche le résultat de la recherche (Bouton Rechercher)
celui du milieu affiche toutes les données de la feuille Utilisateurs
celui du bas affiche les imprimantes de la ligne sélectionnée.
Utilise la touche F8 pour avancer pas-à-pas et étudier à fond chaque ligne.
S'il y a quelque chose que tu n'arrives vraiment pas à comprendre, tu peux demander.
Docmarti
Salut Docmarti, Philippe et le forum,
bon je pense qu'on peut fermer ce sujet c'est réglé.
merci encore une fois!