Tom's Guide > Forum > Programmation > VBA, tri selon une variable de nombre impair ou pair.

VBA, tri selon une variable de nombre impair ou pair.

Forum Programmation : VBA, tri selon une variable de nombre impair ou pair.

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

Bonjour,

je suis actuellement en stage pour mon IUT de stats, et j'ai desoin de faire un petit progr sur VBA pour trier une variabel. Le but est d'attribuer un nombre à une variable (perimetre) selon le nombre d'une autre variable (identifiant rue).
Pour une rue, le coté pair est dans un secteur et le coté impair dans un autre, j'aimerais savoir comment faire pour distinguer ca? c'est pas tres clair hein?

voici un petit bout de mon programme simple :

Sub TriRuesBdDcomplete()
Dim i As Variant
For i = 2 To 1958
Select Case Cells(i, 20)
Case 1, 2, 16, 17, 20, 21, 22, 24, 25, 28, 29, 30, 31, 32, 33, 34, 35, 36, 38, 45, 48, 49, 53, 104, 106, 108, 111, 112, 113, 115, 116, 123, 125, 126, 128, 131, 132, 133, 136, 137, 143, 146, 147, 148, 150, 217, 219, 236, 241, 248, 251, 258, 262, 263, 264, 267, 272, 277, 278, 281, 288, 290, 291, 293, 294, 296, 301, 302, 304, 305, 306, 308, 309, 313, 316
Cells(i, 21) = 1
Case 4, 5, 6, 7, 9, 10, 11, 13
Cells(i, 21) = 2
Case 14, 172, 212, 213, 214, 218, 220, 221, 224, 225, 229, 230, 231, 232, 233, 234, 237, 238
Cells(i, 21) = 3
Case 152, 153, 154, 155, 158, 159, 162, 167, 168, 169, 170, 175, 181, 183, 184, 186, 192, 193, 196, 199, 201, 204, 206, 208, 242, 244, 252, 255, 269, 274, 275, 299, 303, 314, 315, 323, 324
Cells(i, 21) = 4
Case 156, 157, 160, 161, 163, 164, 165, 166, 171, 173, 174, 176, 177, 178, 179, 180, 182, 185, 187, 188, 189, 191, 194, 195, 197, 198, 202, 203, 205, 207, 209, 210, 215, 222, 228, 321, 322
Cells(i, 21) = 5
Case 105, 107, 109, 114, 117, 118, 119, 120, 121, 122, 124, 127, 129, 130, 134, 135, 138, 139, 141, 142, 144, 145, 149, 151, 318, 320
Cells(i, 21) = 6
Case 200, 226, 227, 239, 242, 244, 247, 249, 252, 254, 255, 260, 261, 268, 269, 274, 275, 276, 281, 283, 285, 287, 289, 295, 297, 299, 303, 310, 311, 312, 317, 324
Cells(i, 21) = 7
Case 18, 23, 26, 27, 37, 39, 41, 42, 43, 44, 46, 47, 51, 52, 55, 57, 60, 64, 67, 69, 70, 71, 75, 76, 77, 79, 80, 82, 94, 99, 250, 256, 265, 266, 273, 286, 298, 307, 325
Cells(i, 21) = 8
Case 3, 54, 56, 58, 59, 61, 62, 65, 66, 68, 72, 73, 74, 78, 81, 83, 85, 86, 87, 88, 91, 92, 93, 95, 96, 97, 100, 101, 102, 103, 243, 246
Cells(i, 21) = 9
Case 140
If Cells(i, 12) <= 11 Then
Cells(i, 21) = 1
ElseIf Cells(i, 12) = 12 Then
Cells(i, 21) = 1
ElseIf Cells(i, 12) = 14 Then
Cells(i, 21) = 1
ElseIf Cells(i, 12) = 16 Then
Cells(i, 21) = 1
Else: Cells(i, 21) = 6
End If
(......)

la "cells(i,12)" est l'identifiant de la rue, et la "cells(i,21)" la case ou sera inscrit l'identifiant du perimetre. La rue posant probleme porte l'identifiant 235 "case 235..." et voilà les données :
IDrue de 1 a 15 -> perimetre 7
ID rue de 24 a 9999 (nb uniquement pairs) -> perimetre 5
IDrue de 61 à 127(nb uniquement impairs) -> perimetre 3

Je sais pas si je suis tres clair, mais si vous avez compris pourriez vous m'apporter une reponse le plus vite possible svp? Ce serait meme fantastique si vous pouviez me repondre directement sur mon adresse mail "alexandre_heran@yahoo.fr"

Merci d'avance.

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

arf, heu je comprends pas ton probleme ..
si c'est pour différencier un valeur paire ou impair :

if valeur = round((valeur/2),0) * 2 then
valeur est pair
else
valeur est impaire
endif

je m'explique :
je prends la valeur, je la divise par deux, je l'arrondi sans virgule, et je la remultiplie par 2 ...
si c'est une valeur paire, je retombe sur ma valeur de base sinon, y'a différence.

ex : 5 / 2 = 2.5 donc arrondi a 2 ... 2 * 2 = 4 .. 4 <>5 donc 5 est impair.

++

Nico.

Répondre à leghola

Merci beaucoup d’avoir pris le temps de me repondre, sinon, ce n’est pas exactement ca mais prenons un exemple :
Vous avez une rue (identifiant « 235 ») et 2 secteurs (perimetres) geographiques (un de chaque coté de la rue), ainsi qu’une base de donnée des gens qui habitent cette rue. Si les gens habitent du coté impair de la rue, ils sont administrativement dans le secteur A, et s’ils habitent du coté pair ils sont administrativment dans le secteur B. Le but du jeu est donc de trier à l’aide d’un petit programme les gens selon s’ils sont dans le secteur A ou B dans la colonne perimetre (dans la colonne perimetre il sera indiquer A ou B en face de chaque nom de famille et de leur adresse).

