OVH Cloud OVH Cloud

de l'aide sur les boucles.

14 réponses
Avatar
squat541
salut a tous,voila j'explique,g un prog qui me liste tout les ip des adresses
de classe a,b,c.
par exemple,je tape 85.22.55. adresse de classe c,et il me sort tout les ip
du reseau 85.22.55. (de 0 a 255).
je voudrais afficher seulement 30 ip mais qui ne suivent pas85.22.55.(1,5 ,
79,101, 103,119.....),quel boucle je dois utiliser pour faire cela vu que ce
n'est pas des chiffres qui se suivent?
merci de repondre

10 réponses

1 2
Avatar
LE TROLL
Salut,

Ah, c'est quoi les adresses IP de classe ???

Je ne comprends pas, tu veux afficher des adresse IP qui
ne se suivent pas à l'aide d'une boucle, cependant la boucle
elle ne sait pas ce que tu affiches, donc un traitement dans
la boucle serait bienvenu...

Mais bon, je crois que je n'ai rein compris, je suppute
:o)
-------

"squat541" a écrit dans
le message de news:

salut a tous,voila j'explique,g un prog qui me liste tout
les ip des adresses
de classe a,b,c.
par exemple,je tape 85.22.55. adresse de classe c,et il
me sort tout les ip
du reseau 85.22.55. (de 0 a 255).
je voudrais afficher seulement 30 ip mais qui ne suivent
pas85.22.55.(1,5 ,
79,101, 103,119.....),quel boucle je dois utiliser pour
faire cela vu que ce
n'est pas des chiffres qui se suivent?
merci de repondre


Avatar
Patrice Henrio
Tu boucles 256 fois en affichant seulement les adresses IP qui t'intéressent
et en limitant à 30

Donc

Complet as Integer
Complet=0
For ADR=0 to 255
If isValide(AdresseIp(ADR)) then
Affiche AdresseIp(ADR)
Complet=Complet+1
End If
If Complet0 then exit for
Next

Bien sûr AdresseIP(N) est une fonction qui renvoie une adresse IP construite
à partir de N
IsValide est un prédicat qui_ renvoie TRue si l'adresse IOP est valide
Affiche est une sub qui affiche l'adresse IOP construite à partir de N


"LE TROLL" <le a écrit dans le message de news:

Salut,

Ah, c'est quoi les adresses IP de classe ???

Je ne comprends pas, tu veux afficher des adresse IP qui ne se suivent
pas à l'aide d'une boucle, cependant la boucle elle ne sait pas ce que tu
affiches, donc un traitement dans la boucle serait bienvenu...

Mais bon, je crois que je n'ai rein compris, je suppute :o)
-------

"squat541" a écrit dans le message de
news:
salut a tous,voila j'explique,g un prog qui me liste tout les ip des
adresses
de classe a,b,c.
par exemple,je tape 85.22.55. adresse de classe c,et il me sort tout les
ip
du reseau 85.22.55. (de 0 a 255).
je voudrais afficher seulement 30 ip mais qui ne suivent pas85.22.55.(1,5
,
79,101, 103,119.....),quel boucle je dois utiliser pour faire cela vu que
ce
n'est pas des chiffres qui se suivent?
merci de repondre






Avatar
Guy DETIENNE
Salut ;O)

Test le code ci-dessous. Celui-ci est complétement documenté.
Cela paraît gros, mais ce sont les commentaires qui prennent bcp de place...
Le code retourne 30 valeurs aléatoires comprises entre 0 et 255.

Bon amusement.

Guy


CODE (le mettre dans l'événement Click d'un bouton et ajouter une ListBox
nommée List1) :

Dim lngI As Long ': variable de boucle
Dim lngIP As Long ': variable contenant l'IP aléatoire
Dim strIP As String ': variable de concaténation des IP
Dim strTabIP() As String ': tableau qui contiendra les 30 IP aléatoires

'//Initialise le générateur de nombres aléatoires.
Randomize Timer

'//On boucle 30 fois !
For lngI = 1 To 30

'//IP aléatoire entre 0 et 255
lngIP = Int(255 * Rnd)

'//Si l'IP ne se trouve pas déjà dans la string strIP, on concatène
'//en délimitant les IP avec le caractère #
'//Au final, on aura une chaîne du style: 123#14#200#56#60...
If InStr(1, strIP, str$(lngIP)) = 0 Then
strIP = Trim$(str$(lngIP)) & "#" & strIP
End If

'//On rempli le tableau strTabIP avec les IP grâce à la fonction Split
(VB6!!).
'//Split renvoie un tableau de base zéro à une dimension contenant le
nombre
'//spécifié de sous-chaînes en fonction d'un délimiteur - ici le
caractère #
'//Au final nous aurons donc un tableau de 30 IP non trié ;O)
strTabIP = Split(strIP, "#")

Next lngI

'//On rempli une liste en fonction du tableau
For lngI = 0 To UBound(strTabIP) - 1
Me.List1.AddItem strTabIP(lngI)
Next lngI

"squat541" a écrit dans le message de
news:
salut a tous,voila j'explique,g un prog qui me liste tout les ip des


adresses
de classe a,b,c.
par exemple,je tape 85.22.55. adresse de classe c,et il me sort tout les


ip
du reseau 85.22.55. (de 0 a 255).
je voudrais afficher seulement 30 ip mais qui ne suivent pas85.22.55.(1,5


,
79,101, 103,119.....),quel boucle je dois utiliser pour faire cela vu que


ce
n'est pas des chiffres qui se suivent?
merci de repondre


Avatar
Guy DETIENNE
Salut ;O)

Pour ton information ,vois ici concernant la classification des adresses IP:
http://www.commentcamarche.net/internet/ip.php3

