sat70
Messages postés5Date d'inscriptionlundi 14 juin 2004StatutMembreDernière intervention 9 mars 2011
-
2 déc. 2010 à 20:14
sat70
Messages postés5Date d'inscriptionlundi 14 juin 2004StatutMembreDernière intervention 9 mars 2011
-
6 déc. 2010 à 14:02
Bonjour,
J'ai un petit soucis de logique mentale sur un parcours de tableau excel via vba ^_^
Je vous explique mon cas... J'ai créer un tableau de 3 colonnes sur X lignes.
Le nombre de ligne m'importe peu car je veux parcourir les cellules de chaque colonne jusqu'à ce que je détecte que la cellule de la colonne est vide.
Ensuite je passe à l'autre colonne et ainsi de suite juqu'à la derniere colonne dans laquelle je détecterai la derniere cellule vide.
Tout ca n'a qu'un but, je viens de me prendre la tete à faire un vrai ping avec vba, et je souhaite parcourir un nombre d'IP sotckées dans ce tableau.
En gros j'ai chercher des parcours avec double boucle for, while mais j'arrive jamais à faire marcher ce vilain code :/
Help please :)
A voir également:
Parcours de cellule dans un range de colonne excel
marion8316
Messages postés75Date d'inscriptionmercredi 17 août 2011StatutMembreDernière intervention27 septembre 20111 4 déc. 2010 à 14:59
Bonjour,
Ci-dessous code qui recherche la première cellule vide d'une colonne et ensuite passe à la deuxième colonne jusqu'a la troisième.
Affichage des cellules vides par le msgbox en fin de la procèdure.
Pour détecter si il a des cellules de vides après la première cellule de vide il faut historiser la dernière cellule de vide et continuer la lecture (ne pas sortir de la boucle)
Didier
----------------------------
Public Sub Recherche()
'
'
'
Dim rwindex As Long, Colindex As Long, Wresultat As Long
Dim Wligne(3) As String
Wresultat = 0
For Colindex = 1 To 3
For rwindex = 1 To 65536
If Application.Worksheets("Feuil1").Cells(rwindex, Colindex) = "" Then
Wligne(Wresultat) = rwindex
Wresultat = Wresultat + 1
Exit For
End If
sat70
Messages postés5Date d'inscriptionlundi 14 juin 2004StatutMembreDernière intervention 9 mars 2011 6 déc. 2010 à 10:03
Merci Didier pour ton aide...
Effectivement je comprend bien comment tu parcours la clonne du coup... C'est comme ca que je voyais l'imbrication, mais pas moyen d'y arriver tout seul...
Mais qu'affiches-tu dans le MSGBox ?
Le numéro de la permiere cellule vide ?
J'aimerais juste inscrire la valeur des cellule pour les utiliser apres dans mon ping... Donc si j'ai bien compris est-ce que de prendre Application.Worksheets("Feuil1").Cells(rwindex, Colindex).Value marcherait ? Je stocke ca dans un string et je l'envoi comme pour mon IP habituel...
Je vais essayer :)
Didier t'es fort avec toi je pense avoir tout compris ^^
sat70
Messages postés5Date d'inscriptionlundi 14 juin 2004StatutMembreDernière intervention 9 mars 2011 6 déc. 2010 à 11:13
D'ailleurs en suivant ton code j'ai essayé d'adapter tout ca, mais y'a un HIC, VBA me dit que mon NEXT se retrouve sans For !?!
Voici ce que j'ai codé... Si quelqu'un voit le soucis je suis prenneur ^^
If SocketsInitialize() Then
Wresultat = 0
'On parcours le tableau de la premiere colonne à la troisieme
For Colindex = 1 To 3
'Puis on recherche les cases vides pour enregistrer les cellules précédantes renseignées.
For rwindex = 3 To 12
'Si la cellule n'est pas vide
If Application.Worksheets("Feuil1").Cells(rwindex, Colindex) <> "" Then
'On affecte la valeur de la cellule à notre variable IP
IP = Application.Worksheets("Feuil1").Cells(rwindex, Colindex).Value
'On resous l'hôte ou l'IP pour garantir une retrocompatibilité de lecture de la case
sIPAddress = GetIPFromHostName(IP)
'on effecture le ping à l'adresse indiquée
Success = Ping(sIPAddress, (IP), ECHO)
End If
'Si La cellule est vide on stocke sa position
'Cette étape ne servira que pour gérer le cas ou il peut avoir une cellule vide entre 2 cellules remplies
If Application.Worksheets("Feuil1").Cells(rwindex, Colindex) = "" Then
Wligne(Wresultat) = rwindex
Wresultat = Wresultat + 1
Exit For
End If
Next rwindex
Next Colindex
SocketsCleanup
Else
' GROS probleme système!
MsgBox "Windows Sockets for 32 bit Windows ne répond pas.", vbCritical
End If
Le top sera de pinguer avec une attente passive toutes les minutes sans figer l'interface USERFORM, mais la ca va se compliquer :/
sat70
Messages postés5Date d'inscriptionlundi 14 juin 2004StatutMembreDernière intervention 9 mars 2011 6 déc. 2010 à 14:02
Dsl j'ai corrigé le code, ca marche.
Il faut pinger toutes les minutes toutes les adresses trouvées à intervalles réguliere de 1s entre chaque. Je suis entrain de chercher :)