De retour sur mpfe pour vous demander un coup de main, d'avance merci
aux experts toujours prets =E0 contribuer =E0 notre apprentissage par
l'exemple !!
Voil=E0, je vais joindre un fichier qui traduit ma demande
http://www.cijoint.fr/cjlink.php?file=3Dcj200903/cij3CsjC8I.xls
J'ai une base de donn=E9es avec en colonne A des num=E9ros de
d=E9partements, en colonne B le CA en cours et en colonne C le code du
client.
la sheet se nomme "A"
Je souhaite remplacer ces 3 colonnes par le r=E9sultat qui devrait etre
exprim=E9 comme cela:
En colonne E la liste des departements uniques, en colonne F en face
de chaque d=E9partement, la somme de tous les CA du departement et en
colonne G le nombre de code client UNIQUE pour le d=E9partement.
Le r=E9sultat est visible dans les colonnes EFG de mon fichier exemple,
Le luxe serait d'avoir dans une autre colonne la liste des
d=E9partements ou il n'y a pas de CA ....... donc tous les d=E9partements
qui ne sont pas list=E9s dans la colonne A ....
Comment faire en passant absolument par vba, sans utiliser les sous
totaux d'excel et le r=E9sultat exprim=E9 dans les colonnes EFG doit se
trouver en ABC et remplacer donc toutes les donn=E9es de la mini
base .....
Je ne m'=E9loigne pas loin de l'=E9cran, dans l'attente de vos pertinentes
r=E9ponses et suggestions
Sub Essai() Set mondico = CreateObject("Scripting.Dictionary") Set mondico2 = CreateObject("Scripting.Dictionary") For Each c In Range("A2", [A65000].End(xlUp)) mondico(Format(c.Value, "00")) = IIf(mondico.exists(Format(c.Value, "00")), mondico(Format(c.Value, "00")) + 1, 1) mondico2(Format(c.Value, "00")) = IIf(mondico2.exists(Format (c.Value, "00")), mondico2(Format(c.Value, "00")) + c.Offset(, 1), c.Offset(, 1)) Next c [j2].Resize(mondico.Count, 1) = Application.Transpose(mondico.keys) [L2].Resize(mondico.Count, 1) = Application.Transpose(mondico.items) [K2].Resize(mondico2.Count, 1) = Application.Transpose (mondico2.items) End Sub
http://cjoint.com/?dxmtZeWhIg
JB http://boisgontierjacques.free.fr
On 21 mar, 11:42, wrote:
Bonjour à vous,
De retour sur mpfe pour vous demander un coup de main, d'avance merci aux experts toujours prets à contribuer à notre apprentissage par l'exemple !!
Voilà, je vais joindre un fichier qui traduit ma demandehttp://www.cijo int.fr/cjlink.php?file=cj200903/cij3CsjC8I.xls
J'ai une base de données avec en colonne A des numéros de départements, en colonne B le CA en cours et en colonne C le code du client. la sheet se nomme "A"
Je souhaite remplacer ces 3 colonnes par le résultat qui devrait etre exprimé comme cela:
En colonne E la liste des departements uniques, en colonne F en face de chaque département, la somme de tous les CA du departement et en colonne G le nombre de code client UNIQUE pour le département.
Le résultat est visible dans les colonnes EFG de mon fichier exemple,
Le luxe serait d'avoir dans une autre colonne la liste des départements ou il n'y a pas de CA ....... donc tous les départements qui ne sont pas listés dans la colonne A ....
Comment faire en passant absolument par vba, sans utiliser les sous totaux d'excel et le résultat exprimé dans les colonnes EFG doit se trouver en ABC et remplacer donc toutes les données de la mini base .....
Je ne m'éloigne pas loin de l'écran, dans l'attente de vos pertinente s réponses et suggestions
Merci
Syl VBA
Bonjour,
Sub Essai()
Set mondico = CreateObject("Scripting.Dictionary")
Set mondico2 = CreateObject("Scripting.Dictionary")
For Each c In Range("A2", [A65000].End(xlUp))
mondico(Format(c.Value, "00")) = IIf(mondico.exists(Format(c.Value,
"00")), mondico(Format(c.Value, "00")) + 1, 1)
mondico2(Format(c.Value, "00")) = IIf(mondico2.exists(Format
(c.Value, "00")), mondico2(Format(c.Value, "00")) + c.Offset(, 1),
c.Offset(, 1))
Next c
[j2].Resize(mondico.Count, 1) = Application.Transpose(mondico.keys)
[L2].Resize(mondico.Count, 1) = Application.Transpose(mondico.items)
[K2].Resize(mondico2.Count, 1) = Application.Transpose
(mondico2.items)
End Sub
http://cjoint.com/?dxmtZeWhIg
JB
http://boisgontierjacques.free.fr
On 21 mar, 11:42, sylvie.lauren...@wanadoo.fr wrote:
Bonjour à vous,
De retour sur mpfe pour vous demander un coup de main, d'avance merci
aux experts toujours prets à contribuer à notre apprentissage par
l'exemple !!
Voilà, je vais joindre un fichier qui traduit ma demandehttp://www.cijo int.fr/cjlink.php?file=cj200903/cij3CsjC8I.xls
J'ai une base de données avec en colonne A des numéros de
départements, en colonne B le CA en cours et en colonne C le code du
client.
la sheet se nomme "A"
Je souhaite remplacer ces 3 colonnes par le résultat qui devrait etre
exprimé comme cela:
En colonne E la liste des departements uniques, en colonne F en face
de chaque département, la somme de tous les CA du departement et en
colonne G le nombre de code client UNIQUE pour le département.
Le résultat est visible dans les colonnes EFG de mon fichier exemple,
Le luxe serait d'avoir dans une autre colonne la liste des
départements ou il n'y a pas de CA ....... donc tous les départements
qui ne sont pas listés dans la colonne A ....
Comment faire en passant absolument par vba, sans utiliser les sous
totaux d'excel et le résultat exprimé dans les colonnes EFG doit se
trouver en ABC et remplacer donc toutes les données de la mini
base .....
Je ne m'éloigne pas loin de l'écran, dans l'attente de vos pertinente s
réponses et suggestions
Sub Essai() Set mondico = CreateObject("Scripting.Dictionary") Set mondico2 = CreateObject("Scripting.Dictionary") For Each c In Range("A2", [A65000].End(xlUp)) mondico(Format(c.Value, "00")) = IIf(mondico.exists(Format(c.Value, "00")), mondico(Format(c.Value, "00")) + 1, 1) mondico2(Format(c.Value, "00")) = IIf(mondico2.exists(Format (c.Value, "00")), mondico2(Format(c.Value, "00")) + c.Offset(, 1), c.Offset(, 1)) Next c [j2].Resize(mondico.Count, 1) = Application.Transpose(mondico.keys) [L2].Resize(mondico.Count, 1) = Application.Transpose(mondico.items) [K2].Resize(mondico2.Count, 1) = Application.Transpose (mondico2.items) End Sub
http://cjoint.com/?dxmtZeWhIg
JB http://boisgontierjacques.free.fr
On 21 mar, 11:42, wrote:
Bonjour à vous,
De retour sur mpfe pour vous demander un coup de main, d'avance merci aux experts toujours prets à contribuer à notre apprentissage par l'exemple !!
Voilà, je vais joindre un fichier qui traduit ma demandehttp://www.cijo int.fr/cjlink.php?file=cj200903/cij3CsjC8I.xls
J'ai une base de données avec en colonne A des numéros de départements, en colonne B le CA en cours et en colonne C le code du client. la sheet se nomme "A"
Je souhaite remplacer ces 3 colonnes par le résultat qui devrait etre exprimé comme cela:
En colonne E la liste des departements uniques, en colonne F en face de chaque département, la somme de tous les CA du departement et en colonne G le nombre de code client UNIQUE pour le département.
Le résultat est visible dans les colonnes EFG de mon fichier exemple,
Le luxe serait d'avoir dans une autre colonne la liste des départements ou il n'y a pas de CA ....... donc tous les départements qui ne sont pas listés dans la colonne A ....
Comment faire en passant absolument par vba, sans utiliser les sous totaux d'excel et le résultat exprimé dans les colonnes EFG doit se trouver en ABC et remplacer donc toutes les données de la mini base .....
Je ne m'éloigne pas loin de l'écran, dans l'attente de vos pertinente s réponses et suggestions
Merci
Syl VBA
sylvie.laurent82
Bonjour JB,
Merci une fois de plus de "voler" à ma rescousse !! Le code est court et cela donne le résultat escompté.
Par contre je ne comprends pas le "mondico", je vais chercher sur ton site, pour comprendre cette voie ...
Bravo pour cette aide rapide, pour lister les départements absents faut il partir dans la même direction ?
En tout cas, longue vie à ce forum et a ses contributeurs, je vais juste maintenant passer plusieurs heures à essayer de "comprendre" cette nouvelle facon de coder pour moi, car j'essaye toujours de comprendre et de pouvoir avancer un peu plus toute seule la prochaine fois ...
Un jour je reviendrai pour aider les autres, c'est promis !!
Merci, si pour la version Luxe on peut m'aider, je suis preneuse bien sur,
A tout a l'heure
SYLVBA qui vous remercie bien fort !!!
Bonjour JB,
Merci une fois de plus de "voler" à ma rescousse !!
Le code est court et cela donne le résultat escompté.
Par contre je ne comprends pas le "mondico", je vais chercher sur ton
site, pour comprendre cette voie ...
Bravo pour cette aide rapide, pour lister les départements absents
faut il partir dans la même direction ?
En tout cas, longue vie à ce forum et a ses contributeurs, je vais
juste maintenant passer plusieurs heures à essayer de "comprendre"
cette nouvelle facon de coder pour moi, car j'essaye toujours de
comprendre et de pouvoir avancer un peu plus toute seule la prochaine
fois ...
Un jour je reviendrai pour aider les autres, c'est promis !!
Merci, si pour la version Luxe on peut m'aider, je suis preneuse bien
sur,
Merci une fois de plus de "voler" à ma rescousse !! Le code est court et cela donne le résultat escompté.
Par contre je ne comprends pas le "mondico", je vais chercher sur ton site, pour comprendre cette voie ...
Bravo pour cette aide rapide, pour lister les départements absents faut il partir dans la même direction ?
En tout cas, longue vie à ce forum et a ses contributeurs, je vais juste maintenant passer plusieurs heures à essayer de "comprendre" cette nouvelle facon de coder pour moi, car j'essaye toujours de comprendre et de pouvoir avancer un peu plus toute seule la prochaine fois ...
Un jour je reviendrai pour aider les autres, c'est promis !!
Merci, si pour la version Luxe on peut m'aider, je suis preneuse bien sur,
A tout a l'heure
SYLVBA qui vous remercie bien fort !!!
sylvie.laurent82
Oups !!!!!!!!!!!!!
La dernière colonne du code de JB ne donne pas le nombre de client UNIQUE mais le total des codes clients y compris les doublons, comment modifier le code pour avoir en face du département 27 la valeur 1 et pas 5 car il n'y a qu'un seul client qui a en fait 5 fois une commande (un seule code client le 27008)
une modif du chef est elle possible ?
Merci et à desuite
SYLVBA
Oups !!!!!!!!!!!!!
La dernière colonne du code de JB ne donne pas le nombre de client
UNIQUE mais le total des codes clients y compris les doublons, comment
modifier le code pour avoir en face du département 27 la valeur 1 et
pas 5 car il n'y a qu'un seul client qui a en fait 5 fois une commande
(un seule code client le 27008)
La dernière colonne du code de JB ne donne pas le nombre de client UNIQUE mais le total des codes clients y compris les doublons, comment modifier le code pour avoir en face du département 27 la valeur 1 et pas 5 car il n'y a qu'un seul client qui a en fait 5 fois une commande (un seule code client le 27008)
une modif du chef est elle possible ?
Merci et à desuite
SYLVBA
JB
Totaux par clients Sub Essai2() Dim a(), b(), c() [A1].CurrentRegion.Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range( _ "C2"), Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase _ :úlse, Orientation:=xlTopToBottom, DataOption1:=xlSortTextAsNumbers, _ DataOption2:=xlSortTextAsNumbers i = 2 k = 0 Do While Cells(i, 1) <> "" mdept = Cells(i, 1) k = k + 1 ReDim Preserve a(1 To k) ReDim Preserve b(1 To k) ReDim Preserve c(1 To k) a(k) = mdept Do While Cells(i, 1) = mdept mclient = Cells(i, 3) c(k) = c(k) + 1 Do While Cells(i, 3) = mclient b(k) = b(k) + Cells(i, 2) i = i + 1 Loop Loop Loop [E2].Resize(UBound(a), 1).Value = Application.Transpose(a) [F2].Resize(UBound(b), 1).Value = Application.Transpose(b) [g2].Resize(UBound(c), 1).Value = Application.Transpose(c) End Sub
http://cjoint.com/?dxnAJhIyYa
JB
On 21 mar, 12:39, wrote:
Oups !!!!!!!!!!!!!
La dernière colonne du code de JB ne donne pas le nombre de client UNIQUE mais le total des codes clients y compris les doublons, comment modifier le code pour avoir en face du département 27 la valeur 1 et pas 5 car il n'y a qu'un seul client qui a en fait 5 fois une commande (un seule code client le 27008)
une modif du chef est elle possible ?
Merci et à desuite
SYLVBA
Totaux par clients
Sub Essai2()
Dim a(), b(), c()
[A1].CurrentRegion.Sort Key1:=Range("A2"), Order1:=xlAscending,
Key2:=Range( _
"C2"), Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1,
MatchCase _
:=False, Orientation:=xlTopToBottom,
DataOption1:=xlSortTextAsNumbers, _
DataOption2:=xlSortTextAsNumbers
i = 2
k = 0
Do While Cells(i, 1) <> ""
mdept = Cells(i, 1)
k = k + 1
ReDim Preserve a(1 To k)
ReDim Preserve b(1 To k)
ReDim Preserve c(1 To k)
a(k) = mdept
Do While Cells(i, 1) = mdept
mclient = Cells(i, 3)
c(k) = c(k) + 1
Do While Cells(i, 3) = mclient
b(k) = b(k) + Cells(i, 2)
i = i + 1
Loop
Loop
Loop
[E2].Resize(UBound(a), 1).Value = Application.Transpose(a)
[F2].Resize(UBound(b), 1).Value = Application.Transpose(b)
[g2].Resize(UBound(c), 1).Value = Application.Transpose(c)
End Sub
http://cjoint.com/?dxnAJhIyYa
JB
On 21 mar, 12:39, sylvie.lauren...@wanadoo.fr wrote:
Oups !!!!!!!!!!!!!
La dernière colonne du code de JB ne donne pas le nombre de client
UNIQUE mais le total des codes clients y compris les doublons, comment
modifier le code pour avoir en face du département 27 la valeur 1 et
pas 5 car il n'y a qu'un seul client qui a en fait 5 fois une commande
(un seule code client le 27008)
Totaux par clients Sub Essai2() Dim a(), b(), c() [A1].CurrentRegion.Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range( _ "C2"), Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase _ :úlse, Orientation:=xlTopToBottom, DataOption1:=xlSortTextAsNumbers, _ DataOption2:=xlSortTextAsNumbers i = 2 k = 0 Do While Cells(i, 1) <> "" mdept = Cells(i, 1) k = k + 1 ReDim Preserve a(1 To k) ReDim Preserve b(1 To k) ReDim Preserve c(1 To k) a(k) = mdept Do While Cells(i, 1) = mdept mclient = Cells(i, 3) c(k) = c(k) + 1 Do While Cells(i, 3) = mclient b(k) = b(k) + Cells(i, 2) i = i + 1 Loop Loop Loop [E2].Resize(UBound(a), 1).Value = Application.Transpose(a) [F2].Resize(UBound(b), 1).Value = Application.Transpose(b) [g2].Resize(UBound(c), 1).Value = Application.Transpose(c) End Sub
http://cjoint.com/?dxnAJhIyYa
JB
On 21 mar, 12:39, wrote:
Oups !!!!!!!!!!!!!
La dernière colonne du code de JB ne donne pas le nombre de client UNIQUE mais le total des codes clients y compris les doublons, comment modifier le code pour avoir en face du département 27 la valeur 1 et pas 5 car il n'y a qu'un seul client qui a en fait 5 fois une commande (un seule code client le 27008)
une modif du chef est elle possible ?
Merci et à desuite
SYLVBA
sylvie.laurent82
Bravo JB,
C'est exactement ce que je souhaitais,
Je vais quand même essayer de comprendre la méthode (nouvelle pour moi) du mondico ......
Merci encore de ta contribution toujours pertinente,
je continue à travailler, et reviendrai sans doute .... sous peu
Bon samedi et à peut etre à bientot
SYLVBA
Bravo JB,
C'est exactement ce que je souhaitais,
Je vais quand même essayer de comprendre la méthode (nouvelle pour
moi) du mondico ......
Merci encore de ta contribution toujours pertinente,
je continue à travailler, et reviendrai sans doute .... sous peu
Je vais quand même essayer de comprendre la méthode (nouvelle pour moi) du mondico ......
Merci encore de ta contribution toujours pertinente,
je continue à travailler, et reviendrai sans doute .... sous peu
Bon samedi et à peut etre à bientot
SYLVBA
Hervé
Bonsoir Sylvie et Jacques,
Je me permet de mettre mon grain de sel ;o)
Sylvie , le dictionnaire est un peu comme les collections, il interdit les doublons puisqu'il nécessite une clé et celle-ci doit être unique. Un exemple avec une collection (exécuter la proc "Appel" pour tester) :
Sub NbAleatoire(Optional Nombre As Integer = 200, Optional Max As Long = 100)
Dim Col As New Collection Dim I As Integer Dim Result As Integer
'Initialise le générateur de nombres aléatoires Randomize
'si nombre est inférieur à Max + 100 'Défini Nombre à Max + 100 pour augmenter 'les possibilités If Nombre < Max + 100 Then Nombre = Max + 100
'évite les erreurs des doublons de clés On Error Resume Next
'boucle jusqu'à avoir le nombre d'éléments 'voulu par Max Do Result = Int((Nombre * Rnd) + 1) Col.Add Result, CStr(Result) Loop While Col.Count <> Max
'réinitialise le gestionnaire à zéro On Error GoTo 0
'inscrit le résultat dans les cellules 'de la colonnes A For I = 1 To Max Cells(I, 1) = Col(I) Next I
'effectue un tri croissant Range(Cells(1, 1), Cells(I, 1)).Sort Range("A1"), xlAscending
'libère la mémoire Set Col = Nothing
End Sub
Sub Appel() NbAleatoire 18, 100 End Sub
Hervé.
a écrit dans le message de news: Bravo JB,
C'est exactement ce que je souhaitais,
Je vais quand même essayer de comprendre la méthode (nouvelle pour moi) du mondico ......
Merci encore de ta contribution toujours pertinente,
je continue à travailler, et reviendrai sans doute .... sous peu
Bon samedi et à peut etre à bientot
SYLVBA
Bonsoir Sylvie et Jacques,
Je me permet de mettre mon grain de sel ;o)
Sylvie , le dictionnaire est un peu comme les collections, il interdit les
doublons puisqu'il nécessite une clé et celle-ci doit être unique. Un
exemple avec une collection (exécuter la proc "Appel" pour tester) :
Sub NbAleatoire(Optional Nombre As Integer = 200, Optional Max As Long =
100)
Dim Col As New Collection
Dim I As Integer
Dim Result As Integer
'Initialise le générateur de nombres aléatoires
Randomize
'si nombre est inférieur à Max + 100
'Défini Nombre à Max + 100 pour augmenter
'les possibilités
If Nombre < Max + 100 Then Nombre = Max + 100
'évite les erreurs des doublons de clés
On Error Resume Next
'boucle jusqu'à avoir le nombre d'éléments
'voulu par Max
Do
Result = Int((Nombre * Rnd) + 1)
Col.Add Result, CStr(Result)
Loop While Col.Count <> Max
'réinitialise le gestionnaire à zéro
On Error GoTo 0
'inscrit le résultat dans les cellules
'de la colonnes A
For I = 1 To Max
Cells(I, 1) = Col(I)
Next I
'effectue un tri croissant
Range(Cells(1, 1), Cells(I, 1)).Sort Range("A1"), xlAscending
'libère la mémoire
Set Col = Nothing
End Sub
Sub Appel()
NbAleatoire 18, 100
End Sub
Hervé.
<sylvie.laurent82@wanadoo.fr> a écrit dans le message de
news:46dc7f1a-5c73-41e6-8224-833be4ac292a@v39g2000yqm.googlegroups.com...
Bravo JB,
C'est exactement ce que je souhaitais,
Je vais quand même essayer de comprendre la méthode (nouvelle pour
moi) du mondico ......
Merci encore de ta contribution toujours pertinente,
je continue à travailler, et reviendrai sans doute .... sous peu
Sylvie , le dictionnaire est un peu comme les collections, il interdit les doublons puisqu'il nécessite une clé et celle-ci doit être unique. Un exemple avec une collection (exécuter la proc "Appel" pour tester) :
Sub NbAleatoire(Optional Nombre As Integer = 200, Optional Max As Long = 100)
Dim Col As New Collection Dim I As Integer Dim Result As Integer
'Initialise le générateur de nombres aléatoires Randomize
'si nombre est inférieur à Max + 100 'Défini Nombre à Max + 100 pour augmenter 'les possibilités If Nombre < Max + 100 Then Nombre = Max + 100
'évite les erreurs des doublons de clés On Error Resume Next
'boucle jusqu'à avoir le nombre d'éléments 'voulu par Max Do Result = Int((Nombre * Rnd) + 1) Col.Add Result, CStr(Result) Loop While Col.Count <> Max
'réinitialise le gestionnaire à zéro On Error GoTo 0
'inscrit le résultat dans les cellules 'de la colonnes A For I = 1 To Max Cells(I, 1) = Col(I) Next I
'effectue un tri croissant Range(Cells(1, 1), Cells(I, 1)).Sort Range("A1"), xlAscending
'libère la mémoire Set Col = Nothing
End Sub
Sub Appel() NbAleatoire 18, 100 End Sub
Hervé.
a écrit dans le message de news: Bravo JB,
C'est exactement ce que je souhaitais,
Je vais quand même essayer de comprendre la méthode (nouvelle pour moi) du mondico ......
Merci encore de ta contribution toujours pertinente,
je continue à travailler, et reviendrai sans doute .... sous peu
Bon samedi et à peut etre à bientot
SYLVBA
JB
L'objet Collection est très lent. Il ne pas faut pas l'utiliser.
JB On 21 mar, 20:14, Hervé wrote:
Bonsoir Sylvie et Jacques,
Je me permet de mettre mon grain de sel ;o)
Sylvie , le dictionnaire est un peu comme les collections, il interdit le s doublons puisqu'il nécessite une clé et celle-ci doit être unique. Un exemple avec une collection (exécuter la proc "Appel" pour tester) :
Sub NbAleatoire(Optional Nombre As Integer = 200, Optional Max As Long = 100)
Dim Col As New Collection Dim I As Integer Dim Result As Integer
'Initialise le générateur de nombres aléatoires Randomize
'si nombre est inférieur à Max + 100 'Défini Nombre à Max + 100 pour augmenter 'les possibilités If Nombre < Max + 100 Then Nombre = Max + 100
'évite les erreurs des doublons de clés On Error Resume Next
'boucle jusqu'à avoir le nombre d'éléments 'voulu par Max Do Result = Int((Nombre * Rnd) + 1) Col.Add Result, CStr(Result) Loop While Col.Count <> Max
'réinitialise le gestionnaire à zéro On Error GoTo 0
'inscrit le résultat dans les cellules 'de la colonnes A For I = 1 To Max Cells(I, 1) = Col(I) Next I
'effectue un tri croissant Range(Cells(1, 1), Cells(I, 1)).Sort Range("A1"), xlAscending
'libère la mémoire Set Col = Nothing
End Sub
Sub Appel() NbAleatoire 18, 100 End Sub
Hervé.
a écrit dans le message denews:46dc7f1a-5 Bravo JB,
C'est exactement ce que je souhaitais,
Je vais quand même essayer de comprendre la méthode (nouvelle pour moi) du mondico ......
Merci encore de ta contribution toujours pertinente,
je continue à travailler, et reviendrai sans doute .... sous peu
Bon samedi et à peut etre à bientot
SYLVBA
L'objet Collection est très lent. Il ne pas faut pas l'utiliser.
JB
On 21 mar, 20:14, Hervé <mhsi...@orange.fr> wrote:
Bonsoir Sylvie et Jacques,
Je me permet de mettre mon grain de sel ;o)
Sylvie , le dictionnaire est un peu comme les collections, il interdit le s
doublons puisqu'il nécessite une clé et celle-ci doit être unique. Un
exemple avec une collection (exécuter la proc "Appel" pour tester) :
Sub NbAleatoire(Optional Nombre As Integer = 200, Optional Max As Long =
100)
Dim Col As New Collection
Dim I As Integer
Dim Result As Integer
'Initialise le générateur de nombres aléatoires
Randomize
'si nombre est inférieur à Max + 100
'Défini Nombre à Max + 100 pour augmenter
'les possibilités
If Nombre < Max + 100 Then Nombre = Max + 100
'évite les erreurs des doublons de clés
On Error Resume Next
'boucle jusqu'à avoir le nombre d'éléments
'voulu par Max
Do
Result = Int((Nombre * Rnd) + 1)
Col.Add Result, CStr(Result)
Loop While Col.Count <> Max
'réinitialise le gestionnaire à zéro
On Error GoTo 0
'inscrit le résultat dans les cellules
'de la colonnes A
For I = 1 To Max
Cells(I, 1) = Col(I)
Next I
'effectue un tri croissant
Range(Cells(1, 1), Cells(I, 1)).Sort Range("A1"), xlAscending
'libère la mémoire
Set Col = Nothing
End Sub
Sub Appel()
NbAleatoire 18, 100
End Sub
Hervé.
<sylvie.lauren...@wanadoo.fr> a écrit dans le message denews:46dc7f1a-5 c73-41e6-8224-833be4ac292a@v39g2000yqm.googlegroups.com...
Bravo JB,
C'est exactement ce que je souhaitais,
Je vais quand même essayer de comprendre la méthode (nouvelle pour
moi) du mondico ......
Merci encore de ta contribution toujours pertinente,
je continue à travailler, et reviendrai sans doute .... sous peu
L'objet Collection est très lent. Il ne pas faut pas l'utiliser.
JB On 21 mar, 20:14, Hervé wrote:
Bonsoir Sylvie et Jacques,
Je me permet de mettre mon grain de sel ;o)
Sylvie , le dictionnaire est un peu comme les collections, il interdit le s doublons puisqu'il nécessite une clé et celle-ci doit être unique. Un exemple avec une collection (exécuter la proc "Appel" pour tester) :
Sub NbAleatoire(Optional Nombre As Integer = 200, Optional Max As Long = 100)
Dim Col As New Collection Dim I As Integer Dim Result As Integer
'Initialise le générateur de nombres aléatoires Randomize
'si nombre est inférieur à Max + 100 'Défini Nombre à Max + 100 pour augmenter 'les possibilités If Nombre < Max + 100 Then Nombre = Max + 100
'évite les erreurs des doublons de clés On Error Resume Next
'boucle jusqu'à avoir le nombre d'éléments 'voulu par Max Do Result = Int((Nombre * Rnd) + 1) Col.Add Result, CStr(Result) Loop While Col.Count <> Max
'réinitialise le gestionnaire à zéro On Error GoTo 0
'inscrit le résultat dans les cellules 'de la colonnes A For I = 1 To Max Cells(I, 1) = Col(I) Next I
'effectue un tri croissant Range(Cells(1, 1), Cells(I, 1)).Sort Range("A1"), xlAscending
'libère la mémoire Set Col = Nothing
End Sub
Sub Appel() NbAleatoire 18, 100 End Sub
Hervé.
a écrit dans le message denews:46dc7f1a-5 Bravo JB,
C'est exactement ce que je souhaitais,
Je vais quand même essayer de comprendre la méthode (nouvelle pour moi) du mondico ......
Merci encore de ta contribution toujours pertinente,
je continue à travailler, et reviendrai sans doute .... sous peu
Bon samedi et à peut etre à bientot
SYLVBA
LSteph
Bonjour,
Si on utilise Option Explicit et que l'on déclare correctement ses variables... une collection ne doit pas effrayer! En l'occurence c'est un cas d'école qu'a choisi Hervé pour l'explication. Encore faut-il comprendre !
Salutations.
-- lSteph
JB a écrit :
L'objet Collection est très lent. Il ne pas faut pas l'utiliser.
JB On 21 mar, 20:14, Hervé wrote:
Bonsoir Sylvie et Jacques,
Je me permet de mettre mon grain de sel ;o)
Sylvie , le dictionnaire est un peu comme les collections, il interdit les doublons puisqu'il nécessite une clé et celle-ci doit être unique. Un exemple avec une collection (exécuter la proc "Appel" pour tester) :
Sub NbAleatoire(Optional Nombre As Integer = 200, Optional Max As Long >> 100)
Dim Col As New Collection Dim I As Integer Dim Result As Integer
'Initialise le générateur de nombres aléatoires Randomize
'si nombre est inférieur à Max + 100 'Défini Nombre à Max + 100 pour augmenter 'les possibilités If Nombre < Max + 100 Then Nombre = Max + 100
'évite les erreurs des doublons de clés On Error Resume Next
'boucle jusqu'à avoir le nombre d'éléments 'voulu par Max Do Result = Int((Nombre * Rnd) + 1) Col.Add Result, CStr(Result) Loop While Col.Count <> Max
'réinitialise le gestionnaire à zéro On Error GoTo 0
'inscrit le résultat dans les cellules 'de la colonnes A For I = 1 To Max Cells(I, 1) = Col(I) Next I
'effectue un tri croissant Range(Cells(1, 1), Cells(I, 1)).Sort Range("A1"), xlAscending
'libère la mémoire Set Col = Nothing
End Sub
Sub Appel() NbAleatoire 18, 100 End Sub
Hervé.
a écrit dans le message denews: Bravo JB,
C'est exactement ce que je souhaitais,
Je vais quand même essayer de comprendre la méthode (nouvelle pour moi) du mondico ......
Merci encore de ta contribution toujours pertinente,
je continue à travailler, et reviendrai sans doute .... sous peu
Bon samedi et à peut etre à bientot
SYLVBA
Bonjour,
Si on utilise Option Explicit et que l'on déclare correctement ses
variables...
une collection ne doit pas effrayer!
En l'occurence c'est un cas d'école qu'a choisi Hervé pour l'explication.
Encore faut-il comprendre !
Salutations.
--
lSteph
JB a écrit :
L'objet Collection est très lent. Il ne pas faut pas l'utiliser.
JB
On 21 mar, 20:14, Hervé <mhsi...@orange.fr> wrote:
Bonsoir Sylvie et Jacques,
Je me permet de mettre mon grain de sel ;o)
Sylvie , le dictionnaire est un peu comme les collections, il interdit les
doublons puisqu'il nécessite une clé et celle-ci doit être unique. Un
exemple avec une collection (exécuter la proc "Appel" pour tester) :
Sub NbAleatoire(Optional Nombre As Integer = 200, Optional Max As Long >> 100)
Dim Col As New Collection
Dim I As Integer
Dim Result As Integer
'Initialise le générateur de nombres aléatoires
Randomize
'si nombre est inférieur à Max + 100
'Défini Nombre à Max + 100 pour augmenter
'les possibilités
If Nombre < Max + 100 Then Nombre = Max + 100
'évite les erreurs des doublons de clés
On Error Resume Next
'boucle jusqu'à avoir le nombre d'éléments
'voulu par Max
Do
Result = Int((Nombre * Rnd) + 1)
Col.Add Result, CStr(Result)
Loop While Col.Count <> Max
'réinitialise le gestionnaire à zéro
On Error GoTo 0
'inscrit le résultat dans les cellules
'de la colonnes A
For I = 1 To Max
Cells(I, 1) = Col(I)
Next I
'effectue un tri croissant
Range(Cells(1, 1), Cells(I, 1)).Sort Range("A1"), xlAscending
'libère la mémoire
Set Col = Nothing
End Sub
Sub Appel()
NbAleatoire 18, 100
End Sub
Hervé.
<sylvie.lauren...@wanadoo.fr> a écrit dans le message denews:46dc7f1a-5c73-41e6-8224-833be4ac292a@v39g2000yqm.googlegroups.com...
Bravo JB,
C'est exactement ce que je souhaitais,
Je vais quand même essayer de comprendre la méthode (nouvelle pour
moi) du mondico ......
Merci encore de ta contribution toujours pertinente,
je continue à travailler, et reviendrai sans doute .... sous peu
Si on utilise Option Explicit et que l'on déclare correctement ses variables... une collection ne doit pas effrayer! En l'occurence c'est un cas d'école qu'a choisi Hervé pour l'explication. Encore faut-il comprendre !
Salutations.
-- lSteph
JB a écrit :
L'objet Collection est très lent. Il ne pas faut pas l'utiliser.
JB On 21 mar, 20:14, Hervé wrote:
Bonsoir Sylvie et Jacques,
Je me permet de mettre mon grain de sel ;o)
Sylvie , le dictionnaire est un peu comme les collections, il interdit les doublons puisqu'il nécessite une clé et celle-ci doit être unique. Un exemple avec une collection (exécuter la proc "Appel" pour tester) :
Sub NbAleatoire(Optional Nombre As Integer = 200, Optional Max As Long >> 100)
Dim Col As New Collection Dim I As Integer Dim Result As Integer
'Initialise le générateur de nombres aléatoires Randomize
'si nombre est inférieur à Max + 100 'Défini Nombre à Max + 100 pour augmenter 'les possibilités If Nombre < Max + 100 Then Nombre = Max + 100
'évite les erreurs des doublons de clés On Error Resume Next
'boucle jusqu'à avoir le nombre d'éléments 'voulu par Max Do Result = Int((Nombre * Rnd) + 1) Col.Add Result, CStr(Result) Loop While Col.Count <> Max
'réinitialise le gestionnaire à zéro On Error GoTo 0
'inscrit le résultat dans les cellules 'de la colonnes A For I = 1 To Max Cells(I, 1) = Col(I) Next I
'effectue un tri croissant Range(Cells(1, 1), Cells(I, 1)).Sort Range("A1"), xlAscending
'libère la mémoire Set Col = Nothing
End Sub
Sub Appel() NbAleatoire 18, 100 End Sub
Hervé.
a écrit dans le message denews: Bravo JB,
C'est exactement ce que je souhaitais,
Je vais quand même essayer de comprendre la méthode (nouvelle pour moi) du mondico ......
Merci encore de ta contribution toujours pertinente,
je continue à travailler, et reviendrai sans doute .... sous peu
Bon samedi et à peut etre à bientot
SYLVBA
sylvie.laurent82
Merci à Hervé pour cette explication, je planche, je planche .....
entre le site de JB et cette explication, je devrai etre capable (je ne suis pas blonde !!!) de comprendre et d'appliquer une partie des possibilités de cette nouvelle façon de faire !!
dans ma question d'origine, je souhaitai aussi lister dans une autre colonne le départements absents (ceux donc il n'y aurait pas de CA)
un for i = 1 to 95
'ici un code qui compare les département de 1 à 95 avec ceux présents dans la colonne A et aui donne ceux qui ne le sont pas ???
next i 'ici écrire dans la colonne F par exemple.
j'ai utilisé le code de JB avec les 3 loop pour info, comment faire une version "deluxe" avec l'indication des départements à 0 ?
En tout cas merci encore à vous, c'est toujours un plaisir et en plus on finit par comprendre !!!
SYLVBA
Merci à Hervé pour cette explication, je planche, je planche .....
entre le site de JB et cette explication, je devrai etre capable (je
ne suis pas blonde !!!) de comprendre et d'appliquer une partie des
possibilités de cette nouvelle façon de faire !!
dans ma question d'origine, je souhaitai aussi lister dans une autre
colonne le départements absents (ceux donc il n'y aurait pas de CA)
un for i = 1 to 95
'ici un code qui compare les département de 1 à 95 avec ceux présents
dans la colonne A et aui donne ceux qui ne le sont pas ???
next i
'ici écrire dans la colonne F par exemple.
j'ai utilisé le code de JB avec les 3 loop pour info, comment faire
une version "deluxe" avec l'indication des départements à 0 ?
En tout cas merci encore à vous, c'est toujours un plaisir et en plus
on finit par comprendre !!!
Merci à Hervé pour cette explication, je planche, je planche .....
entre le site de JB et cette explication, je devrai etre capable (je ne suis pas blonde !!!) de comprendre et d'appliquer une partie des possibilités de cette nouvelle façon de faire !!
dans ma question d'origine, je souhaitai aussi lister dans une autre colonne le départements absents (ceux donc il n'y aurait pas de CA)
un for i = 1 to 95
'ici un code qui compare les département de 1 à 95 avec ceux présents dans la colonne A et aui donne ceux qui ne le sont pas ???
next i 'ici écrire dans la colonne F par exemple.
j'ai utilisé le code de JB avec les 3 loop pour info, comment faire une version "deluxe" avec l'indication des départements à 0 ?
En tout cas merci encore à vous, c'est toujours un plaisir et en plus on finit par comprendre !!!