On ne peut pas tout savoir ;O) Qu'est ce qu'on s'embêterait...

Guy

"LE TROLL" <le a écrit dans le message de
news:
Salut,

Ah, c'est quoi les adresses IP de classe ???

Je ne comprends pas, tu veux afficher des adresse IP qui
ne se suivent pas à l'aide d'une boucle, cependant la boucle
elle ne sait pas ce que tu affiches, donc un traitement dans
la boucle serait bienvenu...

Mais bon, je crois que je n'ai rein compris, je suppute
:o)
-------

"squat541" a écrit dans
le message de news:

> salut a tous,voila j'explique,g un prog qui me liste tout
> les ip des adresses
> de classe a,b,c.
> par exemple,je tape 85.22.55. adresse de classe c,et il
> me sort tout les ip
> du reseau 85.22.55. (de 0 a 255).
> je voudrais afficher seulement 30 ip mais qui ne suivent
> pas85.22.55.(1,5 ,
> 79,101, 103,119.....),quel boucle je dois utiliser pour
> faire cela vu que ce
> n'est pas des chiffres qui se suivent?
> merci de repondre




Avatar
LE TROLL
Salut Guy, merci pour la doc, ok, selon la taille a, b, c...
En fait c'est surtout de l'administrateur ça, alors comme je
fais à 99% du logiciel individuel PC, forcément, je n'y suis
pas confronté...
---------

"Guy DETIENNE" a écrit dans le message
de news:
Salut ;O)

Pour ton information ,vois ici concernant la
classification des adresses IP:
http://www.commentcamarche.net/internet/ip.php3

On ne peut pas tout savoir ;O) Qu'est ce qu'on
s'embêterait...

Guy

"LE TROLL" <le a écrit dans le message de
news:
Salut,

Ah, c'est quoi les adresses IP de classe ???

Je ne comprends pas, tu veux afficher des adresse IP
qui
ne se suivent pas à l'aide d'une boucle, cependant la
boucle
elle ne sait pas ce que tu affiches, donc un traitement
dans
la boucle serait bienvenu...

Mais bon, je crois que je n'ai rein compris, je
suppute
:o)
-------

"squat541" a écrit
dans
le message de news:

> salut a tous,voila j'explique,g un prog qui me liste
> tout
> les ip des adresses
> de classe a,b,c.
> par exemple,je tape 85.22.55. adresse de classe c,et
> il
> me sort tout les ip
> du reseau 85.22.55. (de 0 a 255).
> je voudrais afficher seulement 30 ip mais qui ne
> suivent
> pas85.22.55.(1,5 ,
> 79,101, 103,119.....),quel boucle je dois utiliser pour
> faire cela vu que ce
> n'est pas des chiffres qui se suivent?
> merci de repondre








Avatar
LE TROLL
Oh là mes brave:

L'exemple indique pour le 4eme groupe IP (1, 5, 79...), et
il dit "ip mais qui NE se suivent", donc c'est bien
traitement aléatoire qu'il faut mettre dans la boucle, en
vérifiant que l'aléatoire n'a pas causé de mitoyenneté d'IP,
moi y'en a m'essayer à ce jeu:
-----------------------

Sub cree_ip()
Dim i As Long
Dim j As Long
Dim k As Long
Dim ip(256) As Long
Dim ip_ok(30) As Long ' ip retenues
Dim hasard As Long
Dim presente As String
Dim trans As Long
'
For i = 0 To 255 ' choix des ip
ip(i) = Format(i, "000")
Next i
Randomize
hasard = 0
'
For i = 1 To 30
Do While ip(hasard) = 256 ' = déjà choisit
hasard = Int((255 - 0 + 1) * Rnd + 0) ' pseudo
aléatoire
Loop
If hasard > 0 Then ip(hasard - 1) = 256 ' enlève - 1:
interdit mitoyenneté
ip(hasard) = 256 ' ip à ne plus sélectionner
ip_ok(i) = hasard ' ip sélectionnée
If hasard < 255 Then ip(hasard + 1) = 256 ' enlève + 1:
interdit mitoyenneté
Next i
'
For i = 1 To 30 ' tri croissant
For j = 1 To 30
For k = 1 To 30
If j = k Then Exit For
If ip_ok(j) < ip_ok(k) Then
trans = ip_ok(j)
ip_ok(j) = ip_ok(k)
ip_ok(k) = trans
Exit For
End If
Next k
Next j
Next i
'
presente = "" ' présentation
For i = 1 To 30
presente = presente & Format(ip_ok(i), "000") & vbLf
Next i
MsgBox presente, vbInformation
End Sub
-----------------------testé OK


"squat541" a écrit dans
le message de news:

salut a tous,voila j'explique,g un prog qui me liste tout
les ip des adresses
de classe a,b,c.
par exemple,je tape 85.22.55. adresse de classe c,et il
me sort tout les ip
du reseau 85.22.55. (de 0 a 255).
je voudrais afficher seulement 30 ip mais qui ne suivent
pas85.22.55.(1,5 ,
79,101, 103,119.....),quel boucle je dois utiliser pour
faire cela vu que ce
n'est pas des chiffres qui se suivent?
merci de repondre


Avatar
squat541
Je vous remercie tous de vous intéresser à mon cas,c presque ca sauf que je
veux pouvoir les choisirs et pas aleatoire sinon c une bonne idée.je vous met
le prog du bouton commande qui vous aidera a me comprendre
Private Sub Command1_Click()
If Command1.Caption = "Analyse" Then
Command1.Caption = "Stopper"
Dim Depart As Integer 'variables utilisées pour la barre
Dim Fin As Integer 'de défilement
Dim Iptest As String
Dim Result As String
Dim Adr1Start As Integer
Dim Adr1End As Integer
Dim Adr2Start As Integer 'variables utilisées pour les
Dim Adr2End As Integer 'adresses Ip
Dim Adr3Start As Integer
Dim Adr3End As Integer
Dim Cpt As Integer 'Utilisée pour définir le dernier champ
'de l'adresse IP
'********************
'* initialistaion *
'********************
ListView1.ListItems.Clear
Depart = 0
If Option1.Value = True Then
Adr2Start = 0
Adr2End = 255
Adr3Start = 0
Adr3End = 255
Fin = 766
End If
If Option2.Value = True Then
Adr2Start = Val(Text4.Text)
Adr2End = Val(Text4.Text)
Adr3Start = 0
Adr3End = 255
Fin = 510
End If
If Option3.Value = True Then
Adr2Start = Val(Text4.Text)
Adr2End = Val(Text4.Text)
Adr3Start = Val(Text5.Text)
Adr3End = Val(Text5.Text
Fin = 254
End If
If Option4.Value = True Then
'je tape le premier champ
Adr2Start = 22
Adr2End = 22
Adr3Start = 5
Adr3End = 5
Fin = 254
End If
ProgressBar1.Visible = True
ProgressBar1.Max = Fin
ProgressBar1.Min = Depart
Do Until Adr2Start > Adr2End
'boucle correspondant au deuxième champs de l'adresse IP
Do Until Adr3Start > Adr3End
'Boucle correspondant au troisième champs de l'adresse IP
'réinitialisation de cpt
Cpt = 1
'Cpt = 100
Do Until Cpt > 254
'boucle correspondant au quetrième champs de l'adresse IP
If Command1.Caption = "Analyse" Then Exit Sub
'Définition de l'adresse IP à tester
Iptest = Text3.Text + "." & Adr2Start & "." & Adr3Start
& "." & Cpt
DoEvents
Result = Echo(Iptest)
With ListView1.ListItems.Add
.Text = Iptest
If Result = "Failure" Then
.SubItems(2) = Result
DoEvents
Enregistrement Iptest, False
Else
'.SubItems(1) = GetHostName(ConvertIp(Iptest))
'Dim test As Double
'test = CDbl(ConvertIp(Iptest))
' On Error Resume Next
'.SubItems(1) =
gethostbyaddr(CLng(ConvertIp(Iptest)), 4, AF_INET)
'.SubItems(1) = gethostbyaddr(ConvertIp(Iptest),
4, AF_INET)
'.SubItems(1) =
GetHostName(CLng(ConvertIp(Iptest)))
DoEvents
'.SubItems(1) = HostName(Iptest)
.SubItems(1) = GetHostNameFromIP(.Text)
DoEvents
Enregistrement Iptest, True
End If
End With
Cpt = Cpt + 1
Depart = Depart + 1
ProgressBar1.Value = Depart
Loop
Adr3Start = Adr3Start + 1
Loop
Adr2Start = Adr2Start + 1
Loop

ProgressBar1.Visible = False

Else
ProgressBar1.Visible = False
Command1.Caption = "Analyse"
End If

End Sub

Voila mon prob ce trouve a l'option 4,je cherche a modifier le 3eme champ en
lui donnant 28 valeur mais que je ne modifie pas ces 28 reseau corresponde au
reseau d'une entreprise,ce sont des adresses qui ne change pas.
un exemple 85.22.5.(0à255)
85.22.10.(0à255)
85.22.18.(0à255)
:
:
je modifie seulement le troisieme champ je choisie les 28 et ca reste
toujours meme.si j'explique mal dit le moi je detaillerai plus.


"LE TROLL" a écrit :

Oh là mes brave:

L'exemple indique pour le 4eme groupe IP (1, 5, 79...), et
il dit "ip mais qui NE se suivent", donc c'est bien
traitement aléatoire qu'il faut mettre dans la boucle, en
vérifiant que l'aléatoire n'a pas causé de mitoyenneté d'IP,
moi y'en a m'essayer à ce jeu:
-----------------------

Sub cree_ip()
Dim i As Long
Dim j As Long
Dim k As Long
Dim ip(256) As Long
Dim ip_ok(30) As Long ' ip retenues
Dim hasard As Long
Dim presente As String
Dim trans As Long
'
For i = 0 To 255 ' choix des ip
ip(i) = Format(i, "000")
Next i
Randomize
hasard = 0
'
For i = 1 To 30
Do While ip(hasard) = 256 ' = déjà choisit
hasard = Int((255 - 0 + 1) * Rnd + 0) ' pseudo
aléatoire
Loop
If hasard > 0 Then ip(hasard - 1) = 256 ' enlève - 1:
interdit mitoyenneté
ip(hasard) = 256 ' ip à ne plus sélectionner
ip_ok(i) = hasard ' ip sélectionnée
If hasard < 255 Then ip(hasard + 1) = 256 ' enlève + 1:
interdit mitoyenneté
Next i
'
For i = 1 To 30 ' tri croissant
For j = 1 To 30
For k = 1 To 30
If j = k Then Exit For
If ip_ok(j) < ip_ok(k) Then
trans = ip_ok(j)
ip_ok(j) = ip_ok(k)
ip_ok(k) = trans
Exit For
End If
Next k
Next j
Next i
'
presente = "" ' présentation
For i = 1 To 30
presente = presente & Format(ip_ok(i), "000") & vbLf
Next i
MsgBox presente, vbInformation
End Sub
-----------------------testé OK


"squat541" a écrit dans
le message de news:

> salut a tous,voila j'explique,g un prog qui me liste tout
> les ip des adresses
> de classe a,b,c.
> par exemple,je tape 85.22.55. adresse de classe c,et il
> me sort tout les ip
> du reseau 85.22.55. (de 0 a 255).
> je voudrais afficher seulement 30 ip mais qui ne suivent
> pas85.22.55.(1,5 ,
> 79,101, 103,119.....),quel boucle je dois utiliser pour
> faire cela vu que ce
> n'est pas des chiffres qui se suivent?
> merci de repondre





Avatar
Patrice Henrio
Déjà remplace tous les

If <var> = true then

par

If <var> then

ça ne change pas le fonctionnement mais c'est plus propre (discussion déjà
tenue sur ce forum).

Pour ton problème, il me semble qu'un tableau de 28 entiers (voire byte)
ferait l'affaire : dans ce tableau je mets les troisième nombre de l'adresse
(puisque tu les connais)

Donc T(1 to 28) as byte

Ensuite, au lieu d'écrire une boucle do, tu peux utiliser un for next
For I=1 to 28
adr3=T(I)
Next I

If Option4.Value = True Then
'je tape le premier champ
Adr2Start = 22
Adr2End = 22
Adr3Start = 5
Adr3End = 5
Fin = 254
End If


devient

If Option4.Value Then
'je tape le premier champ
Adr2Start = 22
Adr2End = 22
Adr3Start = T(1)
Adr3End = T(28)
Fin = 254
End If

Loop
Adr3Start = Adr3Start + 1


devient

If Option4.Value then
I=I+1
Adr3Start=T(I)
Else
Adr3Start­r3Start+1
End If

Quelques conseils supplémentaires, les noms des variables doivent être
adaptées au problème, ici adr3Start n'est l'adresse de départ mais l'adresse
courante qui parcourt la plage de Start à End, il serait donc plus judicieux
d'écrire adr3 tout seul, voir définr un type adr de la façon suivante

type adresse
champ1 as byte
champ2 as byte
champ3 as byte
champ4 as byte
end type
Encore mieux un objet dont les propriétés permettraient de gérer l'affichage
et le valeur
une propriété Adresse
AdresseIp(A as byte, B as byte, C as byte, D as byte) as double
AdresseIp=D+256*(C+256*(B+256*A))
fin

... etc

