[Catégorie modifiée .Net -> VBA] liaison valeur listbox avec 1 tabeau à copier
brux40
Messages postés8Date d'inscriptionvendredi 6 janvier 2012StatutMembreDernière intervention24 février 2012
-
6 janv. 2012 à 08:10
brux40
Messages postés8Date d'inscriptionvendredi 6 janvier 2012StatutMembreDernière intervention24 février 2012
-
6 janv. 2012 à 13:52
Bonjour, et bonne année 2012
Désolé de vous redéranger pour cela. J'ai un soucis avec un programme. Je mets des valeurs dans 3 listbox d'un userform (jusque tout va à peu près bien ) puis à partir de ces termes, j'aimerais que selon le choix, un programme vienne copié collé un tabeau d'une page non active sur la page active avec les critères voulues.
Et le je sèche complet,
J'avais déjà poster un mail il y a quelques jours sans beaucoup de réponse.
Merci d'avance de votre aide et désolé de vous déranger.
Private Sub UserForm_Initialize()
'choix du moteur
Dim i As Integer
Dim Valeurs As Variant
Dim a As Object
Set a = CreateObject("Scripting.Dictionary")
'efface le contenu de la listbox
ListBoxmodmot.Clear
'avec la feuille base de donnée.
With Sheets("base de donnee")
'Pour aller plus vite on charge les valeurs dans un tableau
Valeurs = .Range("B3:B5000").Value
For i = LBound(Valeurs) To UBound(Valeurs)
If Not IsEmpty(Valeurs(i, 1)) Then a(Valeurs(i, 1)) = ""
Next i
End With
If IsArray(Valeurs) Then ListBoxmodmot.List = a.keys
'choix du stade
Dim j As Integer
Dim Valeurss As Variant
Dim f As Object
Set f = CreateObject("Scripting.Dictionary")
ListBoxstadmot.Clear
With Sheets("base de donnee")
Valeurss = .Range("c3:c5000").Value
For j = LBound(Valeurss) To UBound(Valeurss)
If Not IsEmpty(Valeurss(j, 1)) Then f(Valeurss(j, 1)) = ""
Next j
End With
If IsArray(Valeurss) Then ListBoxstadmot.List = f.keys
'choix du type de calcul
Dim k As Integer
Dim Val As Variant
Dim g As Object
Set g = CreateObject("Scripting.Dictionary")
ListBoxcalcmot.Clear
With Sheets("base de donnee")
Val = .Range("d3:d5000").Value
For k = LBound(Val) To UBound(Val)
If Not IsEmpty(Val(k, 1)) Then g(Val(k, 1)) = ""
Next k
End With
If IsArray(Val) Then ListBoxcalcmot.List = g.keys
End Sub
Private Sub ListBoxmodmot_Click()
Range("F7").Value = ListBoxmodmot
End Sub
Private Sub ListBoxstadmot_Click()
Range("f8").Value = ListBoxstadmot
End Sub
Private Sub ListBoxcalcmot_Click()
Range("f9").Value = ListBoxcalcmot
End Sub
Private Sub CommandButton1_Click()
Dim i, j As Integer
Dim c, d, e As Cells
With Sheets("base de donnee").Range("A3:D5000")
c = Sheets("base de donnee").Cells(i, 3)
d = Sheets("base de donnee").Cells(i, 4)
e = Sheets("base de donnee").Cells(i, 5)
Set c = .Find(ListBoxmodmot.Value, lookat:=xlWhole)
Set d = .Find(ListBoxstadmot.Value, lookat:=xlWhole)
Set e = .Find(ListBoxcalcmot.Value, lookat:=xlWhole)
'si e,c,d sont sont sur la même lignes alors on recopie le tableau A11.............faisceau correspondant
End With
End Sub
A voir également:
[Catégorie modifiée .Net -> VBA] liaison valeur listbox avec 1 tabeau à copier
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018219 6 janv. 2012 à 08:23
Bonjour,
- Tu développes donc sous VBA/Excel et non sous VB.Net !
Fais STP dorénavant très attenion au chois de la section dans laquelle tu ouvres une dicussion. La présente aurait dû l'être dans la section "Langages dérivés > VBA"
- Nous te serions par ailleurs reconnaissant de bien vouloir présenter sur ce forum des bouts de code indentés et entre balises code (sinon : lecture assez pénible).
J'ai des difficultés à comprendre pourquoi tu utilises des objets dictionnaire (surtout ainsi) !
Peux-tu exposer avec précision ce que tu cherches à faire ?
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
brux40
Messages postés8Date d'inscriptionvendredi 6 janvier 2012StatutMembreDernière intervention24 février 2012 6 janv. 2012 à 09:33
Désolé pour l'erreur de catégorie, je débute à peine donc je suis un peu perdu....
Ben la première partie du programme est bonne, elle copie certaines valeurs du tableau "base de donnée vers la listbox sans case vides et sans doublon. J'ai pris conseil sur cette partie et j'avoue que cela marche comme ça et je n'ai pas essayer de le modifier.
Je bloque la sur le fait que je n'arrive pas à partir des 3 listbox à utiliser comme des choix possibles, en appuyant sur un bouton par rapport à ces paramètres. Aller chercher un tableau dans la base de donné pour le copier dans la feuille calcul .
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018219 6 janv. 2012 à 10:01
Pour ta 1ere partie, tu alourdis pour rien !
Regarde ce que ferait ceci (exemple) :
Dim tablo
ListBox1.Visible = False ' pour gagner du temps d'affichage
ListBox1.Clear
tablo = Worksheets("Feuil1").Range("A2:C15")
ListBox1.List = tablo
For i = ListBox1.ListCount - 1 To 0 Step -1
If ListBox1.List(i) = "" Then ListBox1.RemoveItem (i)
Next
ListBox1.Visible = True
Cela va très vite !
Explique plus en détail et avec précision ton point 2
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018219 6 janv. 2012 à 10:07
Pardon !
C frappé au lieu de A ===>>>
Lire :
tablo = Worksheets("Feuil1").Range("A2:A
15")
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Jack
Messages postés14007Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 6 janv. 2012 à 12:13
Salut
Moi non plus, je n'ai toujours pas saisi la difficulté que tu rencontres.
Le code présenté fonctionne t-il ?
Donne t-il un résultat malgré tout ?
Donne t-il une erreur ? Laquelle, sur quelle ligne ?
c = Sheets("base de donnee").Cells(i, 3)
La contenu de i n'est pas initialisé : erreur certaine.
La méthode Find permet en effet de trouver la première occurrence dans un Range, mais s'il ne la trouve pas, la variable assignée restera Nothing : A tester en premier :
Private Sub CommandButton1_Click()
Dim i As Integer, j As Integer ' Voir 'Attention 2' plus bas
Dim maCellC As Cells, maCellD As Cells, maCellE As Cells
With Sheets("base de donnee").Range("A3:D5000")
maCellC = .Cells(i, 3)
maCellD = .Cells(i, 4)
maCellE = .Cells(i, 5)
Set maCellC = .Find(ListBoxmodmot.Value, lookat:=xlWhole)
Set maCellD = .Find(ListBoxstadmot.Value, lookat:=xlWhole)
Set maCellE = .Find(ListBoxcalcmot.Value, lookat:=xlWhole)
If Not maCellC Is Nothing And _
Not maCellD Is Nothing And _
Not maCellE Is Nothing Then
' 'si e,c,d sont sont sur la même lignes
If maCellC.Row = mCellD.Row And _
maCellC.Row = mCellE.Row Then
' alors on recopie le tableau A11 ...
' ## Pas assez précis
End If
End If
End With
End Sub
Attention 1 :
Val ou e sont des mots clé du langage. Tu les utilises pour le nom de variable --> Risque certain de bug !
Attention 2 :
Dim i, j As Integer
Dim c, d, e As Cells
ne signifie pas que i et j seront des Integer, et cde des Cells.
Seuls les derniers de la liste seront du type précisé, les précédents seront de type Variant.
Cela peut fonctionner, mais il y a des risques.
Mieux vaus donner le type de chaque variable
Dim i As Integer, j As Integer
Dim c As Cells, d As Cells, e As Cells
PS : Oui, pour présenter du code, utilise la coloration syntaxique (3ème icone à droite) = plus facile à relire et conserve les indentations.
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
brux40
Messages postés8Date d'inscriptionvendredi 6 janvier 2012StatutMembreDernière intervention24 février 2012 6 janv. 2012 à 13:16
Bonjour Jack,
Premièrement merci pour ton attention 2, je ne savais pas
Quand j'exécute ta partie de programme ( qui est très claire selon moi ), on dirait que le programme ne prend pas en compte "as cells"
Le logiciel me mets "erreur de compilation , type défini par l'itulisateur non défini".
Et pour pour le manque de précision : si les 3 varaibles sont sur la même ligne alors il doit recopier le tableau associé (juste à coté) avec juste les valeurs dans le tableau intitulé référence avec A11.........faisceau. de la feuille calcul. Si c'est bien sa que tu me demande.
MarcPL
Messages postés172Date d'inscriptionjeudi 8 décembre 2011StatutMembreDernière intervention21 juillet 20132 6 janv. 2012 à 13:27
Avec As Range ce serait mieux ...
___________________________________________________________________________________________________________________
Comme la vitesse de la lumière est supérieure à celle du son, certains ont l'air brillant avant d'avoir l'air con !
cs_Jack
Messages postés14007Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 6 janv. 2012 à 13:39
Si tu as conservé ta variable 'e', c'est normal que cela bugue : 'e' est l'exposant de puissance de 10.
"avec A11.........faisceau"
Moi, ça ne me dit rien.
Pour la recopie, enregistre une macro pendant que tu fais un copier-coller similaire et regarde le code.
brux40
Messages postés8Date d'inscriptionvendredi 6 janvier 2012StatutMembreDernière intervention24 février 2012 6 janv. 2012 à 13:52
Oups pardon, c'est un tableau de la feuille "base de donnee" avec qui commence à la colonne "e" jusqu'à "t". et les il y a 10 lignes avec la première qui est à la même hauteur que les 3 conditions ( dans les listbox). Après sa doit dépendre des des conditions, car on a pas les mêmes valeurs selon les critères.
Et c'est ce tableau qui faut recopié dans la feuille ("calcul") dans les céllulle "D19" à "R28".
Merci beaucoup en tout cas de ton aide, sa m'a bien servis....