Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Beosin d'aide pour intégrer un algorithme au niveau d'un formula ir

Aucune réponse
Avatar
briochette
Bonjour

J'ai un champ qui va contenir un numér de greffe et nous avons un algoritme
nous permettante de savoir si ce numéro de greffe est bon ou non.
L'algorithme est le suisvant :

voici un exemple de greffe : 200-12-049338-933
2001204933893 : on extrait les chiffres impairs (ayant une place impaire
dans ce chiffre) sans prendre le dernier chiffre qui sert seulement à la
vérification. Les chiffres sont donc 2 0 2 4 3 8 3 , on doit réunir ces
chiffres sans les espaces et multipliez le nombre obtneu par deux ==> 2024383
* 2 = 4048766 ==> on doit ensuite additionner les chiffres ensemble
4+0+4+8+7+6+6 = 35
On reprend notre numéro de greffe (toujours sans le dernier chiffre) est on
extrait les chiffres pairs (ayant une place paire dans ce chiffre). Les
chiffres sont donc 0 1 0 9 3 9. On fait le même exercie que précedemment :
0+1+0+9+3+9 = 22.

Ensuite on prend les deux résultats : 22 + 35 = 57 auquel on additionne le
dernier chiffre de notre numéro de greffe non utilisé + 3 = 60 pour donner un
nombre divisible par 10e nombre (soit par 10).

Je suis bloquée pour écride le code, je sais que je dois utiliser
Public Function ValideGref(strGref As String) As Boolean
Dim dblNbImpair As Double
ete nsuite mettre tout ce qu'il faut dans:
'mid(strgref,,)
'& concaténation
'cdbl()
'5 Mod 10
End Function

Mais je coince... Need some help

D'avance merci beaucoup

Briochette

3 réponses

Avatar
Patrice Henrio
Option Explicit

Private Sub Command1_Click()
Dim greffe As String, greffon As String, impairs As Long, pairs As Long,
valeur As Long
greffe = "200-12-049338-933"
greffon = alleger(greffe)
impairs = 2 * ValeurImPaire(greffon)
pairs = ValeurPaire(greffon)
valeur = sommechiffres(impairs) + sommechiffres(pairs) + Right(greffe,
1)
Debug.Print "greffon : " & greffon & vbCrLf
Debug.Print "Chiffres impairs : " & ValeurImPaire(greffon) & vbCrLf
Debug.Print "somme des impairs : " & sommechiffres(impairs) & vbCrLf
Debug.Print "chiffres pairs : " & ValeurPaire(greffon) & vbCrLf
Debug.Print "somme des pairs : " & sommechiffres(pairs) & vbCrLf
Debug.Print valeur
End Sub

Function dernierChiffre(ByVal S As String) As Integer
dernierChiffre = Right(S, 1)
End Function

Function ValeurImPaire(ByVal S As String) As Long
Dim résultat As Long
While Len(S) > 0
résultat = 10 * résultat + Left(S, 1)
S = Mid(S, 3)
Wend
ValeurImPaire = résultat
End Function

Function alleger(ByVal S As String) As String
Dim résultat As String, I As Long
For I = 1 To Len(S)
If InStr("0123456789", Mid(S, I, 1)) > 0 Then résultat = résultat +
Mid(S, I, 1)

Next I
alleger = Left(résultat, Len(résultat) - 1)
End Function

Function sommechiffres(N As Long) As Long
Dim résultat As Long
While N > 0
résultat = résultat + (N Mod 10)
N = N 10
Wend
sommechiffres = résultat
End Function

Function ValeurPaire(ByVal S As String) As Long
ValeurPaire = ValeurImPaire(Mid(S, 2))
End Function



Sûrement un exercice d'algorithmie car je ne vois pas bien le problème
concret que cela sous-tend.

Un partiel peut-être ?

5 minutes montre en main.

Il suffit de procéder petit à petit comme l'indique l'énoncé

"briochette" a écrit dans le message
de news:
Bonjour

J'ai un champ qui va contenir un numér de greffe et nous avons un
algoritme
nous permettante de savoir si ce numéro de greffe est bon ou non.
L'algorithme est le suisvant :

voici un exemple de greffe : 200-12-049338-933
2001204933893 : on extrait les chiffres impairs (ayant une place impaire
dans ce chiffre) sans prendre le dernier chiffre qui sert seulement à la






vérification. Les chiffres sont donc 2 0 2 4 3 8 3 , on doit réunir ces
chiffres sans les espaces et multipliez le nombre obtneu par deux ==>
2024383
* 2 = 4048766 ==> on doit ensuite additionner les chiffres ensemble
4+0+4+8+7+6+6 = 35
On reprend notre numéro de greffe (toujours sans le dernier chiffre) est
on
extrait les chiffres pairs (ayant une place paire dans ce chiffre). Les
chiffres sont donc 0 1 0 9 3 9. On fait le même exercie que précedemment
:
0+1+0+9+3+9 = 22.

Ensuite on prend les deux résultats : 22 + 35 = 57 auquel on additionne le
dernier chiffre de notre numéro de greffe non utilisé + 3 = 60 pour donner
un
nombre divisible par 10e nombre (soit par 10).