"squat541" a écrit dans le message de
news:
Je vous remercie tous de vous intéresser à mon cas,c presque ca sauf que
je
veux pouvoir les choisirs et pas aleatoire sinon c une bonne idée.je vous
met
le prog du bouton commande qui vous aidera a me comprendre
Private Sub Command1_Click()
If Command1.Caption = "Analyse" Then
Command1.Caption = "Stopper"
Dim Depart As Integer 'variables utilisées pour la barre
Dim Fin As Integer 'de défilement
Dim Iptest As String
Dim Result As String
Dim Adr1Start As Integer
Dim Adr1End As Integer
Dim Adr2Start As Integer 'variables utilisées pour les
Dim Adr2End As Integer 'adresses Ip
Dim Adr3Start As Integer
Dim Adr3End As Integer
Dim Cpt As Integer 'Utilisée pour définir le dernier champ
'de l'adresse IP
'********************
'* initialistaion *
'********************
ListView1.ListItems.Clear
Depart = 0
If Option1.Value = True Then
Adr2Start = 0
Adr2End = 255
Adr3Start = 0
Adr3End = 255
Fin = 766
End If
If Option2.Value = True Then
Adr2Start = Val(Text4.Text)
Adr2End = Val(Text4.Text)
Adr3Start = 0
Adr3End = 255
Fin = 510
End If
If Option3.Value = True Then
Adr2Start = Val(Text4.Text)
Adr2End = Val(Text4.Text)
Adr3Start = Val(Text5.Text)
Adr3End = Val(Text5.Text
Fin = 254
End If
If Option4.Value = True Then
'je tape le premier champ
Adr2Start = 22
Adr2End = 22
Adr3Start = 5
Adr3End = 5
Fin = 254
End If
ProgressBar1.Visible = True
ProgressBar1.Max = Fin
ProgressBar1.Min = Depart
Do Until Adr2Start > Adr2End
'boucle correspondant au deuxième champs de l'adresse IP
Do Until Adr3Start > Adr3End
'Boucle correspondant au troisième champs de l'adresse IP
'réinitialisation de cpt
Cpt = 1
'Cpt = 100
Do Until Cpt > 254
'boucle correspondant au quetrième champs de l'adresse IP
If Command1.Caption = "Analyse" Then Exit Sub
'Définition de l'adresse IP à tester
Iptest = Text3.Text + "." & Adr2Start & "." & Adr3Start
& "." & Cpt
DoEvents
Result = Echo(Iptest)
With ListView1.ListItems.Add
.Text = Iptest
If Result = "Failure" Then
.SubItems(2) = Result
DoEvents
Enregistrement Iptest, False
Else
'.SubItems(1) = GetHostName(ConvertIp(Iptest))
'Dim test As Double
'test = CDbl(ConvertIp(Iptest))
' On Error Resume Next
'.SubItems(1) > gethostbyaddr(CLng(ConvertIp(Iptest)), 4, AF_INET)
'.SubItems(1) =
gethostbyaddr(ConvertIp(Iptest),
4, AF_INET)
'.SubItems(1) > GetHostName(CLng(ConvertIp(Iptest)))
DoEvents
'.SubItems(1) = HostName(Iptest)
.SubItems(1) = GetHostNameFromIP(.Text)
DoEvents
Enregistrement Iptest, True
End If
End With
Cpt = Cpt + 1
Depart = Depart + 1
ProgressBar1.Value = Depart
Loop
Adr3Start = Adr3Start + 1
Loop
Adr2Start = Adr2Start + 1
Loop

ProgressBar1.Visible = False

Else
ProgressBar1.Visible = False
Command1.Caption = "Analyse"
End If

End Sub

Voila mon prob ce trouve a l'option 4,je cherche a modifier le 3eme champ
en
lui donnant 28 valeur mais que je ne modifie pas ces 28 reseau corresponde
au
reseau d'une entreprise,ce sont des adresses qui ne change pas.
un exemple 85.22.5.(0à255)
85.22.10.(0à255)
85.22.18.(0à255)
:
:
je modifie seulement le troisieme champ je choisie les 28 et ca reste
toujours meme.si j'explique mal dit le moi je detaillerai plus.


"LE TROLL" a écrit :

Oh là mes brave:

L'exemple indique pour le 4eme groupe IP (1, 5, 79...), et
il dit "ip mais qui NE se suivent", donc c'est bien
traitement aléatoire qu'il faut mettre dans la boucle, en
vérifiant que l'aléatoire n'a pas causé de mitoyenneté d'IP,
moi y'en a m'essayer à ce jeu:
-----------------------

Sub cree_ip()
Dim i As Long
Dim j As Long
Dim k As Long
Dim ip(256) As Long
Dim ip_ok(30) As Long ' ip retenues
Dim hasard As Long
Dim presente As String
Dim trans As Long
'
For i = 0 To 255 ' choix des ip
ip(i) = Format(i, "000")
Next i
Randomize
hasard = 0
'
For i = 1 To 30
Do While ip(hasard) = 256 ' = déjà choisit
hasard = Int((255 - 0 + 1) * Rnd + 0) ' pseudo
aléatoire
Loop
If hasard > 0 Then ip(hasard - 1) = 256 ' enlève - 1:
interdit mitoyenneté
ip(hasard) = 256 ' ip à ne plus sélectionner
ip_ok(i) = hasard ' ip sélectionnée
If hasard < 255 Then ip(hasard + 1) = 256 ' enlève + 1:
interdit mitoyenneté
Next i
'
For i = 1 To 30 ' tri croissant
For j = 1 To 30
For k = 1 To 30
If j = k Then Exit For
If ip_ok(j) < ip_ok(k) Then
trans = ip_ok(j)
ip_ok(j) = ip_ok(k)
ip_ok(k) = trans
Exit For
End If
Next k
Next j
Next i
'
presente = "" ' présentation
For i = 1 To 30
presente = presente & Format(ip_ok(i), "000") & vbLf
Next i
MsgBox presente, vbInformation
End Sub
-----------------------testé OK


"squat541" a écrit dans
le message de news:

> salut a tous,voila j'explique,g un prog qui me liste tout
> les ip des adresses
> de classe a,b,c.
> par exemple,je tape 85.22.55. adresse de classe c,et il
> me sort tout les ip
> du reseau 85.22.55. (de 0 a 255).
> je voudrais afficher seulement 30 ip mais qui ne suivent
> pas85.22.55.(1,5 ,
> 79,101, 103,119.....),quel boucle je dois utiliser pour
> faire cela vu que ce
> n'est pas des chiffres qui se suivent?
> merci de repondre







Avatar
squat541
Merci Patrice tu ma bien orienté g reussi grace a toi,mais g une autre
question maintenant que g les resultat que souhaité je voudrais les mettre
dans un fichier.ini
exemple: g la liste des 28 sous reseau et lorsque je clic sur un sous reseau
il m'affiche les adresses de 0 à 255.
je voudrait que les resultat soit en meme temps copier sur le fichier.ini
(est ce deja possible).
merci d'avance

"Patrice Henrio" a écrit :

Déjà remplace tous les

If <var> = true then

par

If <var> then

ça ne change pas le fonctionnement mais c'est plus propre (discussion déjà
tenue sur ce forum).

Pour ton problème, il me semble qu'un tableau de 28 entiers (voire byte)
ferait l'affaire : dans ce tableau je mets les troisième nombre de l'adresse
(puisque tu les connais)

Donc T(1 to 28) as byte

Ensuite, au lieu d'écrire une boucle do, tu peux utiliser un for next
For I=1 to 28
adr3=T(I)
Next I

> If Option4.Value = True Then
> 'je tape le premier champ
> Adr2Start = 22
> Adr2End = 22
> Adr3Start = 5
> Adr3End = 5
> Fin = 254
> End If
devient

If Option4.Value Then
'je tape le premier champ
Adr2Start = 22
Adr2End = 22
Adr3Start = T(1)
Adr3End = T(28)
Fin = 254
End If

> Loop
> Adr3Start = Adr3Start + 1
devient

If Option4.Value then
I=I+1
Adr3Start=T(I)
Else
Adr3Start­r3Start+1
End If

Quelques conseils supplémentaires, les noms des variables doivent être
adaptées au problème, ici adr3Start n'est l'adresse de départ mais l'adresse
courante qui parcourt la plage de Start à End, il serait donc plus judicieux
d'écrire adr3 tout seul, voir définr un type adr de la façon suivante

type adresse
champ1 as byte
champ2 as byte
champ3 as byte
champ4 as byte
end type
Encore mieux un objet dont les propriétés permettraient de gérer l'affichage
et le valeur
une propriété Adresse
AdresseIp(A as byte, B as byte, C as byte, D as byte) as double
AdresseIp=D+256*(C+256*(B+256*A))
fin

.... etc