Je pense avoir mieux expliqué le probleme, j’espere que vous prendrez le temps de me repondre.

Merci.

Répondre à napoleus

re,

quelle est la liste complete des regles qui permettent de trier les numéros ?

Répondre à leghola

Lol LeGhola, cest compliquer ton systeme de repere pair impair je trouve.

Tu peux faire tout simplement:

if (valeur % 2)
impair
else
pair

Répondre à Sundevil

J'ai fait un algo complet (complexe aussi) pour qu'un débutant informatique retrouve ses petits...

J'aurai tres bien put utiliser un simple
if rest(valeur/2) = 0 then
pair
else
impair
end if

La première loi du programmeur :
Se mettre a la portée de l'utilisateur.

++

Nico.

Répondre à leghola

Jai fait juste un modulo, niveau 6 ou 5eme cest pas tres compliquer meme pour un novice en prog.

Répondre à Sundevil

Et c'est quel langage ton modulo ? car en vba c'est "mod"..

Le pauvre va pas comprendre ta phrase (même si elle est correcte et pertinente :)) car pas d'explication (perso je savais pas que % correspondait a modulo) et mauvais langage (ou sinon donne moi la version :))

Sans rancune . 8-)

++

Répondre à leghola

Cest vrai que jai pas mit dexplication lol, desoler.

Répondre à Sundevil

Merci de vous soucier de mon cas. Je vais vous présenter les choses simplement en esperant que vous pourrez m'apporter une réponse.
Je simplifie ma base de donnée au maximum :
j'ai donc:

-une colonne "idrue" ou est inscrit l'identifiant de la rue (ex: "235" dans mon cas qui pose probleme)

-une colonne "numRue" qui est LE NUMERO DE L'ADRESSE de la personne (ex:"29" si la personne habite le "29 de la rue 235" -> ex:29 rue St Jean))

-une colonne "perimetre" vide, c'est le but du ptit progr de remplir cette colonne avec le numero du perimetre correspondant au bon coté de la rue.



probleme :
-si "numRue" de la rue "235" est un nombre IMPAIR compris entre 61 et 127, le progr inscrit "3" dans la case "perimetre".
-si "numRue" de la rue "235" est IMPAIR et compris entre 135 et 9999 -> perimetre 4
-si "numRue" de la rue "235" est un nombre PAIR entre -> perimetre 5


Avez vous compris? j'espere que j'embrouille pas trop vos esprits...
je pense que si vous comparez au bout du progr qque je vous ai mis la haut vous allez comprendre(ce qu'il y a derriere "case" est la colonne "idrue",la colonne 12 est "numRue" et la colonne 21 est "perimetre" ).


Je sais que je suis chiant mais je vous serais vraiment reconnaissant de m'aider car il faut que j'avance dans mon stage et ce point me bloque pour la suite.

Merci.


Répondre à napoleus

Normalement avec une batterie de if sa devrai coller lol.

Avec la solution que lon a ta donner pour les pair/impair sa devrai coller.

Tu nous a donner ton 'algo' tu es donc capable de le faire ;)

Répondre à Sundevil

donc première chose tu cherches si ton n° est pair ou impair
=> Fonction MOD dans VBA

seconde chose fait toi une table de correspondance :

TYPE / MINI / MAXI / PERIMETRE
IMPAIR / 61 / 127 / 3
IMPAIR / 135 / 9999 / 4
PAIR / 1 / 9999 / 5

Il suffit de tester ensuite ou on se trouve et tu as ton périmètre

dis moi si tu veux plus d'explications :)

++

Nico.

Répondre à leghola

merci, je vais tester avec MOD. Euh sinon en effet jai reussi a faire mon algo pour les autres rues mais comme tu dis il me faudrait ici une veritable batterie de "if" ce qui rendait la chose impossible!

merci bcp d'avoir pris le temps de me repondre. :-D

Répondre à napoleus

la fonction MOD n'est pas reconnue par VBA.... :-(

Répondre à napoleus

Utilise lautre systeme proposer alors.
Il est plus lourd mais marche tous aussi bien.

Répondre à Sundevil

Si, la fonction Mod est reconnu par VBA:

Code :
  1. result = number1 Mod number2



si ça marche pas chez toi, dis-nous comment tu écris ton code avec la fonction Mod

Répondre à Seb-c-bien@IDN

AYYYAIIIIII!!!! merci tout le monde, ca marche.
voilà ce que ca donne:

Case 235
If Cells(i, 8) <= 15 Then
Cells(i, 19) = 7
ElseIf ((0 <> Cells(i, 8) Mod 2) And (61 <= Cells(i, 8) <= 127)) Then
Cells(i, 19) = 3
ElseIf ((0 = Cells(i, 8) Mod 2) And (Cells(i, 8) >= 24)) Then
Cells(i, 19) = 5
ElseIf ((0 <> Cells(i, 8) Mod 2) And (Cells(i, 8) >= 135)) Then
Cells(i, 19) = 4
ElseIf ((0 = Cells(i, 8) Mod 2) And (14 <= Cells(i, 8) <= 22)) Then
Cells(i, 19) = 3
End If



merci, j'aurais pas trouver tout seul.... :-D ;-) :-D :-D

Répondre à napoleus

ca fait plaisir de voir quelqu'un dire merci !! :)

Si autre probleme , contacte nous :D
(en plus ca nous donnera une occasion de plus de nous chamailler sur les techniques a employer ! ;-))

++

Nico.

Répondre à leghola
Tom's Guide > Forum > Programmation > VBA, tri selon une variable de nombre impair ou pair.
Aller à :

Il y a 479 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens