VBA boucle, recherche cellule vide

Fermé
Clément - 23 juin 2010 à 15:08
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 - 24 juin 2010 à 11:38
Bonjour,

Je demande vos lumières afin d'éclairer les parties sombres d'excel.

Je recherche une boucle qui me permette de scanner une colonne entière jusqu'a la dernière cellule non vide.
Le Hic c'est qu'a l'intérieur de cette colonne se trouve des valeurs et souvent , également des cellules vides.

J'aimerai donc que ma boucle scan la colonne ("E") du worsheets(2) recherche les valeurs min et max , l'affiche dans le worksheets(3) dans la case("D6") pour le max et ("F6") pour le min.

Mais si a l'intérieur de cette colonne se trouve la moindre cellule blanche , au lieu de m'afficher la valeurs max et min on afficherai "default".

Puis après ceci fais on passerai a la colonne suivante et rebelotte et on collerai en ("D7") et ("F7") le min et max ou alors "default" si une autre cellule blanche c'est hissé dans la colonne. Jusqu'à la dernière colonne non vide.

Merci de bien vouloir m'aider car j'avouerai que je test un peu tout et n'importe quoi , sans aucun résultat.

:(

4 réponses

Ayant de gros problème avec les boucles .

j'analyse très bien ce qu'il faut faire , je savais qu'il fallait faire deux boucles imbriqués mais le problème c'est que je ne sais pas le coder car j'ai commencer le VBA il y'a qu'un petit mois pour un stage d'entreprise.

Je connais les bases du vba mais pour la gestion des boucles je voue avouerai que je suis largué complet.

J'ai trouver comment faire la valeur max et min déja après comment instauré sa dans mes boucles , ou les placer? comment afficher default si une cellule est vide . tout sa reste encore super flou pour moi :(

Si quelqu'un peut m'aider un petit peu :/
1
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
24 juin 2010 à 10:38
Si quelqu'un peut m'aider un petit peu
Difficile de t'aider un petit peu sans y passer 5 jours au fur et à mesure que tu avances....
Voici une façon de traiter le problème, à toi de t'obliger à commenter chaque ligne et à demander pour les lignes que tu ne comprends pas.

Sub minMax()
    Dim shS As Worksheet, shD As Worksheet
    Dim dercol As Long, derlig As Long, col As Long, lig As Long
    Dim cpt As Long, mini As Double, maxi As Double, vide As Boolean
    Set shS = Worksheets("Feuil2")
    Set shD = Worksheets("Feuil3")
    With shS
        dercol = .[IV1].End(xlToLeft).Column
        For col = 5 To dercol
            vide = False
            mini = 9 ^ 99
            maxi = -9 ^ 99
            derlig = .Cells(65536, col).End(xlUp).Row
            For lig = 2 To derlig
                If .Cells(lig, col) = "" Then
                    vide = True
                    Exit For
                Else
                    If .Cells(lig, col) < mini Then mini = .Cells(lig, col)
                    If .Cells(lig, col) > maxi Then maxi = .Cells(lig, col)
                End If
            Next lig
            If vide Then
                shD.[D6].Offset(cpt, 0) = "default"
                shD.[D6].Offset(cpt, 2) = "default"
            Else
                shD.[D6].Offset(cpt, 0) = maxi
                shD.[D6].Offset(cpt, 2) = mini
            End If
            cpt = cpt + 1
        Next col
    End With
End Sub


eric
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
24 juin 2010 à 10:25
Bonjour Clément, Bonjour Eric,

Il s'agit ici de faire l'algo adéquat. Si tu ne connais pas la syntaxe VBA, ce n'est pas très grave et pas le plus important, tu trouveras toujours de l'aide pour ça.

Écris ici ton algo en pseudo code, on t'aidera à le traduire en VBA.

;o)
1
Merci eric ton code fonctionne après quelques petite modification.Donc un grand merci pour le temps que tu m'a accorder :)

Seul petit problème.

Lorsqu'une colonne est blanche , au lieu de me retourner la valeur mini et maxi ou default , on me retourne "-2,95126654306528E+94"

Est-il possible de supprimez une colonne si celle si est vide a partir de la ligne 2?

Comme sa je n'aurai pas le problème de ""-2,95126654306528E+94"

Merci a vous =)
1
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
24 juin 2010 à 11:38
Polux à raison, il faut que tu bosses un peu ;-)
Fais-le en pas à pas et regarde la valeur de derlig si la colonne est vide.
Modifie le code en conséquence.
En plus ça t'apprendra comment deboguer (pas à pas, poser des points d'arrets, surveiller des variables, etc).
Assure-toi d'avoir la fenetre 'espion' affichée en bas
eric
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
23 juin 2010 à 18:25
Bonjour,

Il te faut 2 boucles imbriquées, 1 pour les colonnes et 1 pour les lignes à l'intérieur d'une colonne.
Pour t'aider à démarrer :

Connaitre la dernière colonne de la ligne 1 :
dercol = [IV1].End(xlToLeft).Column

Connaitre la dernière ligne de la colonne col :
derlig = Cells(65536, col).End(xlUp).Row

eric
0