"squat541" a écrit dans le message de
news:
> Je vous remercie tous de vous intéresser à mon cas,c presque ca sauf que
> je
> veux pouvoir les choisirs et pas aleatoire sinon c une bonne idée.je vous
> met
> le prog du bouton commande qui vous aidera a me comprendre
> Private Sub Command1_Click()
> If Command1.Caption = "Analyse" Then
> Command1.Caption = "Stopper"
> Dim Depart As Integer 'variables utilisées pour la barre
> Dim Fin As Integer 'de défilement
> Dim Iptest As String
> Dim Result As String
> Dim Adr1Start As Integer
> Dim Adr1End As Integer
> Dim Adr2Start As Integer 'variables utilisées pour les
> Dim Adr2End As Integer 'adresses Ip
> Dim Adr3Start As Integer
> Dim Adr3End As Integer
> Dim Cpt As Integer 'Utilisée pour définir le dernier champ
> 'de l'adresse IP
> '********************
> '* initialistaion *
> '********************
> ListView1.ListItems.Clear
> Depart = 0
> If Option1.Value = True Then
> Adr2Start = 0
> Adr2End = 255
> Adr3Start = 0
> Adr3End = 255
> Fin = 766
> End If
> If Option2.Value = True Then
> Adr2Start = Val(Text4.Text)
> Adr2End = Val(Text4.Text)
> Adr3Start = 0
> Adr3End = 255
> Fin = 510
> End If
> If Option3.Value = True Then
> Adr2Start = Val(Text4.Text)
> Adr2End = Val(Text4.Text)
> Adr3Start = Val(Text5.Text)
> Adr3End = Val(Text5.Text
> Fin = 254
> End If
> If Option4.Value = True Then
> 'je tape le premier champ
> Adr2Start = 22
> Adr2End = 22
> Adr3Start = 5
> Adr3End = 5
> Fin = 254
> End If
> ProgressBar1.Visible = True
> ProgressBar1.Max = Fin
> ProgressBar1.Min = Depart
> Do Until Adr2Start > Adr2End
> 'boucle correspondant au deuxième champs de l'adresse IP
> Do Until Adr3Start > Adr3End
> 'Boucle correspondant au troisième champs de l'adresse IP
> 'réinitialisation de cpt
> Cpt = 1
> 'Cpt = 100
> Do Until Cpt > 254
> 'boucle correspondant au quetrième champs de l'adresse IP
> If Command1.Caption = "Analyse" Then Exit Sub
> 'Définition de l'adresse IP à tester
> Iptest = Text3.Text + "." & Adr2Start & "." & Adr3Start
> & "." & Cpt
> DoEvents
> Result = Echo(Iptest)
> With ListView1.ListItems.Add
> .Text = Iptest
> If Result = "Failure" Then
> .SubItems(2) = Result
> DoEvents
> Enregistrement Iptest, False
> Else
> '.SubItems(1) = GetHostName(ConvertIp(Iptest))
> 'Dim test As Double
> 'test = CDbl(ConvertIp(Iptest))
> ' On Error Resume Next
> '.SubItems(1) > > gethostbyaddr(CLng(ConvertIp(Iptest)), 4, AF_INET)
> '.SubItems(1) =
> gethostbyaddr(ConvertIp(Iptest),
> 4, AF_INET)
> '.SubItems(1) > > GetHostName(CLng(ConvertIp(Iptest)))
> DoEvents
> '.SubItems(1) = HostName(Iptest)
> .SubItems(1) = GetHostNameFromIP(.Text)
> DoEvents
> Enregistrement Iptest, True
> End If
> End With
> Cpt = Cpt + 1
> Depart = Depart + 1
> ProgressBar1.Value = Depart
> Loop
> Adr3Start = Adr3Start + 1
> Loop
> Adr2Start = Adr2Start + 1
> Loop
>
> ProgressBar1.Visible = False
>
> Else
> ProgressBar1.Visible = False
> Command1.Caption = "Analyse"
> End If
>
> End Sub
>
> Voila mon prob ce trouve a l'option 4,je cherche a modifier le 3eme champ
> en
> lui donnant 28 valeur mais que je ne modifie pas ces 28 reseau corresponde
> au
> reseau d'une entreprise,ce sont des adresses qui ne change pas.
> un exemple 85.22.5.(0à255)
> 85.22.10.(0à255)
> 85.22.18.(0à255)
> :
> :
> je modifie seulement le troisieme champ je choisie les 28 et ca reste
> toujours meme.si j'explique mal dit le moi je detaillerai plus.
>
>
> "LE TROLL" a écrit :
>
>> Oh là mes brave:
>>
>> L'exemple indique pour le 4eme groupe IP (1, 5, 79...), et
>> il dit "ip mais qui NE se suivent", donc c'est bien
>> traitement aléatoire qu'il faut mettre dans la boucle, en
>> vérifiant que l'aléatoire n'a pas causé de mitoyenneté d'IP,
>> moi y'en a m'essayer à ce jeu:
>> -----------------------
>>
>> Sub cree_ip()
>> Dim i As Long
>> Dim j As Long
>> Dim k As Long
>> Dim ip(256) As Long
>> Dim ip_ok(30) As Long ' ip retenues
>> Dim hasard As Long
>> Dim presente As String
>> Dim trans As Long
>> '
>> For i = 0 To 255 ' choix des ip
>> ip(i) = Format(i, "000")
>> Next i
>> Randomize
>> hasard = 0
>> '
>> For i = 1 To 30
>> Do While ip(hasard) = 256 ' = déjà choisit
>> hasard = Int((255 - 0 + 1) * Rnd + 0) ' pseudo
>> aléatoire
>> Loop
>> If hasard > 0 Then ip(hasard - 1) = 256 ' enlève - 1:
>> interdit mitoyenneté
>> ip(hasard) = 256 ' ip à ne plus sélectionner
>> ip_ok(i) = hasard ' ip sélectionnée
>> If hasard < 255 Then ip(hasard + 1) = 256 ' enlève + 1:
>> interdit mitoyenneté
>> Next i
>> '
>> For i = 1 To 30 ' tri croissant
>> For j = 1 To 30
>> For k = 1 To 30
>> If j = k Then Exit For
>> If ip_ok(j) < ip_ok(k) Then
>> trans = ip_ok(j)
>> ip_ok(j) = ip_ok(k)
>> ip_ok(k) = trans
>> Exit For
>> End If
>> Next k
>> Next j
>> Next i
>> '
>> presente = "" ' présentation
>> For i = 1 To 30
>> presente = presente & Format(ip_ok(i), "000") & vbLf
>> Next i
>> MsgBox presente, vbInformation
>> End Sub
>> -----------------------testé OK
>>
>>
>> "squat541" a écrit dans
>> le message de news:
>>
>> > salut a tous,voila j'explique,g un prog qui me liste tout
>> > les ip des adresses
>> > de classe a,b,c.
>> > par exemple,je tape 85.22.55. adresse de classe c,et il
>> > me sort tout les ip
>> > du reseau 85.22.55. (de 0 a 255).
>> > je voudrais afficher seulement 30 ip mais qui ne suivent
>> > pas85.22.55.(1,5 ,
>> > 79,101, 103,119.....),quel boucle je dois utiliser pour
>> > faire cela vu que ce
>> > n'est pas des chiffres qui se suivent?
>> > merci de repondre
>>
>>
>>





Avatar
Patrice Henrio
Il suffit de connaître la syntaxe des fichiers ini qui sont des fichiers
textes.
Donc pour la suite tu ouvres un fichier texte truc.ini en écriture et tu
ajoutes tes données sous forme de texte en faisant attention à la façon dont
tu veux que ce soit compris.
En fait à partir du moment où tu peux les afficher à l'écran, tu peux les
écrire dans un fichier texte.



"squat541" a écrit dans le message de
news:
Merci Patrice tu ma bien orienté g reussi grace a toi,mais g une autre
question maintenant que g les resultat que souhaité je voudrais les mettre
dans un fichier.ini
exemple: g la liste des 28 sous reseau et lorsque je clic sur un sous
reseau
il m'affiche les adresses de 0 à 255.
je voudrait que les resultat soit en meme temps copier sur le fichier.ini
(est ce deja possible).
merci d'avance

"Patrice Henrio" a écrit :

Déjà remplace tous les

If <var> = true then

par

If <var> then

ça ne change pas le fonctionnement mais c'est plus propre (discussion
déjà
tenue sur ce forum).