Je suis bloquée pour écride le code, je sais que je dois utiliser
Public Function ValideGref(strGref As String) As Boolean
Dim dblNbImpair As Double
ete nsuite mettre tout ce qu'il faut dans:
'mid(strgref,,)
'& concaténation
'cdbl()
'5 Mod 10
End Function

Mais je coince... Need some help

D'avance merci beaucoup

Briochette


Avatar
briochette
Merci car je suis une toute nouvelle débutante VBA, j'ai eu juste un cour il
y a une semaine.

Cela va servir à un formuliare de commande de jugement, donc le numéro de
greffe ne sera jamais le même. Puis-je remplacer le numéro donné dans ton
code par des 00 ou xx

Merci

Briochette

"Patrice Henrio" a écrit :

Option Explicit

Private Sub Command1_Click()
Dim greffe As String, greffon As String, impairs As Long, pairs As Long,
valeur As Long
greffe = "200-12-049338-933"
greffon = alleger(greffe)
impairs = 2 * ValeurImPaire(greffon)
pairs = ValeurPaire(greffon)
valeur = sommechiffres(impairs) + sommechiffres(pairs) + Right(greffe,
1)
Debug.Print "greffon : " & greffon & vbCrLf
Debug.Print "Chiffres impairs : " & ValeurImPaire(greffon) & vbCrLf
Debug.Print "somme des impairs : " & sommechiffres(impairs) & vbCrLf
Debug.Print "chiffres pairs : " & ValeurPaire(greffon) & vbCrLf
Debug.Print "somme des pairs : " & sommechiffres(pairs) & vbCrLf
Debug.Print valeur
End Sub

Function dernierChiffre(ByVal S As String) As Integer
dernierChiffre = Right(S, 1)
End Function

Function ValeurImPaire(ByVal S As String) As Long
Dim résultat As Long
While Len(S) > 0
résultat = 10 * résultat + Left(S, 1)
S = Mid(S, 3)
Wend
ValeurImPaire = résultat
End Function

Function alleger(ByVal S As String) As String
Dim résultat As String, I As Long
For I = 1 To Len(S)
If InStr("0123456789", Mid(S, I, 1)) > 0 Then résultat = résultat +
Mid(S, I, 1)

Next I
alleger = Left(résultat, Len(résultat) - 1)
End Function

Function sommechiffres(N As Long) As Long
Dim résultat As Long
While N > 0
résultat = résultat + (N Mod 10)
N = N 10
Wend
sommechiffres = résultat
End Function

Function ValeurPaire(ByVal S As String) As Long
ValeurPaire = ValeurImPaire(Mid(S, 2))
End Function



Sûrement un exercice d'algorithmie car je ne vois pas bien le problème
concret que cela sous-tend.

Un partiel peut-être ?

5 minutes montre en main.

Il suffit de procéder petit à petit comme l'indique l'énoncé

"briochette" a écrit dans le message
de news:
> Bonjour
>
> J'ai un champ qui va contenir un numér de greffe et nous avons un
> algoritme
> nous permettante de savoir si ce numéro de greffe est bon ou non.
> L'algorithme est le suisvant :
>
> voici un exemple de greffe : 200-12-049338-933
> 2001204933893 : on extrait les chiffres impairs (ayant une place impaire
> dans ce chiffre) sans prendre le dernier chiffre qui sert seulement à la




> vérification. Les chiffres sont donc 2 0 2 4 3 8 3 , on doit réunir ces
> chiffres sans les espaces et multipliez le nombre obtneu par deux ==>
> 2024383
> * 2 = 4048766 ==> on doit ensuite additionner les chiffres ensemble
> 4+0+4+8+7+6+6 = 35
> On reprend notre numéro de greffe (toujours sans le dernier chiffre) est
> on
> extrait les chiffres pairs (ayant une place paire dans ce chiffre). Les
> chiffres sont donc 0 1 0 9 3 9. On fait le même exercie que précedemment
> :
> 0+1+0+9+3+9 = 22.
>
> Ensuite on prend les deux résultats : 22 + 35 = 57 auquel on additionne le
> dernier chiffre de notre numéro de greffe non utilisé + 3 = 60 pour donner
> un
> nombre divisible par 10e nombre (soit par 10).
>
> Je suis bloquée pour écride le code, je sais que je dois utiliser
> Public Function ValideGref(strGref As String) As Boolean
> Dim dblNbImpair As Double
> ete nsuite mettre tout ce qu'il faut dans:
> 'mid(strgref,,)
> '& concaténation
> 'cdbl()
> '5 Mod 10
> End Function
>
> Mais je coince... Need some help
>
> D'avance merci beaucoup
>
> Briochette





Avatar
Patrice Henrio
Bien entendu il s'agissait seulement ici d'un exemple. Tu peux créer une
fonction booléenne (on dit un prédicat) de la façon suivante
Je ne connais pas les conditions pour que la greffe soit considérée comme
valide (il te suffit de coder le prédicat GraffeValide)
Tu appliques ta fonction avec la valeur que tu veux de Greffe

