Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Contribuez
Contribuez Access : Vos contributions. Postez ici vos codes sources, conseils, astuces et autres propositions. Ce forum n'est pas un forum technique mais destiné aux contributions pour www.developpez.com
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/10/2006, 22h16   #1
Membre chevronné
 
Inscription : mars 2002
Messages : 611
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : mars 2002
Messages : 611
Points : 764
Points : 764
Par défaut Diviser un entier de grande longueur par un autre entier

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
 
Option Compare Database
Option Explicit
 
Function lDiv(numerateur As String, diviseur As Long, ByRef reste As Long) As String
  Dim part As Integer
  Dim c As String
 
  Dim res As String
 
  res = ""
 
  Do While Len(numerateur) > 0
    c = c & Left$(numerateur, 1)
    numerateur = Right$(numerateur, Len(numerateur) - 1)
    If CLng(c) < diviseur Then
      If res <> "" Then
        res = res & "0"
      End If
    Else
      part = CStr((CLng(c) \ diviseur))
      c = CStr(CLng(c) - (part * diviseur))
      res = res & CStr(part)
    End If
  Loop
  lDiv = res
  reste = CLng(c)
End Function
 
Function LongToBinaire(unevaleur As String) As String
  Dim reste As Long
  Dim res As String
 
  Do While Len(unevaleur) > 0
    unevaleur = lDiv(unevaleur, 2, reste)
    res = CStr(reste) & res
  Loop
 
  LongToBinaire = res
End Function
 
Sub test()
  Dim reste As Long
  Dim numsecu As String
 
  ' Vérification d'un numero de sécu
  ' la clé d'un n° de sécu correpond à 97 - (le reste de la division du n° de secu / 97)
  numsecu = "1640183137262"
  lDiv numsecu, 97, reste
  Debug.Print "Clé = " & 97 - reste
 
  ' Conversion d'un entier trèèèèèssss long en binaire
  Debug.Print LongToBinaire("65536564564564654658978978978978798798")
End Sub
Ce code à pour but de diviser un entier sous forme de chaine de caractères de longeur quelconque pour en obtenir le résultat (entier) et le reste.

2 exemples sont inclus, la vérification d'un n° de sécu français et la conversion d'un entier très long sous forme binaire.
DelphiManiac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2006, 12h24   #2
Membre Expert
 
Avatar de Papy Turbo
 
Homme Etienne Pailleret
Développeur VBA
Inscription : mars 2004
Messages : 748
Détails du profil
Informations personnelles :
Nom : Homme Etienne Pailleret
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Développeur VBA

Informations forums :
Inscription : mars 2004
Messages : 748
Points : 1 114
Points : 1 114
Salut, DelphiManiac,
Interessant

Je vais avouer que je n'ai pas encore testé cette "super division", mais juste une remarque.
Dans la 2 ème fonction "LongToBinaire", si je ne m'abuse, le paramètre ("unevaleur") est détruit par la fonction.
À l'arrivée,
- LongToBinaire contient bien le résultat,
- unevaleur ne contient plus le (string du) nombre à convertir, ce qui peut être gênant si on a passé une variable.
Il suffirait d'ajouter un ByVal pour éviter cela, comme dans :
Code :
Function LongToBinaire(byVal unevaleur As String) As String
Tu es d'accord ou j'ai rien compris ?
Papy Turbo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2006, 15h41   #3
Membre chevronné
 
Inscription : mars 2002
Messages : 611
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : mars 2002
Messages : 611
Points : 764
Points : 764
Tout à fait d'accord avec toi, mais d'un autre coté LongToBinaire n'était là que comme exemple d'utilisation de la fonction de division.
DelphiManiac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2006, 16h40   #4
Membre Expert
 
Avatar de Papy Turbo
 
Homme Etienne Pailleret
Développeur VBA
Inscription : mars 2004
Messages : 748
Détails du profil
Informations personnelles :
Nom : Homme Etienne Pailleret
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Développeur VBA

Informations forums :
Inscription : mars 2004
Messages : 748
Points : 1 114
Points : 1 114
+1
Excuse moi d'être un peu maniaque sur les bords
Papy Turbo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2006, 16h47   #5
Membre chevronné
 
Inscription : mars 2002
Messages : 611
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : mars 2002
Messages : 611
Points : 764
Points : 764
Pas de soucis
DelphiManiac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2006, 17h14   #6
Membre Expert
 
Inscription : avril 2006
Messages : 1 318
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 318
Points : 1 586
Points : 1 586
Bonjour,

votre fonction m'a rappelé que j'avais écrit un petit programme de vérification de clé de n° de sécu et de clé RIB.

J'utilisais des variants décimaux pour calculer les clés et à priori ça passe.

J'ai testé le numéro de sécu, et j'obtiens la même clé.
Les décimaux sont par contre trop courts pour tester votre deuxième exemple !

Je l'ai un peu dépoussiéré, Si on le compile en <.mde>, il ressemble à un petit programme indépendant d'Access.

Lien du programme ci-dessous (Access 2003) :
http://pbserv.free.fr/dev/

Amicalement,

Philippe
philben est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h39.


 
 
 
 
Partenaires

Hébergement Web