Pour ton problème, il me semble qu'un tableau de 28 entiers (voire byte)
ferait l'affaire : dans ce tableau je mets les troisième nombre de
l'adresse
(puisque tu les connais)

Donc T(1 to 28) as byte

Ensuite, au lieu d'écrire une boucle do, tu peux utiliser un for next
For I=1 to 28
adr3=T(I)
Next I

> If Option4.Value = True Then
> 'je tape le premier champ
> Adr2Start = 22
> Adr2End = 22
> Adr3Start = 5
> Adr3End = 5
> Fin = 254
> End If
devient

If Option4.Value Then
'je tape le premier champ
Adr2Start = 22
Adr2End = 22
Adr3Start = T(1)
Adr3End = T(28)
Fin = 254
End If

> Loop
> Adr3Start = Adr3Start + 1
devient

If Option4.Value then
I=I+1
Adr3Start=T(I)
Else
Adr3Start­r3Start+1
End If

Quelques conseils supplémentaires, les noms des variables doivent être
adaptées au problème, ici adr3Start n'est l'adresse de départ mais
l'adresse
courante qui parcourt la plage de Start à End, il serait donc plus
judicieux
d'écrire adr3 tout seul, voir définr un type adr de la façon suivante

type adresse
champ1 as byte
champ2 as byte
champ3 as byte
champ4 as byte
end type
Encore mieux un objet dont les propriétés permettraient de gérer
l'affichage
et le valeur
une propriété Adresse
AdresseIp(A as byte, B as byte, C as byte, D as byte) as double
AdresseIp=D+256*(C+256*(B+256*A))
fin

.... etc