Function EstBonneGreffe(Greffe as String) as boolean
dim greffon as string, impairs As Long, pairs As Long, valeur As Long

greffon = alleger(greffe)
impairs = 2 * ValeurImPaire(greffon)
pairs = ValeurPaire(greffon)
valeur = sommechiffres(impairs) + sommechiffres(pairs) +
Right(greffe, 1)
EstBonneGreffe=GreffeValide(valeur)

end function

Attention c'est codé en VB, je crois de mémoire que debug.print n'existe pas
en VBA

Par exemple en Excel, si tu as une feuille avec toute une colonne de greffes
possibles, tu peux appliquer la fonction EstBonne Greffe sur chaque cellule.




"briochette" a écrit dans le message
de news:
Merci car je suis une toute nouvelle débutante VBA, j'ai eu juste un cour
il
y a une semaine.

Cela va servir à un formuliare de commande de jugement, donc le numéro de
greffe ne sera jamais le même. Puis-je remplacer le numéro donné dans ton
code par des 00 ou xx

Merci

Briochette

"Patrice Henrio" a écrit :

Option Explicit

Private Sub Command1_Click()
Dim greffe As String, greffon As String, impairs As Long, pairs As
Long,
valeur As Long
greffe = "200-12-049338-933"
greffon = alleger(greffe)
impairs = 2 * ValeurImPaire(greffon)
pairs = ValeurPaire(greffon)
valeur = sommechiffres(impairs) + sommechiffres(pairs) +
Right(greffe,
1)
Debug.Print "greffon : " & greffon & vbCrLf
Debug.Print "Chiffres impairs : " & ValeurImPaire(greffon) & vbCrLf
Debug.Print "somme des impairs : " & sommechiffres(impairs) & vbCrLf
Debug.Print "chiffres pairs : " & ValeurPaire(greffon) & vbCrLf
Debug.Print "somme des pairs : " & sommechiffres(pairs) & vbCrLf
Debug.Print valeur
End Sub

Function dernierChiffre(ByVal S As String) As Integer
dernierChiffre = Right(S, 1)
End Function

Function ValeurImPaire(ByVal S As String) As Long
Dim résultat As Long
While Len(S) > 0
résultat = 10 * résultat + Left(S, 1)
S = Mid(S, 3)
Wend
ValeurImPaire = résultat
End Function

Function alleger(ByVal S As String) As String
Dim résultat As String, I As Long
For I = 1 To Len(S)
If InStr("0123456789", Mid(S, I, 1)) > 0 Then résultat = résultat
+
Mid(S, I, 1)

Next I
alleger = Left(résultat, Len(résultat) - 1)
End Function

Function sommechiffres(N As Long) As Long
Dim résultat As Long
While N > 0
résultat = résultat + (N Mod 10)
N = N 10
Wend
sommechiffres = résultat
End Function

Function ValeurPaire(ByVal S As String) As Long
ValeurPaire = ValeurImPaire(Mid(S, 2))
End Function



Sûrement un exercice d'algorithmie car je ne vois pas bien le problème
concret que cela sous-tend.

Un partiel peut-être ?

5 minutes montre en main.

Il suffit de procéder petit à petit comme l'indique l'énoncé

"briochette" a écrit dans le
message
de news:
> Bonjour
>
> J'ai un champ qui va contenir un numér de greffe et nous avons un
> algoritme
> nous permettante de savoir si ce numéro de greffe est bon ou non.
> L'algorithme est le suisvant :
>
> voici un exemple de greffe : 200-12-049338-933
> 2001204933893 : on extrait les chiffres impairs (ayant une place
> impaire
> dans ce chiffre) sans prendre le dernier chiffre qui sert seulement à
> la




> vérification. Les chiffres sont donc 2 0 2 4 3 8 3 , on doit réunir
> ces
> chiffres sans les espaces et multipliez le nombre obtneu par deux ==>
> 2024383
> * 2 = 4048766 ==> on doit ensuite additionner les chiffres ensemble
> 4+0+4+8+7+6+6 = 35
> On reprend notre numéro de greffe (toujours sans le dernier chiffre)
> est
> on
> extrait les chiffres pairs (ayant une place paire dans ce chiffre). Les
> chiffres sont donc 0 1 0 9 3 9. On fait le même exercie que
> précedemment
> :
> 0+1+0+9+3+9 = 22.
>
> Ensuite on prend les deux résultats : 22 + 35 = 57 auquel on additionne
> le
> dernier chiffre de notre numéro de greffe non utilisé + 3 = 60 pour
> donner
> un
> nombre divisible par 10e nombre (soit par 10).
>
> Je suis bloquée pour écride le code, je sais que je dois utiliser
> Public Function ValideGref(strGref As String) As Boolean
> Dim dblNbImpair As Double
> ete nsuite mettre tout ce qu'il faut dans:
> 'mid(strgref,,)
> '& concaténation
> 'cdbl()
> '5 Mod 10
> End Function
>
> Mais je coince... Need some help
>
> D'avance merci beaucoup
>
> Briochette