IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

fonction booléenne qui renvoie la valeur vraie si les horaires de la colonne sont en ordre croissant


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 27
    Par défaut fonction booléenne qui renvoie la valeur vraie si les horaires de la colonne sont en ordre croissant
    Bonjour comme le titre l indique j ai tenté d'écrire une fonction booléenne qui renvoie la valeur vraie si les horaires de la colonne sont en ordre croissant = false sinon .
    Le problème est que ça ne semble comparer que les deux premières lignes , si je met par exemple 18:00 suivi de 19:00 suivi de 20:00 ca me renvoie faux alors que c'est vrai . Je n'arrive pas a comprendre d'où viens le problème ...


    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    sub croissant () 
    dim i as integer
    dim a as boolean 
     
    do while (cells(i , 2).value <>"")
    if cells(i,2).value < cells(i+1,2).value then 
    cells(16,4).value =true 
    else 
    cell(16,4).value = false 
    end if 
    loop 
    i = i+1 
    end sub
    Merci d avance

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    Beaucoup de points sur lesquels te pencher :
    1) format de tes cellules ?
    2) au départ, i, non initialisé, = 0 (quelle serait la cellule 0,2 ?)
    3) à quoi te sert a ? (tu ne t'en sers pas !
    4) ce que tu as écrit n'est pas une fonction, mais une procédure
    5) si tu ne quittes pas la procédure au premier "Faux" trouvé, elle continue et tout est faussé.
    6) ton incrémentation de i se fait ... hors boucle !!! (I ne change donc pas dans ta boucle et tu compares toujours la ligne 0 (!) avec la ligne 1))

    Je suis surpris que ta boucle s'arrête (je vois personnellement mal comment elle commence et, si elle commence, comment elle ne va pas à l'infini ...) ....

    EDIT : je veux croire que le code que tu montres n'est pas celui que tu utilises (il ne résulte en tout état de cause pas d'un copier/coller de ton code... certaines minuscules ici et là le laissent deviner ...)

  3. #3
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    une proposition qui tient compte des remarques d'ucfoutu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Function Sitrie(rng As Range) As Boolean
    Dim i As Long
    Sitrie = True
    i = 1
    Do
        If rng.Cells(i + 1, 1).Value >= rng.Cells(i, 1).Value Then
            i = i + 1
        Else
            Sitrie = False
            Exit Do
        End If
    Loop Until i = rng.Rows.Count
    End Function

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 27
    Par défaut
    Effectivement je venais de taper le code a la main

    Voici le copier coller

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub croissant()
    Dim i As Integer
    i = 2
    Do While Cells(i, 2) <> ""
    If (Cells(i, 2).Value < Cells(i + 1, 2).Value) Then
    a = True
    Cells(16, 4).Value = a
    Else
    a = False
    Cells(16, 4).Value = a
    End If
    Loop
    i = i + 1
    End Sub
    Bizzarement maintenant j arrive même plus a executer mon code il bloque cela veut dire qu il doit aller jusqu a l infini . Je veux simplement qu il s arrete des qu il rencontre une ligne vide d ou mon <>""

    Sinon d apres tes conseils je devrais plutot ecrire un truc dans ce genre


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub croissant()
    Dim i As Integer
    i = 2
    Do While Cells(i, 2) <> ""
    If (Cells(i, 2).Value < Cells(i + 1, 2).Value) Then
    a = True
    Cells(16, 4).Value = a
    i = i + 1
    Else
    a = False
    Cells(16, 4).Value = a
    exit sub
    End If
    Loop
    End Sub
    merci


    EDIT : je n'avais pas lu ta réponse mercatog je te remercie et ton code marche , mais j aimerai bien savoir d'oùu viens le problème de mon code de débutant

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    et pour corriger ta 2ème proposition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub croissant()
    Dim i As Integer
    Cells(16, 4).Value = True
    i = 3
    Do While Cells(i, 2) <> ""
        If Cells(i - 1, 2).Value <= Cells(i, 2).Value Then
            i = i + 1
        Else
            Cells(16, 4).Value = False
            Exit Do
        End If
    Loop
    End Sub
    Edit, Ton 2ème code fonctionnerait (même si tu ajoutes certaines lignes inutiles)!
    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(i, 2).Value < Cells(i + 1, 2).Value
    La dernière boucle va comparer la cellule vide au delà de la plage des données avec la dernière cellule!!!

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 27
    Par défaut
    OK merci j avais réecrit le code de cette maniere :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub croissant()
    Dim i As Integer
    Cells(16, 4).Value = True
    i = 2
    Do While Cells(i, 2).Value <> ""
    If Cells(i, 2).Value <= Cells(i + 1, 2).Value Then
    i = i + 1
    Else
    Cells(16, 4).Value = False
    Exit Do
    End If
    Loop
    End Sub
    ca me renvoyait tout le temps faux mais avec ton dernier edit j ai compris pourquoi , merci infiniment

  7. #7
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Ce qui devrait pouvoir s'exprimer ainsi, donc (écrit à main levée) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub croissant()
      Dim i As Integer
      i = 2
      Do While Cells(i, 2).Value <> ""
        Cells(16, 4).Value = Cells(i, 2).Value <= Cells(i + 1, 2).Value 
        If  Cells(16, 4).Value = false then exit do
        i = i + 1
      Loop
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Une fonction qui renvoie plusieurs valeurs ?
    Par chuckichucki dans le forum Langage
    Réponses: 9
    Dernier message: 14/01/2011, 14h49
  2. Fonction qui renvoie deux valeurs
    Par Sarune dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 05/11/2008, 17h33
  3. Fonction qui renvoie deux valeurs
    Par Fractal LLG dans le forum Caml
    Réponses: 4
    Dernier message: 22/03/2008, 18h45
  4. Réponses: 5
    Dernier message: 23/05/2007, 20h43
  5. [Système] Fonction qui renvoie plusieurs valeurs
    Par sebhm dans le forum Langage
    Réponses: 6
    Dernier message: 26/01/2007, 09h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo