---
Public Tableau()
---
et =E0 l'aide du code VBA je le remplie de valeurs :
----
L =3D 1
For Each Cel In sht2.Range("B2",
sht2.Range("B65536").End(xlUp))
On Error Resume Next
If UCase(Motrech) Like UCase(Cel) Then
Lst1 =3D Cel.Offset(, -1).Value
Lst2 =3D Cel.Offset(, 1).Value
Tableau(L, 1) =3D Lst1: Tableau(L, 2) =3D Lst2
L =3D L + 1
End If
Next Cel
----
Est-ce une mani=E8re de proceder =E0 =E9viter de n'avoir pas utiliser Dim o=
u
Redim Preserve pour la d=E9claration ou le redimentionnement dynamique
du tableau ?
Dans la feuille1, je saisi quotidiennement mes achats sous la forme xx- yyy-n, d'ou le xx représente le code catégorie, yyy la désignation du produit et n les différents prix unitaire pour un même produit.
La feuille2 est un récapitulatif de la feuille1.
Alors si je voudrais saisir un produit dans feuille1 avec son prix unitaire pour une nouvelle journée, je devrais savoir tout les prix unitaire de ce produit récapitulés dans feuille2.
Ainsi la Userform (ListBox1) est appelé en tapant dans la colonne A de feuille1, la forme xx-yyy-- (Avec deux tirets à la fin).
Alors une recherche est lancée et le résultat est stocké dans "Tableau".
Ensuite la ListBox est rempli par "Tableau" avant d'être afficher sous forme de deux colonnes : une représente le code du produit avec en face dans la deuxième colonne son prix unitaire.
Il faut ajouter des valeurs à la fin du Tableau pour permettre une sélection supplémentaire si le prix à saisir dans une journée est introuvable dans la feuille2
Par exemple :
Si les valeurs trouvées sont stockées dans "Tableau" pour le mot recherché "Pain" sont :
Dans la feuille1, je saisi quotidiennement mes achats sous la forme xx-
yyy-n, d'ou le xx représente le code catégorie, yyy la désignation du
produit et n les différents prix unitaire pour un même produit.
La feuille2 est un récapitulatif de la feuille1.
Alors si je voudrais saisir un produit dans feuille1 avec son prix
unitaire pour une nouvelle journée, je devrais savoir tout les prix
unitaire de ce produit récapitulés dans feuille2.
Ainsi la Userform (ListBox1) est appelé en tapant dans la colonne A de
feuille1, la forme xx-yyy-- (Avec deux tirets à la fin).
Alors une recherche est lancée et le résultat est stocké dans
"Tableau".
Ensuite la ListBox est rempli par "Tableau" avant d'être afficher sous
forme de deux colonnes : une représente le code du produit avec en
face dans la deuxième colonne son prix unitaire.
Il faut ajouter des valeurs à la fin du Tableau pour permettre une
sélection supplémentaire si le prix à saisir dans une journée est
introuvable dans la feuille2
Par exemple :
Si les valeurs trouvées sont stockées dans "Tableau" pour le mot
recherché "Pain" sont :
Dans la feuille1, je saisi quotidiennement mes achats sous la forme xx- yyy-n, d'ou le xx représente le code catégorie, yyy la désignation du produit et n les différents prix unitaire pour un même produit.
La feuille2 est un récapitulatif de la feuille1.
Alors si je voudrais saisir un produit dans feuille1 avec son prix unitaire pour une nouvelle journée, je devrais savoir tout les prix unitaire de ce produit récapitulés dans feuille2.
Ainsi la Userform (ListBox1) est appelé en tapant dans la colonne A de feuille1, la forme xx-yyy-- (Avec deux tirets à la fin).
Alors une recherche est lancée et le résultat est stocké dans "Tableau".
Ensuite la ListBox est rempli par "Tableau" avant d'être afficher sous forme de deux colonnes : une représente le code du produit avec en face dans la deuxième colonne son prix unitaire.
Il faut ajouter des valeurs à la fin du Tableau pour permettre une sélection supplémentaire si le prix à saisir dans une journée est introuvable dans la feuille2
Par exemple :
Si les valeurs trouvées sont stockées dans "Tableau" pour le mot recherché "Pain" sont :
La procédure est dans le module de la feuil1 Fais un double-clique dans une des cellules de la feuil1 èt observe....
http://cjoint.com/?icpr48kNgP
Évidemment, il te faudra probablement adapter ceci à ta façon de travailler !
"Apitos" a écrit dans le message de news:
Bonjour MichDenis,
Le code à pour tâche de réaliser ce qui suit :
Dans la feuille1, je saisi quotidiennement mes achats sous la forme xx- yyy-n, d'ou le xx représente le code catégorie, yyy la désignation du produit et n les différents prix unitaire pour un même produit.
La feuille2 est un récapitulatif de la feuille1.
Alors si je voudrais saisir un produit dans feuille1 avec son prix unitaire pour une nouvelle journée, je devrais savoir tout les prix unitaire de ce produit récapitulés dans feuille2.
Ainsi la Userform (ListBox1) est appelé en tapant dans la colonne A de feuille1, la forme xx-yyy-- (Avec deux tirets à la fin).
Alors une recherche est lancée et le résultat est stocké dans "Tableau".
Ensuite la ListBox est rempli par "Tableau" avant d'être afficher sous forme de deux colonnes : une représente le code du produit avec en face dans la deuxième colonne son prix unitaire.
Il faut ajouter des valeurs à la fin du Tableau pour permettre une sélection supplémentaire si le prix à saisir dans une journée est introuvable dans la feuille2
Par exemple :
Si les valeurs trouvées sont stockées dans "Tableau" pour le mot recherché "Pain" sont :
La procédure est dans le module de la feuil1
Fais un double-clique dans une des cellules de la feuil1
èt observe....
http://cjoint.com/?icpr48kNgP
Évidemment, il te faudra probablement adapter ceci
à ta façon de travailler !
"Apitos" <apitos@gmail.com> a écrit dans le message de news:
16add0bc-8a89-46f0-b753-7fcc3f176191@25g2000hsx.googlegroups.com...
Bonjour MichDenis,
Le code à pour tâche de réaliser ce qui suit :
Dans la feuille1, je saisi quotidiennement mes achats sous la forme xx-
yyy-n, d'ou le xx représente le code catégorie, yyy la désignation du
produit et n les différents prix unitaire pour un même produit.
La feuille2 est un récapitulatif de la feuille1.
Alors si je voudrais saisir un produit dans feuille1 avec son prix
unitaire pour une nouvelle journée, je devrais savoir tout les prix
unitaire de ce produit récapitulés dans feuille2.
Ainsi la Userform (ListBox1) est appelé en tapant dans la colonne A de
feuille1, la forme xx-yyy-- (Avec deux tirets à la fin).
Alors une recherche est lancée et le résultat est stocké dans
"Tableau".
Ensuite la ListBox est rempli par "Tableau" avant d'être afficher sous
forme de deux colonnes : une représente le code du produit avec en
face dans la deuxième colonne son prix unitaire.
Il faut ajouter des valeurs à la fin du Tableau pour permettre une
sélection supplémentaire si le prix à saisir dans une journée est
introuvable dans la feuille2
Par exemple :
Si les valeurs trouvées sont stockées dans "Tableau" pour le mot
recherché "Pain" sont :
La procédure est dans le module de la feuil1 Fais un double-clique dans une des cellules de la feuil1 èt observe....
http://cjoint.com/?icpr48kNgP
Évidemment, il te faudra probablement adapter ceci à ta façon de travailler !
"Apitos" a écrit dans le message de news:
Bonjour MichDenis,
Le code à pour tâche de réaliser ce qui suit :
Dans la feuille1, je saisi quotidiennement mes achats sous la forme xx- yyy-n, d'ou le xx représente le code catégorie, yyy la désignation du produit et n les différents prix unitaire pour un même produit.
La feuille2 est un récapitulatif de la feuille1.
Alors si je voudrais saisir un produit dans feuille1 avec son prix unitaire pour une nouvelle journée, je devrais savoir tout les prix unitaire de ce produit récapitulés dans feuille2.
Ainsi la Userform (ListBox1) est appelé en tapant dans la colonne A de feuille1, la forme xx-yyy-- (Avec deux tirets à la fin).
Alors une recherche est lancée et le résultat est stocké dans "Tableau".
Ensuite la ListBox est rempli par "Tableau" avant d'être afficher sous forme de deux colonnes : une représente le code du produit avec en face dans la deuxième colonne son prix unitaire.
Il faut ajouter des valeurs à la fin du Tableau pour permettre une sélection supplémentaire si le prix à saisir dans une journée est introuvable dans la feuille2
Par exemple :
Si les valeurs trouvées sont stockées dans "Tableau" pour le mot recherché "Pain" sont :
C'est presque ce que je voulais à l'exception de deux points :
1 - Motrech = Split(Target, "-")(1)
Pose un problème avec les mots composés de syntaxe : xx-yyy-yyy-n
2 - La listBox doit contenir une ou plus d'une ligne supplémentaire (Choix) avec une deuxième colonne correspondante vide selon les différents préfixes trouvés (xx-yyy-) de telle sorte qu'on voit ceci :
C'est presque ce que je voulais à l'exception de deux points :
1 - Motrech = Split(Target, "-")(1)
Pose un problème avec les mots composés de syntaxe : xx-yyy-yyy-n
2 - La listBox doit contenir une ou plus d'une ligne supplémentaire
(Choix) avec une deuxième colonne correspondante vide selon les
différents préfixes trouvés (xx-yyy-) de telle sorte qu'on voit ceci :
C'est presque ce que je voulais à l'exception de deux points :
1 - Motrech = Split(Target, "-")(1)
Pose un problème avec les mots composés de syntaxe : xx-yyy-yyy-n
2 - La listBox doit contenir une ou plus d'une ligne supplémentaire (Choix) avec une deuxième colonne correspondante vide selon les différents préfixes trouvés (xx-yyy-) de telle sorte qu'on voit ceci :
A ) Tu déclares la variable X as Variant en haut de ta procédure B ) tu remplaces ceci Motrech = Split(Target, "-")(1) PAR :
Quand tu as ceci : xx-yyy-yyy-n , J'ai supposé que tu voulais conserver yyy-yyy
X = Split(Target, "-") If UBound(X) > 2 Then Motrech = X(1) & "-" & X(2) Else Motrech = X(1) End If
Question 2 Dans la procédure générale, tu as ceci qui permet d'ajouter les items à ta liste du listbox. Lorsque tu ajoutes des entrées dans ta feuille excel, tu peux ajouter ces derniers quand tu veux à ta liste... c'est à toi de déterminer quand tu veux les ajouter et comment tu veux que ton application fonctionne .... la procédure soumise n'était qu'un exemple !
'----------------------------------------- With ListePrixU.ListBox1 .AddItem Trouve.Offset(, -1).Value .List(A, 1) = Trouve.Offset(, 1).Value End With '-----------------------------------------
"Apitos" a écrit dans le message de news:
Bonjour Michdenis,
C'est presque ce que je voulais à l'exception de deux points :
1 - Motrech = Split(Target, "-")(1)
Pose un problème avec les mots composés de syntaxe : xx-yyy-yyy-n
2 - La listBox doit contenir une ou plus d'une ligne supplémentaire (Choix) avec une deuxième colonne correspondante vide selon les différents préfixes trouvés (xx-yyy-) de telle sorte qu'on voit ceci :
A ) Tu déclares la variable X as Variant en haut de ta procédure
B ) tu remplaces ceci Motrech = Split(Target, "-")(1) PAR :
Quand tu as ceci : xx-yyy-yyy-n , J'ai supposé que tu voulais
conserver yyy-yyy
X = Split(Target, "-")
If UBound(X) > 2 Then
Motrech = X(1) & "-" & X(2)
Else
Motrech = X(1)
End If
Question 2
Dans la procédure générale, tu as ceci qui permet
d'ajouter les items à ta liste du listbox. Lorsque tu
ajoutes des entrées dans ta feuille excel, tu peux
ajouter ces derniers quand tu veux à ta liste... c'est
à toi de déterminer quand tu veux les ajouter et comment
tu veux que ton application fonctionne .... la procédure
soumise n'était qu'un exemple !
'-----------------------------------------
With ListePrixU.ListBox1
.AddItem Trouve.Offset(, -1).Value
.List(A, 1) = Trouve.Offset(, 1).Value
End With
'-----------------------------------------
"Apitos" <apitos@gmail.com> a écrit dans le message de news:
ebb7c015-fc83-45bf-b5c0-12154818528c@k13g2000hse.googlegroups.com...
Bonjour Michdenis,
C'est presque ce que je voulais à l'exception de deux points :
1 - Motrech = Split(Target, "-")(1)
Pose un problème avec les mots composés de syntaxe : xx-yyy-yyy-n
2 - La listBox doit contenir une ou plus d'une ligne supplémentaire
(Choix) avec une deuxième colonne correspondante vide selon les
différents préfixes trouvés (xx-yyy-) de telle sorte qu'on voit ceci :
A ) Tu déclares la variable X as Variant en haut de ta procédure B ) tu remplaces ceci Motrech = Split(Target, "-")(1) PAR :
Quand tu as ceci : xx-yyy-yyy-n , J'ai supposé que tu voulais conserver yyy-yyy
X = Split(Target, "-") If UBound(X) > 2 Then Motrech = X(1) & "-" & X(2) Else Motrech = X(1) End If
Question 2 Dans la procédure générale, tu as ceci qui permet d'ajouter les items à ta liste du listbox. Lorsque tu ajoutes des entrées dans ta feuille excel, tu peux ajouter ces derniers quand tu veux à ta liste... c'est à toi de déterminer quand tu veux les ajouter et comment tu veux que ton application fonctionne .... la procédure soumise n'était qu'un exemple !
'----------------------------------------- With ListePrixU.ListBox1 .AddItem Trouve.Offset(, -1).Value .List(A, 1) = Trouve.Offset(, 1).Value End With '-----------------------------------------
"Apitos" a écrit dans le message de news:
Bonjour Michdenis,
C'est presque ce que je voulais à l'exception de deux points :
1 - Motrech = Split(Target, "-")(1)
Pose un problème avec les mots composés de syntaxe : xx-yyy-yyy-n
2 - La listBox doit contenir une ou plus d'une ligne supplémentaire (Choix) avec une deuxième colonne correspondante vide selon les différents préfixes trouvés (xx-yyy-) de telle sorte qu'on voit ceci :
Il est important de savoir qu'on doit préparer la liste des mots correspondants et ajouter +1 a chaque sous liste trouvée avant de l'afficher dans la ListBox.
Voila le code sur lequel je bloque : '----- Sub AjoutChoixTabList1() MsgBox "portée tab = " & UBound(Tableau, 2) For p = 1 To UBound(Tableau, 2) - 1 elem = Tableau(1, p) indc = CInt(Right$(elem, 1)) chn = Left(elem, Len(elem) - 2) For t = p + 1 To UBound(Tableau, 2) - 1 elem2 = Tableau(1, t) If elem2 <> "" And InStr(chn, elem2) <> 0 Then MsgBox "indc avant pour " & elem2 & " = " & indc If CInt(Right$(elem2, 1)) > indc Then indc = CInt(Right $(elem2, 1)) MsgBox "indc après pour " & elem2 & " = " & indc End If Next t ReDim Preserve Tableau(2, UBound(Tableau, 2) + 1) Tableau(1, UBound(Tableau, 2)) = chn & "-" & indc+1 'MsgBox "Tableau(1, " & UBound(Tableau, 2) + 1 & ") = " & Tableau(1, UBound(Tableau, 2) + 1) Next p End Sub
'----
Pour avoir ce résultat : '--- Résultat de la recherche du mot "stylo" Lib-Stylo C-1 0,10 Lib-Stylo-1 0,01 Lib-Stylo-2 0,12 Lib-Stylo-3 0,22 Xup-Stylo-Gh-1 0,15 Xx1-Stylo-1 0,05
'----- Eléments ajoutés à la fin de la liste "Tableau" : le plus gran d indice de chaque sous groupe + 1
Merci michdenis de donner toujours suite à mes questions.
Bonsoir,
Il est important de savoir qu'on doit préparer la liste des mots
correspondants et ajouter +1 a chaque sous liste trouvée avant de
l'afficher dans la ListBox.
Voila le code sur lequel je bloque :
'-----
Sub AjoutChoixTabList1()
MsgBox "portée tab = " & UBound(Tableau, 2)
For p = 1 To UBound(Tableau, 2) - 1
elem = Tableau(1, p)
indc = CInt(Right$(elem, 1))
chn = Left(elem, Len(elem) - 2)
For t = p + 1 To UBound(Tableau, 2) - 1
elem2 = Tableau(1, t)
If elem2 <> "" And InStr(chn, elem2) <> 0 Then
MsgBox "indc avant pour " & elem2 & " = " & indc
If CInt(Right$(elem2, 1)) > indc Then indc = CInt(Right
$(elem2, 1))
MsgBox "indc après pour " & elem2 & " = " & indc
End If
Next t
ReDim Preserve Tableau(2, UBound(Tableau, 2) + 1)
Tableau(1, UBound(Tableau, 2)) = chn & "-" & indc+1
'MsgBox "Tableau(1, " & UBound(Tableau, 2) + 1 & ") = " &
Tableau(1, UBound(Tableau, 2) + 1)
Next p
End Sub
'----
Pour avoir ce résultat :
'--- Résultat de la recherche du mot "stylo"
Lib-Stylo C-1 0,10
Lib-Stylo-1 0,01
Lib-Stylo-2 0,12
Lib-Stylo-3 0,22
Xup-Stylo-Gh-1 0,15
Xx1-Stylo-1 0,05
'----- Eléments ajoutés à la fin de la liste "Tableau" : le plus gran d
indice de chaque sous groupe + 1
Il est important de savoir qu'on doit préparer la liste des mots correspondants et ajouter +1 a chaque sous liste trouvée avant de l'afficher dans la ListBox.
Voila le code sur lequel je bloque : '----- Sub AjoutChoixTabList1() MsgBox "portée tab = " & UBound(Tableau, 2) For p = 1 To UBound(Tableau, 2) - 1 elem = Tableau(1, p) indc = CInt(Right$(elem, 1)) chn = Left(elem, Len(elem) - 2) For t = p + 1 To UBound(Tableau, 2) - 1 elem2 = Tableau(1, t) If elem2 <> "" And InStr(chn, elem2) <> 0 Then MsgBox "indc avant pour " & elem2 & " = " & indc If CInt(Right$(elem2, 1)) > indc Then indc = CInt(Right $(elem2, 1)) MsgBox "indc après pour " & elem2 & " = " & indc End If Next t ReDim Preserve Tableau(2, UBound(Tableau, 2) + 1) Tableau(1, UBound(Tableau, 2)) = chn & "-" & indc+1 'MsgBox "Tableau(1, " & UBound(Tableau, 2) + 1 & ") = " & Tableau(1, UBound(Tableau, 2) + 1) Next p End Sub
'----
Pour avoir ce résultat : '--- Résultat de la recherche du mot "stylo" Lib-Stylo C-1 0,10 Lib-Stylo-1 0,01 Lib-Stylo-2 0,12 Lib-Stylo-3 0,22 Xup-Stylo-Gh-1 0,15 Xx1-Stylo-1 0,05
'----- Eléments ajoutés à la fin de la liste "Tableau" : le plus gran d indice de chaque sous groupe + 1
Merci michdenis de donner toujours suite à mes questions.
michdenis
A ) Habituellement, pour pouvoir utiliser un tableau à 2 dimensions on doit pouvoir utiliser ceci comme code : ReDim Preserve MonTableau ... pour le redimensionner au fur et à mesure que l'on désire ajouter des entrées. Cependant, cette ligne de code permet que de redimensionner seulement la dernière dimension du tableau... et c'est là que le bât blesse.
Outre la suggestion que je t'ai déjà faite sur ce fil quant à l'usage d'un tableau, tu peux contourner la problématique soulevé par d'abord faire une boucle sur le nombre de lignes que tu auras de besoin pour ton tableau. Pour ce faire la méthode "Find ... FindNext" dont je t'ai donné aussi un exemple sur ce fil est sûrement la plus rapide. Lorsque tu connais exactement la dimension de ton tableau tu fais la déclaration suivante : 'Haut de ta procédure Dim Tableau() dim NbLigne as Long 'Boucle pour déterminer le nombre d'éléments NbLigne = Ce que tu as trouvé (boucle) et tu peux ajouter un nombre quelconque de lignes si tu prévois devoir faire des ajouts 'définir les dimensions de ton tableau (Tableau à base 0 ou 1, à toi de choisir) Redim Tableau(0 to NbLignes, 0 to 1) Et maintenant, tu peux refaire ta boucle en renseignant ton tableau à partir des données que tu as.
B ) Dans la procédure que je t'ai soumise dans le module feuille, tu poses comme condition à l'exécution du code ceci : If Target.Column = 1 And Target.Count = 1 Then
Cela signifie que le code s'exécute avant que la dernière entrée soit terminée puisque les 2 autres cellules à droite ne sont pas encore renseignées....Si tu changes ta condition, tu peux dire à excel d'exécuter le code seulement si les 3 cellules d'une même ligne sont renseignées.....
C ) Perso, je n'ai pas d'autres suggestions à faire sur ta problématique. Je sais que tout ceci n'est pas facile et requiert du temps ... C'est le plaisir qui te tient en haleine !!!
;-)
"Apitos" a écrit dans le message de news:
Bonsoir,
Il est important de savoir qu'on doit préparer la liste des mots correspondants et ajouter +1 a chaque sous liste trouvée avant de l'afficher dans la ListBox.
Voila le code sur lequel je bloque : '----- Sub AjoutChoixTabList1() MsgBox "portée tab = " & UBound(Tableau, 2) For p = 1 To UBound(Tableau, 2) - 1 elem = Tableau(1, p) indc = CInt(Right$(elem, 1)) chn = Left(elem, Len(elem) - 2) For t = p + 1 To UBound(Tableau, 2) - 1 elem2 = Tableau(1, t) If elem2 <> "" And InStr(chn, elem2) <> 0 Then MsgBox "indc avant pour " & elem2 & " = " & indc If CInt(Right$(elem2, 1)) > indc Then indc = CInt(Right $(elem2, 1)) MsgBox "indc après pour " & elem2 & " = " & indc End If Next t ReDim Preserve Tableau(2, UBound(Tableau, 2) + 1) Tableau(1, UBound(Tableau, 2)) = chn & "-" & indc+1 'MsgBox "Tableau(1, " & UBound(Tableau, 2) + 1 & ") = " & Tableau(1, UBound(Tableau, 2) + 1) Next p End Sub
'----
Pour avoir ce résultat : '--- Résultat de la recherche du mot "stylo" Lib-Stylo C-1 0,10 Lib-Stylo-1 0,01 Lib-Stylo-2 0,12 Lib-Stylo-3 0,22 Xup-Stylo-Gh-1 0,15 Xx1-Stylo-1 0,05
'----- Eléments ajoutés à la fin de la liste "Tableau" : le plus grand indice de chaque sous groupe + 1
Merci michdenis de donner toujours suite à mes questions.
A ) Habituellement, pour pouvoir utiliser un tableau à 2 dimensions
on doit pouvoir utiliser ceci comme code :
ReDim Preserve MonTableau ... pour le redimensionner au fur et à
mesure que l'on désire ajouter des entrées.
Cependant, cette ligne de code permet que de redimensionner
seulement la dernière dimension du tableau... et c'est là que le bât
blesse.
Outre la suggestion que je t'ai déjà faite sur ce fil quant à l'usage
d'un tableau,
tu peux contourner la problématique soulevé par d'abord faire une boucle
sur le nombre de lignes que tu auras de besoin pour ton tableau. Pour ce
faire
la méthode "Find ... FindNext" dont je t'ai donné aussi un exemple sur
ce fil est
sûrement la plus rapide.
Lorsque tu connais exactement la dimension de ton tableau tu fais la
déclaration
suivante :
'Haut de ta procédure
Dim Tableau()
dim NbLigne as Long
'Boucle pour déterminer le nombre d'éléments
NbLigne = Ce que tu as trouvé (boucle) et tu peux ajouter un nombre
quelconque
de lignes si tu prévois devoir faire des ajouts
'définir les dimensions de ton tableau (Tableau à base 0 ou 1, à toi de
choisir)
Redim Tableau(0 to NbLignes, 0 to 1)
Et maintenant, tu peux refaire ta boucle en renseignant ton tableau
à partir des données que tu as.
B ) Dans la procédure que je t'ai soumise dans le module feuille,
tu poses comme condition à l'exécution du code ceci :
If Target.Column = 1 And Target.Count = 1 Then
Cela signifie que le code s'exécute avant que la dernière entrée
soit terminée puisque les 2 autres cellules à droite ne sont pas
encore renseignées....Si tu changes ta condition, tu peux dire à
excel d'exécuter le code seulement si les 3 cellules d'une même
ligne sont renseignées.....
C ) Perso, je n'ai pas d'autres suggestions à faire sur ta problématique.
Je sais que tout ceci n'est pas facile et requiert du temps ...
C'est le plaisir qui te tient en haleine !!!
;-)
"Apitos" <apitos@gmail.com> a écrit dans le message de news:
76961f20-16f0-4016-afd2-28ddc8bd4d73@34g2000hsf.googlegroups.com...
Bonsoir,
Il est important de savoir qu'on doit préparer la liste des mots
correspondants et ajouter +1 a chaque sous liste trouvée avant de
l'afficher dans la ListBox.
Voila le code sur lequel je bloque :
'-----
Sub AjoutChoixTabList1()
MsgBox "portée tab = " & UBound(Tableau, 2)
For p = 1 To UBound(Tableau, 2) - 1
elem = Tableau(1, p)
indc = CInt(Right$(elem, 1))
chn = Left(elem, Len(elem) - 2)
For t = p + 1 To UBound(Tableau, 2) - 1
elem2 = Tableau(1, t)
If elem2 <> "" And InStr(chn, elem2) <> 0 Then
MsgBox "indc avant pour " & elem2 & " = " & indc
If CInt(Right$(elem2, 1)) > indc Then indc = CInt(Right
$(elem2, 1))
MsgBox "indc après pour " & elem2 & " = " & indc
End If
Next t
ReDim Preserve Tableau(2, UBound(Tableau, 2) + 1)
Tableau(1, UBound(Tableau, 2)) = chn & "-" & indc+1
'MsgBox "Tableau(1, " & UBound(Tableau, 2) + 1 & ") = " &
Tableau(1, UBound(Tableau, 2) + 1)
Next p
End Sub
'----
Pour avoir ce résultat :
'--- Résultat de la recherche du mot "stylo"
Lib-Stylo C-1 0,10
Lib-Stylo-1 0,01
Lib-Stylo-2 0,12
Lib-Stylo-3 0,22
Xup-Stylo-Gh-1 0,15
Xx1-Stylo-1 0,05
'----- Eléments ajoutés à la fin de la liste "Tableau" : le plus grand
indice de chaque sous groupe + 1
A ) Habituellement, pour pouvoir utiliser un tableau à 2 dimensions on doit pouvoir utiliser ceci comme code : ReDim Preserve MonTableau ... pour le redimensionner au fur et à mesure que l'on désire ajouter des entrées. Cependant, cette ligne de code permet que de redimensionner seulement la dernière dimension du tableau... et c'est là que le bât blesse.
Outre la suggestion que je t'ai déjà faite sur ce fil quant à l'usage d'un tableau, tu peux contourner la problématique soulevé par d'abord faire une boucle sur le nombre de lignes que tu auras de besoin pour ton tableau. Pour ce faire la méthode "Find ... FindNext" dont je t'ai donné aussi un exemple sur ce fil est sûrement la plus rapide. Lorsque tu connais exactement la dimension de ton tableau tu fais la déclaration suivante : 'Haut de ta procédure Dim Tableau() dim NbLigne as Long 'Boucle pour déterminer le nombre d'éléments NbLigne = Ce que tu as trouvé (boucle) et tu peux ajouter un nombre quelconque de lignes si tu prévois devoir faire des ajouts 'définir les dimensions de ton tableau (Tableau à base 0 ou 1, à toi de choisir) Redim Tableau(0 to NbLignes, 0 to 1) Et maintenant, tu peux refaire ta boucle en renseignant ton tableau à partir des données que tu as.
B ) Dans la procédure que je t'ai soumise dans le module feuille, tu poses comme condition à l'exécution du code ceci : If Target.Column = 1 And Target.Count = 1 Then
Cela signifie que le code s'exécute avant que la dernière entrée soit terminée puisque les 2 autres cellules à droite ne sont pas encore renseignées....Si tu changes ta condition, tu peux dire à excel d'exécuter le code seulement si les 3 cellules d'une même ligne sont renseignées.....
C ) Perso, je n'ai pas d'autres suggestions à faire sur ta problématique. Je sais que tout ceci n'est pas facile et requiert du temps ... C'est le plaisir qui te tient en haleine !!!
;-)
"Apitos" a écrit dans le message de news:
Bonsoir,
Il est important de savoir qu'on doit préparer la liste des mots correspondants et ajouter +1 a chaque sous liste trouvée avant de l'afficher dans la ListBox.
Voila le code sur lequel je bloque : '----- Sub AjoutChoixTabList1() MsgBox "portée tab = " & UBound(Tableau, 2) For p = 1 To UBound(Tableau, 2) - 1 elem = Tableau(1, p) indc = CInt(Right$(elem, 1)) chn = Left(elem, Len(elem) - 2) For t = p + 1 To UBound(Tableau, 2) - 1 elem2 = Tableau(1, t) If elem2 <> "" And InStr(chn, elem2) <> 0 Then MsgBox "indc avant pour " & elem2 & " = " & indc If CInt(Right$(elem2, 1)) > indc Then indc = CInt(Right $(elem2, 1)) MsgBox "indc après pour " & elem2 & " = " & indc End If Next t ReDim Preserve Tableau(2, UBound(Tableau, 2) + 1) Tableau(1, UBound(Tableau, 2)) = chn & "-" & indc+1 'MsgBox "Tableau(1, " & UBound(Tableau, 2) + 1 & ") = " & Tableau(1, UBound(Tableau, 2) + 1) Next p End Sub
'----
Pour avoir ce résultat : '--- Résultat de la recherche du mot "stylo" Lib-Stylo C-1 0,10 Lib-Stylo-1 0,01 Lib-Stylo-2 0,12 Lib-Stylo-3 0,22 Xup-Stylo-Gh-1 0,15 Xx1-Stylo-1 0,05
'----- Eléments ajoutés à la fin de la liste "Tableau" : le plus grand indice de chaque sous groupe + 1
Merci michdenis de donner toujours suite à mes questions.
Apitos
Bonjour,
B ) Dans la procédure que je t'ai soumise dans le module feuille, tu poses comme condition à l'exécution du code ceci : If Target.Column = 1 And Target.Count = 1 Then
Cela signifie que le code s'exécute avant que la dernière ent rée soit terminée puisque les 2 autres cellules à droite ne so nt pas encore renseignées....Si tu changes ta condition, tu peux di re à excel d'exécuter le code seulement si les 3 cellules d'une m ême ligne sont renseignées.....
Les deux dernieres cellules seront renseignées selon la valeur de la premiere cellule.
C ) Perso, je n'ai pas d'autres suggestions à faire sur ta problémati que. Je sais que tout ceci n'est pas facile et requiert du temps . .. C'est le plaisir qui te tient en haleine !!!
;-)
Tout le plaisir et pour moi d'avoir tant d'interêt a mon post.
Grand merci à toi et nicholas.
Bonjour,
B ) Dans la procédure que je t'ai soumise dans le module feuille,
tu poses comme condition à l'exécution du code ceci :
If Target.Column = 1 And Target.Count = 1 Then
Cela signifie que le code s'exécute avant que la dernière ent rée
soit terminée puisque les 2 autres cellules à droite ne so nt pas
encore renseignées....Si tu changes ta condition, tu peux di re à
excel d'exécuter le code seulement si les 3 cellules d'une m ême
ligne sont renseignées.....
Les deux dernieres cellules seront renseignées selon la valeur de la
premiere cellule.
C ) Perso, je n'ai pas d'autres suggestions à faire sur ta problémati que.
Je sais que tout ceci n'est pas facile et requiert du temps . ..
C'est le plaisir qui te tient en haleine !!!
;-)
Tout le plaisir et pour moi d'avoir tant d'interêt a mon post.
B ) Dans la procédure que je t'ai soumise dans le module feuille, tu poses comme condition à l'exécution du code ceci : If Target.Column = 1 And Target.Count = 1 Then
Cela signifie que le code s'exécute avant que la dernière ent rée soit terminée puisque les 2 autres cellules à droite ne so nt pas encore renseignées....Si tu changes ta condition, tu peux di re à excel d'exécuter le code seulement si les 3 cellules d'une m ême ligne sont renseignées.....
Les deux dernieres cellules seront renseignées selon la valeur de la premiere cellule.
C ) Perso, je n'ai pas d'autres suggestions à faire sur ta problémati que. Je sais que tout ceci n'est pas facile et requiert du temps . .. C'est le plaisir qui te tient en haleine !!!
;-)
Tout le plaisir et pour moi d'avoir tant d'interêt a mon post.
Grand merci à toi et nicholas.
Apitos
Bonjour Michdenis et tout le forum,
Voila où j'en suis avec l'aide d'un forumeur.
Ca avance pas à pas !
Mais il y'a encore des erreurs comme : incomptabilité de type, L'indice n'appartient pas à la sélection ...
http://cjoint.com/?iokt2SJWwE
Merci.
Bonjour Michdenis et tout le forum,
Voila où j'en suis avec l'aide d'un forumeur.
Ca avance pas à pas !
Mais il y'a encore des erreurs comme : incomptabilité de type,
L'indice n'appartient pas à la sélection ...