Parcours de cellule dans un range de colonne excel [Résolu]

Messages postés
5
Date d'inscription
lundi 14 juin 2004
Statut
Membre
Dernière intervention
9 mars 2011
- - Dernière réponse : 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 :)
Afficher la suite 

4 réponses

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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 193 internautes nous ont dit merci ce mois-ci

Commenter la réponse de marion8316
Messages postés
5
Date d'inscription
lundi 14 juin 2004
Statut
Membre
Dernière intervention
9 mars 2011
0
Merci
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 ^^
Commenter la réponse de sat70
Messages postés
5
Date d'inscription
lundi 14 juin 2004
Statut
Membre
Dernière intervention
9 mars 2011
0
Merci
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 :/
Commenter la réponse de sat70
Messages postés
5
Date d'inscription
lundi 14 juin 2004
Statut
Membre
Dernière intervention
9 mars 2011
0
Merci
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 :)
Commenter la réponse de sat70