Parcours de cellule dans un range de colonne excel

Résolu
sat70 Messages postés 5 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 9 mars 2011 - 2 déc. 2010 à 20:14
sat70 Messages postés 5 Date d'inscription lundi 14 juin 2004 Statut Membre Derniè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 :)

4 réponses

marion8316 Messages postés 75 Date d'inscription mercredi 17 août 2011 Statut Membre Dernière intervention 27 septembre 2011 1
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

Next rwindex

Next Colindex

'
'
MsgBox "Première colonne : " & Wligne(0) & " * Deuxième colonne : " & Wligne(1) & " * Troisième colonne : " & Wligne(2)


End Sub
3
sat70 Messages postés 5 Date d'inscription lundi 14 juin 2004 Statut Membre Derniè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 ?

Voici mon tableau de test :
  |   A    |   B   |   C    |
  |-------------------------|
1 |                         |
  |     1 & 2 Fussionées    |
2 |                         |
  |-------------------------|    
3 | Site 1 | Site2 | Site3  |
  |-------------------------|
4 | IP1-1  | IP2-1 | IP3-1  |
  |-------------------------|
5 |        |       | IP3-2  |
  |-------------------------|


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 ^^
0
sat70 Messages postés 5 Date d'inscription lundi 14 juin 2004 Statut Membre Derniè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 :/
0
sat70 Messages postés 5 Date d'inscription lundi 14 juin 2004 Statut Membre Derniè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 :)
0
Rejoignez-nous