Cela dépend du PC dont je dispose; parmi la foultitude de gratuits : LICEcap …
Sinon pour des présentations avec du son (voix off) : Camtasia (MAC) ou Camtasia Studio (PC) …
Version imprimable
Cela dépend du PC dont je dispose; parmi la foultitude de gratuits : LICEcap …
Sinon pour des présentations avec du son (voix off) : Camtasia (MAC) ou Camtasia Studio (PC) …
Merci je vais regarder
en attendant ta réponse j'ai trouvé screentogif mais il me semble lourd a l'exécution mais fonctionne très bien
Pièce jointe 200135
alors la respect entre licecap et screentogif il y a un monde
licecap et beaucoup plus simple et surtout moins lourd a l'exécution
par contre c'est vrai il manque tout les outils qu'il y a sur screentogif
nickel je garde :plusser:
Pour titiller Patrick, autrement et sans vrai apport
Le marteau pour tuer la mouche 8O mais pour chercher les valeurs consécutives identiques (à toute fin utile)
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 Function LeMin(ByVal Rng As Range, ByVal NbOcc As Long)Dim Rg As Object, A As Object, B As Object Dim Res As Double, Mn As Double Dim Tmp As String, S As String S = Space(2) Res = Application.Max(Rng) Mn = Application.Min(Rng) Tmp = S & Join(Application.Transpose(Rng), S) & S Set Rg = CreateObject("vbscript.regexp") With Rg .Global = True .Pattern = "(\D\d+\D)\1{" & NbOcc - 1 & ",}" If .Test(Tmp) Then Set A = .Execute(Tmp) For Each B In A Res = Application.Min(Split(B.Value)(1), Res) If Res = Mn Then Exit For Next B LeMin = Res End If End With Set Rg = Nothing End Function
re
Bonjour Mercatog
a ben moi qui avais honte de sortir mon outils de fainéant a chaque fois(dictionary)
la je crois que tu m'a battu:ptdr:
cela dit c'est bien tordu comme j'aime surtout que j'aime bien faire joujou avec un regex
une seule chose que je comprends pas c'est le pattern
pour le pattern ca donneCode:
1
2
3 Sub test() MsgBox LeMin(Range("A1:A25"), 3) End Sub
Code:.Pattern = "(\D\d+\D)\1{" & NbOcc - 1 & ",}"
j'ignorais que l'opérande était possible dans le regex comme caCode:.Pattern = "(\D\d+\D)\1{2}"
bon malgré l'inutilité d'une tel mécanique pour faire ce que l'on a besoins ca me plait beaucoup
confirme moi que ce qui est en rouge veut bien dire
ouCitation:
1 représente 1 fois l'ensemble qu' il précède et bien évidement le 2 entre les accolades sont le nombre de répétition demandées
j'ai bien compris ??? car j'ai des doutesCitation:
1 fois le même nombre répété 2 fois
le "(\D\d+\D)" pourrait être n'importe quel nombre
sinon juste pour le sport!!
je ré utilise le regex pour les matches comme j'ai souvent l'habitude de le faire
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 Sub test() MsgBox LeMin(Range("A1:A25"), 3) End Sub Function LeMin(ByVal Rng As Range, ByVal NbOcc As Long) Dim Rg As Object, A As Object, B As Object, z As String Dim Res As Double, Mn As Double Dim Tmp As String, S As String S = Space(2) Res = Application.Max(Rng) Mn = Application.Min(Rng) Tmp = S & Join(Application.Transpose(Rng), S) & S MsgBox Tmp Set Rg = CreateObject("vbscript.regexp") With Rg .Global = True .Pattern = "(\D\d+\D)\1{" & NbOcc - 1 & ",}" 'equivalent en dur .Pattern = "(\D\d+\D)\1{2}" If .test(Tmp) Then Set A = .Execute(Tmp) .Pattern = "(\D\d+\D)" For Each B In A z = .Execute(B)(0) Debug.Print "triplet = " & z Res = Application.Min(z, Res) If Res = Mn Then Exit For Next B LeMin = Res End If End With
Patrick bonjour
Regarde le point III-C-6. Références du Tuto de Cafeine sur les Regexp
Ce que j'ai compris: Le groupe 1 (càd celui entre parenthèse) est répété au moins 2 autres foisCode:"(\D\d+\D)\1{2,}"
J'aurais pu faire aussiCode:"(\s\d+\s)\1{2,}"
Bonjour,
bien vu mercatog !
Tu peux éventuellement éviter le Split dupuisque tu as les SubMatches de B à ta disposition :Code:Res = Application.Min(Split(B.Value)(1))
Tu peux également légèrement simplifier le pattern à condition d'utiliser une seule espace :Code:Res = Application.Min(B.SubMatches(0), Res)
et sortir directement de la fonction après ton testCode:
1
2
3 Tmp = Join(Application.Transpose(Rng), " ") & " " '... .Pattern = "(\d+\s)\1{" & NbOcc - 1 & ",}"
Mais là c'est du chipotage...Code:If Res = Mn Then
A+
Bonjour davido84,
Pour le pattern, c'est ce que j'avais au départ fais, mais prend en compte des situations non voulues
Exemple d'une liste
25, 5, 5, 1
Il prend bien le 5 comme répété 3 fois
Exact !
Comme quoi je n'aurais pas dû me contenter de ne tester que l'exemple indiqué...
A+
Je suis sûr que tu vas proposer un pattern plus joli davido84.
Désolé mais pour l'instant je n'ai pas mieux !
Si une idée me vient je te fais signe !
David
je ne voudrais pas casser l'ambiance et la fièvre créative de chacun
mais voudrais rappeler que l'auteur du post n'a pas montré ni le bout de son nez ni aucun remercîment au participants
en effet tieumav est intervenu dans le post 3 et depuis plus rien
je trouve très énervant personnellement. encore un dans ma liste noire
pour le coup moi aussi je cherche un joli pattern
ah!!! au fait
@Mercatog
a quoi sert la virgule dans ton pattern ??, ca fonctionne très bien sans
reCode:.Pattern = "(\D\d+\D)\1{" & NbOcc - 1 & ",}"
@Mercatog
je viens de m'apercevoir aussi que rept fonctionne très bien malgré ton exemple 1,222,22
Pièce jointe 200207Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Sub test2() MsgBox LeMin(Range("A1:A20")) End Sub Function LeMin(ByVal Rng As Range) Dim Tmp As String, S As String Dim Mn As Long Mn = Application.Max(Rng) Tmp = Join(Application.Transpose(Rng), ",") Debug.Print "Tmp= " & Tmp For i = 1 To Rng.Rows.Count If InStr(Tmp, Application.Rept(Rng.Cells(i) & ",", 3)) Then Mn = IIf(Rng.Cells(i) < Mn, Rng.Cells(i), Mn) Next Debug.Print "le plus petit est! " & Mn LeMin = Mn End Function
Patrick
Sans la virgule: Exactement 3 occurrences
Avec la virgule: Au moins 3 occurrences
Avec le Rept, tu as ajouté la virgule c'est pour ça.
Autre chose?
non ca va
je cherche toujours un pattern mais le tiens a définitivement clos les possibilités de meilleure écriture
ok pour la nuance de la virgule (compris)
Bonjour,
on peut éventuellement modifier le pattern pour ramener directement dans A la valeur unique et non la suite de valeurs qui se répètent :
et donc traiter directement la valeur capturée à la place de l'utilisation d'un autre pattern, d'un split ou d'un SubMatches :Code:.Pattern = "(\s\d+\s)(?=\1{" & NbOcc - 1 & "})"
On peut même ne pas utiliser B puisque cette valeur unique est la valeur de A :Code:
1
2
3
4
5 For Each B In A Res = Application.Min(B.Value, Res) If Res = Mn Then LeMin = Res: Exit Function Next B
mais cela nous oblige à abandonner la boucle For...Each donc peut-être pas intéressant.Code:
1
2
3
4
5 For i = 0 To A.Count - 1 Res = Application.Min(A(i).Value, Res) If Res = Mn Then LeMin = Res: Exit Function Next i
Inconvénient de la méthode : cela peut engendrer plus de valeurs à traiter si une suite de même valeur se répète au-delà du nombre d'occurrences indiqués dans le 2ème argument de la fonction...
A+
Bonjour,
pour éviter le petit inconvénient relevé à la fin de mon message précédent :
Par rapport à la proposition de mercatog on se retrouve avec un pattern plus complexe mais une extraction des correspondances plus directe.Code:.Pattern = "(\s\d+\s)(?=\1{" & NbOcc - 1 & "}(?!\1))"
Pas sûr que l'on y gagne au change...mais c'est surtout pour explorer le RegExp !
A+