Parcourir colonne excel VBA

Messages postés
12
Date d'inscription
mercredi 3 décembre 2008
Statut
Membre
Dernière intervention
29 décembre 2010
- - Dernière réponse : cs_Fabrice90
Messages postés
18
Date d'inscription
mardi 19 mai 2009
Statut
Membre
Dernière intervention
16 octobre 2011
- 4 nov. 2010 à 18:30
Bonjour,

j'ai un userform où j'ai deux textbox pour entrer les date et un bouton test.
quand je clique sur le bouton test, il faudrait qu'il m'affiche le nombre de fois où je trouve la désignation vrai ou faux selon le fichier excel ci dessous:

Date Designation
1/10/2000 Vrai
2/03/1999 Vrai
4/05/2006 Faux

c'est pour cela il faut parcourir la colonne date et une une fois il trouve les intervales des dates saisies sur le textbox, on calcule le nombre de fois où la designation vrai ou faux apparait.

Merci pour votre aide
Afficher la suite 

7 réponses

Messages postés
18
Date d'inscription
mardi 19 mai 2009
Statut
Membre
Dernière intervention
16 octobre 2011
1
0
Merci
Salut,

C'est assez simple :
[i]
On lit ligne par ligne tant que la cellule n'est pas vide
On récupère la valeur de la cellule
Si la valeur est 'Vrai' on incrémente 'nb_Vrai'
Si la valeur est 'Faux' on incrémente 'nb_Faux'/i

i = 1
nb_Vrai = 0
nb_Faux = 0

Do While CELLS(i,1).value <> ""                          'Tant que la cellule n'est pas vide
    If CELLS(i,1).value = "Vrai" then
        nb_Vrai = nb_Vrai + 1                            'Incrémente si la cellule contient 'Vrai'
    End If
    If CELLS(i,1).value = "Faux" then
        nb_Faux = nb_Faux + 1                            'Incrémente si la cellule contient 'Faux'
    End If
    i = i + 1                                            'Passe à la ligne suivante
Loop

MsgBox "Nombre de vrai : " & nb_Vrai & " et nombre de faux : " & nb_Faux 


NB :
'CELLS(1,1).value' est la valeur de la cellule ligne 1, colonne 1 (A1)
'CELLS(2,1).value' est la valeur de la cellule ligne 2, colonne 1 (B1)
etc ...

Voilà, j'espère que ça va t'aidé!
Je viens de le codé, je ne l'ai pas testé mais je pense qu'il fonctionne.

Cdlt,
Fabrice
Commenter la réponse de cs_Fabrice90
Messages postés
18
Date d'inscription
mardi 19 mai 2009
Statut
Membre
Dernière intervention
16 octobre 2011
1
0
Merci
Oups, j'ai oublié une condition!^^

i = 1
nb_Vrai = 0
nb_Faux = 0

Do While CELLS(i,1).value <> ""                              'Tant que la cellule n'est pas vide
    If DateMin < CELLS(i,1).value AND DateMax > CELLS(i,1).value then
        If CELLS(i,2).value = "Vrai" then
            nb_Vrai = nb_Vrai + 1                            'Incrémente si la cellule contient 'Vrai'
        End If
        If CELLS(i,2).value = "Faux" then
            nb_Faux = nb_Faux + 1                            'Incrémente si la cellule contient 'Faux'
        End If
    End If
    i = i + 1                                                'Passe à la ligne suivante
Loop

MsgBox "Nombre de vrai : " & nb_Vrai & " et nombre de faux : " & nb_Faux 


C'est mieux comme ça!

Fabrice
Commenter la réponse de cs_Fabrice90
Messages postés
12
Date d'inscription
mercredi 3 décembre 2008
Statut
Membre
Dernière intervention
29 décembre 2010
0
Merci
Merci.

je dois tester par rapport aux dates saisies dans les textbox1 et textbox2 et les comparer avec les dates que j'ai dans mon fichier excel et après faire le calcul du nombre de vrai et faux
Commenter la réponse de siham2010
Messages postés
12
Date d'inscription
mercredi 3 décembre 2008
Statut
Membre
Dernière intervention
29 décembre 2010
0
Merci
mon fichier excel est le suivant:
Date designation
6/1/1950
7/3/1950
8/1/1950
9/1/1950
10/2/1950 VRAI
11/1/1950 VRAI
12/1/1950 VRAI
1/2/1951 VRAI
2/1/1951 VRAI
3/1/1951 VRAI
6/1/1951 FAUX
7/2/1951 FAUX

Le code que j'ai essayé est ce ceci mais ça marche pas:

Private Sub CommandButton1_Click()
Dim i, nb_Vrai, nb_Faux, j, debut, fin As Integer


nb_Vrai = 0
nb_Faux = 0

 i = 5
Do While Cells(i, 1).Value <= TextBox1.Value
                
i = i + 1
Loop

debut = i
j = i

Do While Cells(i, 1).Value <= TextBox2.Value
                
j = j + 1
Loop
fin = j - 1

For i = debut To fin

        If Cells(i, 4).Value = "VRAI" Then
            nb_Vrai = nb_Vrai + 1                            'Incrémente si la cellule contient 'Vrai'
        End If
        If Cells(i, 4).Value = "FAUX" Then
            nb_Faux = nb_Faux + 1                            'Incrémente si la cellule contient 'Faux'
        End If
    
    Next i                                               'Passe à la ligne suivante