"squat541" a écrit dans le message
de
news:
> Je vous remercie tous de vous intéresser à mon cas,c presque ca sauf
> que
> je
> veux pouvoir les choisirs et pas aleatoire sinon c une bonne idée.je
> vous
> met
> le prog du bouton commande qui vous aidera a me comprendre
> Private Sub Command1_Click()
> If Command1.Caption = "Analyse" Then
> Command1.Caption = "Stopper"
> Dim Depart As Integer 'variables utilisées pour la barre
> Dim Fin As Integer 'de défilement
> Dim Iptest As String
> Dim Result As String
> Dim Adr1Start As Integer
> Dim Adr1End As Integer
> Dim Adr2Start As Integer 'variables utilisées pour les
> Dim Adr2End As Integer 'adresses Ip
> Dim Adr3Start As Integer
> Dim Adr3End As Integer
> Dim Cpt As Integer 'Utilisée pour définir le dernier champ
> 'de l'adresse IP
> '********************
> '* initialistaion *
> '********************
> ListView1.ListItems.Clear
> Depart = 0
> If Option1.Value = True Then
> Adr2Start = 0
> Adr2End = 255
> Adr3Start = 0
> Adr3End = 255
> Fin = 766
> End If
> If Option2.Value = True Then
> Adr2Start = Val(Text4.Text)
> Adr2End = Val(Text4.Text)
> Adr3Start = 0
> Adr3End = 255
> Fin = 510
> End If
> If Option3.Value = True Then
> Adr2Start = Val(Text4.Text)
> Adr2End = Val(Text4.Text)
> Adr3Start = Val(Text5.Text)
> Adr3End = Val(Text5.Text
> Fin = 254
> End If
> If Option4.Value = True Then
> 'je tape le premier champ
> Adr2Start = 22
> Adr2End = 22
> Adr3Start = 5
> Adr3End = 5
> Fin = 254
> End If
> ProgressBar1.Visible = True
> ProgressBar1.Max = Fin
> ProgressBar1.Min = Depart
> Do Until Adr2Start > Adr2End
> 'boucle correspondant au deuxième champs de l'adresse IP
> Do Until Adr3Start > Adr3End
> 'Boucle correspondant au troisième champs de l'adresse IP
> 'réinitialisation de cpt
> Cpt = 1
> 'Cpt = 100
> Do Until Cpt > 254
> 'boucle correspondant au quetrième champs de l'adresse IP
> If Command1.Caption = "Analyse" Then Exit Sub
> 'Définition de l'adresse IP à tester
> Iptest = Text3.Text + "." & Adr2Start & "." &
> Adr3Start
> & "." & Cpt
> DoEvents
> Result = Echo(Iptest)
> With ListView1.ListItems.Add
> .Text = Iptest
> If Result = "Failure" Then
> .SubItems(2) = Result
> DoEvents
> Enregistrement Iptest, False
> Else
> '.SubItems(1) = GetHostName(ConvertIp(Iptest))
> 'Dim test As Double
> 'test = CDbl(ConvertIp(Iptest))
> ' On Error Resume Next
> '.SubItems(1) >> > gethostbyaddr(CLng(ConvertIp(Iptest)), 4, AF_INET)
> '.SubItems(1) >> > gethostbyaddr(ConvertIp(Iptest),
> 4, AF_INET)
> '.SubItems(1) >> > GetHostName(CLng(ConvertIp(Iptest)))
> DoEvents
> '.SubItems(1) = HostName(Iptest)
> .SubItems(1) = GetHostNameFromIP(.Text)
> DoEvents
> Enregistrement Iptest, True
> End If
> End With
> Cpt = Cpt + 1
> Depart = Depart + 1
> ProgressBar1.Value = Depart
> Loop
> Adr3Start = Adr3Start + 1
> Loop
> Adr2Start = Adr2Start + 1
> Loop
>
> ProgressBar1.Visible = False
>
> Else
> ProgressBar1.Visible = False
> Command1.Caption = "Analyse"
> End If
>
> End Sub
>
> Voila mon prob ce trouve a l'option 4,je cherche a modifier le 3eme
> champ
> en
> lui donnant 28 valeur mais que je ne modifie pas ces 28 reseau
> corresponde
> au
> reseau d'une entreprise,ce sont des adresses qui ne change pas.
> un exemple 85.22.5.(0à255)
> 85.22.10.(0à255)
> 85.22.18.(0à255)
> :
> :
> je modifie seulement le troisieme champ je choisie les 28 et ca reste
> toujours meme.si j'explique mal dit le moi je detaillerai plus.
>
>
> "LE TROLL" a écrit :
>
>> Oh là mes brave:
>>
>> L'exemple indique pour le 4eme groupe IP (1, 5, 79...), et
>> il dit "ip mais qui NE se suivent", donc c'est bien
>> traitement aléatoire qu'il faut mettre dans la boucle, en
>> vérifiant que l'aléatoire n'a pas causé de mitoyenneté d'IP,
>> moi y'en a m'essayer à ce jeu:
>> -----------------------
>>
>> Sub cree_ip()
>> Dim i As Long
>> Dim j As Long
>> Dim k As Long
>> Dim ip(256) As Long
>> Dim ip_ok(30) As Long ' ip retenues
>> Dim hasard As Long
>> Dim presente As String
>> Dim trans As Long
>> '
>> For i = 0 To 255 ' choix des ip
>> ip(i) = Format(i, "000")
>> Next i
>> Randomize
>> hasard = 0
>> '
>> For i = 1 To 30
>> Do While ip(hasard) = 256 ' = déjà choisit
>> hasard = Int((255 - 0 + 1) * Rnd + 0) ' pseudo
>> aléatoire
>> Loop
>> If hasard > 0 Then ip(hasard - 1) = 256 ' enlève - 1:
>> interdit mitoyenneté
>> ip(hasard) = 256 ' ip à ne plus sélectionner
>> ip_ok(i) = hasard ' ip sélectionnée
>> If hasard < 255 Then ip(hasard + 1) = 256 ' enlève + 1:
>> interdit mitoyenneté
>> Next i
>> '
>> For i = 1 To 30 ' tri croissant
>> For j = 1 To 30
>> For k = 1 To 30
>> If j = k Then Exit For
>> If ip_ok(j) < ip_ok(k) Then
>> trans = ip_ok(j)
>> ip_ok(j) = ip_ok(k)
>> ip_ok(k) = trans
>> Exit For
>> End If
>> Next k
>> Next j
>> Next i
>> '
>> presente = "" ' présentation
>> For i = 1 To 30
>> presente = presente & Format(ip_ok(i), "000") & vbLf
>> Next i
>> MsgBox presente, vbInformation
>> End Sub
>> -----------------------testé OK
>>
>>
>> "squat541" a écrit dans
>> le message de news:
>>
>> > salut a tous,voila j'explique,g un prog qui me liste tout
>> > les ip des adresses
>> > de classe a,b,c.
>> > par exemple,je tape 85.22.55. adresse de classe c,et il
>> > me sort tout les ip
>> > du reseau 85.22.55. (de 0 a 255).
>> > je voudrais afficher seulement 30 ip mais qui ne suivent
>> > pas85.22.55.(1,5 ,
>> > 79,101, 103,119.....),quel boucle je dois utiliser pour
>> > faire cela vu que ce
>> > n'est pas des chiffres qui se suivent?
>> > merci de repondre
>>
>>
>>







1 2