VBA boucle, recherche cellule vide

Clément -  
eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   -
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

  1. Clément
     
    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
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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
  2. Polux31 Messages postés 7219 Statut Membre 1 204
     
    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
  3. Clément
     
    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
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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
  4. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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