'MsgBox "Nombre de vrai : " & nb_Vrai & " et nombre de faux : " & nb_Faux


End Sub




Merci pour votre aide
Commenter la réponse de siham2010
Messages postés
18
Date d'inscription
mardi 19 mai 2009
Statut
Membre
Dernière intervention
16 octobre 2011
1
0
Merci
Salut,

Pourquoi ça ne marche pas? Quel message d'erreur as tu?(si t'en as un) Que récupère tu dans nb_Vrai et nb_Faux?

Je ne comprend pas pourquoi tu fait deux boucles while!...

Le code suivant devrait fonctionner :

Private Sub CommandButton1_Click()

i = 2
nb_Vrai = 0
nb_Faux = 0
DateMin = TextBox1.Value
DateMax = TextBox2.Value

Do While CELLS(i,1).value <> ""                              'Tant que la cellule n'est pas vide
    If DateMin <= CELLS(i,1).value AND DateMax >= CELLS(i,1).value then
        If CELLS(i,2).value = "Vrai" then
            nb_Vrai = nb_Vrai + 1                            'Incrémente si la cellule contient 'Vrai'
        End If
        If CELLS(i,2).value = "Faux" then
            nb_Faux = nb_Faux + 1                            'Incrémente si la cellule contient 'Faux'
        End If
    End If
    i =  i + 1                                                'Passe à la ligne suivante
Loop

MsgBox "Nombre de vrai : " & nb_Vrai & " et nombre de faux : " & nb_Faux

End Sub



NB : 'i' Peut commencer à 2, les conditions si cellule = Vrai (ou Faux) ne vont pas être valable et donc les variables nb_Vrai et nb_Faux ne seront pas incrémentées.

TextBox1 est la date la plus petite saisie et
TextBox2 est la date la plus grande saisie.

Cdlt,
Fabrice
Commenter la réponse de cs_Fabrice90
Messages postés
12
Date d'inscription
mercredi 3 décembre 2008
Statut
Membre
Dernière intervention
29 décembre 2010
0
Merci
il n ya pas de message d'erreur mais on recupere 0 dans nb_vrai et nb_faux. j'ai essayé de preciser sur quelle feuille va travailler et aussi de declarer DateMin et DateMax as Date mais ça ne marche pas.
Dim ws_1 As Worksheet
Set ws_1 = Worksheets("feuille1")
i = 2
nb_Vrai = 0
nb_Faux = 0
DateMin = TextBox1.Value
DateMax = TextBox2.Value
Do While ws_1.Cells(i, 1).Value <> ""                             'Tant que la cellule n'est pas vide
    If DateMin <= ws_1.Cells(i, 1).Value And DateMax >= ws_1.Cells(i, 1).Value Then
    
        If ws_1.Cells(i, 4).Value = "VRAI" Then
        
            nb_Vrai = nb_Vrai + 1                            'Incrémente si la cellule contient 'Vrai'
        End If
        If ws_1.Cells(i, 4).Value = "FAUX" Then
            nb_Faux = nb_Faux + 1                            'Incrémente si la cellule contient 'Faux'
        End If
    End If
    i = i + 1                                                'Passe à la ligne suivante
Loop

'MsgBox "Nombre de vrai : " & nb_Vrai & " et nombre de faux : " & nb_Faux

End Sub





je pense qu'au niveau de la comparaison des deux dates que ça ne marche pas.
Merci pour votre aide
Commenter la réponse de siham2010
Messages postés
18
Date d'inscription
mardi 19 mai 2009
Statut
Membre
Dernière intervention
16 octobre 2011
1
0
Merci
Salut,

J'ai essayé ce code chez moi et ça fonctionne niquel :

Sub Bouton_Clic()

    i = 2
    nb_Vrai = 0
    nb_Faux = 0
    DateMin = CDate(Worksheets("Feuil1").TextBox1.Value)
    DateMax = CDate(Worksheets("Feuil1").TextBox2.Value)
    
    Do While Cells(i, 1).Value <> ""                             'Tant que la cellule n'est pas vide
        If DateMin <= Cells(i, 1).Value And DateMax >= Cells(i, 1).Value Then
            If Cells(i, 2).Value = "Vrai" Then
                nb_Vrai = nb_Vrai + 1                            'Incrémente si la cellule contient 'Vrai'
            End If
            If Cells(i, 2).Value = "Faux" Then
                nb_Faux = nb_Faux + 1                            'Incrémente si la cellule contient 'Faux'
            End If
        End If
        i = i + 1                                                'Passe à la ligne suivante
    Loop
    
    MsgBox "Nombre de vrai : " & nb_Vrai & " et nombre de faux : " & nb_Faux
    
End Sub


La fonction CDate() convertie une chaine en Date.
Normalement tu n'a pas besoin de spécifier la feuille que tu utilise mais on ne sait jamais,
moi j'ai dû lui spécifier la feuille pour récupérer la valeur des TextBoxs.

Si ça ne fonctionne toujours pas (c'est que ta pas de chance!^^) utilise le débeugeur et regarde là ou ça coince.

Fabrice.
Commenter la réponse de cs_Fabrice90