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 :

Problème dans boucle for et if [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 54
    Points : 34
    Points
    34
    Par défaut Problème dans boucle for et if
    Bonjour à tous,
    Dans la pièce jointe ci-dessous, vous trouverez un exemple de planning avec un userform. Ce que je veux faire, c'est permettre de rentrer les congés d'un technicien. En gros, je choisis le technicien, les dates de début et fin de ses congés, je clique sur "ok" et les cellules correspondant à ses congés se remplissent. Mais mon code ne fonctionne pas tout à fait... Il remplit toutes les lignes du technicien sans se préoccuper des dates. Le voici :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    Private Sub BT_Arrets_Conges_Click()
     
        If Not IsDate(TB_Dbt.Value) Or Not IsDate(TB_Fin.Value) Then
     
            LB_Attention.Visible = True
     
        Else
     
            LB_Attention.Visible = False
            Form_Eric_2.Hide
     
            Dim dbt, fin As Date
            Dim i, j, DernLigne As Integer
     
            dbt = TB_Dbt.Value
            fin = TB_Fin.Value
            DernLigne = Range("B" & Rows.Count).End(xlUp).Row
     
            For i = 6 To DernLigne Step 1
                If Cells(i, 4).NumberFormat = "d-mmm" Then
                    For j = 4 To 8 Step 1
                        If dbt <= Cells(i, j).Value <= fin Then
                            Dim k As Integer
                            k = i + 1
                            While Cells(k, 2).Value <> CB_Collaborateur.Value
                                k = k + 1
                            Wend
                            With Cells(k, j)
                                .Value = CB_Type.Value
                                .Interior.Color = vbBlue
                            End With
                            With Cells(k + 1, j)
                                .Value = CB_Type.Value
                                .Interior.Color = vbBlue
                            End With
                        End If
                    Next
                End If
            Next
     
        End If
     
    End Sub
    Voyez vous ce qui ne va pas ? Merci de votre aide !
    Images attachées Images attachées   

  2. #2
    Membre expérimenté
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Points : 1 580
    Points
    1 580
    Par défaut
    Bonjour,
    Ce qui coince, c'est le test sur les dates. Il est mal interprété par VBA.
    La syntaxe correcte est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If dbt <= Cells(i, j).Value And Cells(i, j).Value <= fin Then

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 54
    Points : 34
    Points
    34
    Par défaut [XL-2007] Problème dans boucle for et if
    Bonjour,
    J'ai modifié le code suite à votre remarque mais là, plus rien ne s'affiche...
    Y aurait-il une autre erreur ???

  4. #4
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 507
    Points : 16 432
    Points
    16 432
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If dbt >= Cells(i, j).Value And Cells(i, j).Value <= fin Then
    Pour compris entre

    Edit : erreur de ma part c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(i, j).Value >= dbt And Cells(i, j).Value <= fin
    Ce qui revient à la proposition de tedo01

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 54
    Points : 34
    Points
    34
    Par défaut [XL-2007] Problème dans boucle for et if
    Avec ce code, il ne considère pas la date de début...

  6. #6
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 507
    Points : 16 432
    Points
    16 432
    Par défaut
    Bonjour

    le Code de tedo01 est le bon : tu peux aussi écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(i, j).Value >= dbt And Cells(i, j).Value <= fin

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 54
    Points : 34
    Points
    34
    Par défaut [XL-2007] Problème dans boucle for et if
    Pareil avec ton code 78chris, rien ne s'affiche... Je vois vraiment pas où j'ai pu faire une erreur...

  8. #8
    Membre expérimenté
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Points : 1 580
    Points
    1 580
    Par défaut
    Bonjour,
    J'ai testé mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If dbt <= Cells(i, j).Value And Cells(i, j).Value <= fin Then
    avec des valeurs en dur comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            'dbt = TB_Dbt.Value
            dbt = DateSerial(2013, 4, 3)
            'fin = TB_Fin.Value
            fin = DateSerial(2013, 4, 5)
    et ça fonctionne.
    Par contre, il y a peut-être un problème de format avec le contenu des TB qui serait mal converti.
    Comment sont alimentées les TB ?

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 54
    Points : 34
    Points
    34
    Par défaut [XL-2007] Problème dans boucle for et if
    Comme tu peux le voir, je ne fais que vérifier le contenu de chaque TB à la première ligne. C'est l'utilisateur qui rentre à la main les dates d'où cette vérification.

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    If Not IsDate(TB_Dbt.Value) Or Not IsDate(TB_Fin.Value) Then
     
            LB_Attention.Visible = True
     
        Else
     
            LB_Attention.Visible = False
            Form_Eric_2.Hide
     
            Dim dbt, fin As Date
            Dim i, j, DernLigne As Integer
     
            dbt = TB_Dbt.Value
            fin = TB_Fin.Value
            DernLigne = Range("B" & Rows.Count).End(xlUp).Row
     
            For i = 6 To DernLigne Step 1
                If Cells(i, 4).NumberFormat = "d-mmm" Then
                    For j = 4 To 8 Step 1
                        If Cells(i, j).Value >= dbt And Cells(i, j).Value <= fin Then
                            Dim k As Integer
                            k = i + 1
                            While Cells(k, 2).Value <> CB_Collaborateur.Value
                                k = k + 1
                            Wend
                            Dim z As Integer
                            For z = 0 To 1 Step 1
                                With Cells(k + z, j)
                                    .Value = CB_Type.Value
                                    .Interior.Color = vbBlue
                                End With
                            Next
                        End If
                    Next
                End If
            Next
     
        End If
     
    End Sub

  10. #10
    Membre expérimenté
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Points : 1 580
    Points
    1 580
    Par défaut
    Re,
    Dans quel format la date est-elle saisie par l'utilisateur ?
    Si c'est avec des /, il peut y avoir mauvaise interprétation (par exemple, l'utilisateur saisit 5/4/2013 et c'est compris comme le 4 mai...)

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 54
    Points : 34
    Points
    34
    Par défaut
    Ben il n'y a pas de restriction pour le format de date saisi par l'utilisateur...

    De plus, les TB ne disposent pas de la propriété .NumberFormat...

  12. #12
    Membre expérimenté
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Points : 1 580
    Points
    1 580
    Par défaut
    Re,
    Ce pourait être une piste d'amélioration :-) Si l'utilisateur saisit autre chose qu'une date, le code plante.
    Pour être sur de ramener la bonne date, je vois plusieurs possibilités :
    1. Choisir un format de saisie sans les /, par exemple AAAAMMJJ ou JJMMAAAA et tranformer le nombre en date dans le code
    2. Faire saisir la date dans 3 TB pour le jour, le mois, l'année et transformer ces 3 valeurs en date dans le code
    3. Faire saisir la date par un contrôle calendrier

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 54
    Points : 34
    Points
    34
    Par défaut [XL-2007] Problème dans boucle for et if
    J'ai trouvé !!!
    J'ai rajouté une synthaxe pour le format comme tu peux le voir ci-dessous
    Merci pour ton aide ça m'a beaucoup aidé.

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    If TB_Dbt.Value <> Format(TB_Dbt.Value, "dd/mm/yy") And TB_Fin.Value <> Format(TB_Fin.Value, "dd/mm/yy") Then
     
            LB_Attention.Visible = True
     
    Else
     
            LB_Attention.Visible = False
            Form_Eric_2.Hide
     
            Dim dbt, fin As Date
            Dim i, j, DernLigne As Integer
     
            dbt = TB_Dbt.Value
            fin = TB_Fin.Value
            DernLigne = Range("B" & Rows.Count).End(xlUp).Row
     
            For i = 6 To DernLigne Step 1
                If Cells(i, 4).NumberFormat = "d-mmm" Then
                    For j = 4 To 8 Step 1
                        If Format(Cells(i, j).Value, "dd/mm/yy") >= dbt And Format(Cells(i, j).Value, "dd/mm/yy") <= fin Then
                            Dim k As Integer
                            k = i + 1
                            While Cells(k, 2).Value <> CB_Collaborateur.Value
                                k = k + 1
                            Wend
                            Dim z As Integer
                            For z = 0 To 1 Step 1
                                With Cells(k + z, j)
                                    .Value = CB_Type.Value
                                    .Interior.Color = vbBlue
                                End With
                            Next
                        End If
                    Next
                End If
            Next
     
    End If

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

Discussions similaires

  1. Problème de soustraction dans Boucle For each
    Par athos7776 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/04/2011, 05h46
  2. Problème d'index dans boucle for
    Par cocacola0589 dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 09/02/2010, 18h22
  3. problème dans boucle for de lecture de fichier ini
    Par chourmo dans le forum Delphi
    Réponses: 3
    Dernier message: 06/07/2006, 09h31
  4. [JLabel] JLabel dans boucle for
    Par clairenes dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 06/01/2006, 00h47
  5. [XML-XPATH] Problème dans un for each
    Par stailer dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 26/12/2005, 12h11

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