Se connecter avec
S'enregistrer | Connectez-vous

Test deux valeur

Dernière réponse : dans Programmation

Bonjour,
je suis debutante en vba, et je voudrais à partir d'un userform saisir date de debut et date de fin et cliquer sur un bouton pour afficher le nombre de fois où j'ai le mot vrai et le mot faux, et cela à partir d'un fichier excel.
Mon fichier excel est comme ceci:
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

Autres pages sur : test valeur

Lassé par la pub ? Créez un compte
Expert Programmation

salut sisi,

commence par mettre en forme ton code avec la balises [code] prévu a cet effet..
(tu respectera ainsi les règles du forum)

Ensuite pour ton code si je comprends bien tu le place derrière le bouton OK (commandbutton1).
Tu veux récupérer la date de début et celle de fin et, pour toute les dates comprises entre les 2 rentrées, et vérifier si tu as sur la même ligne mais ds une autre cellule un vrai ou un faux ?

j'ai tout bon ?

alors, commençons par ce code... c'est immonde !!!

pour la déclaration de variables :
  1. Dim i, nb_Vrai, nb_Faux, j, debut, fin As Integer

VBA sous excel ne comprend pas ce que tu fais qd tu met des virgules entre tes variables a déclarer dc pour lui ce que tu as fait revient a dire
i , nb_vrai,nb_faux, j, debut -> variant
et fin -> integer !!!

déclare une variable par ligne :
  1. dim i as integer
  2. dim j as integer
  3. [...]


ensuite pour le do [...] loop ok mais ca suppose que ton fichier soit classé dans l'ordre pour la colonne date

ensuite : tu compare la textbox a quoi ?????
défini la feuille sur laquelle se trouve les cellules que tu veux comparer !!

ensuite on met rien après le Next (pas de i)
ok pour la msgbox (attention aux espaces avant et après &)

voila, corrige ca déja


Expert Programmation

Bonjour, et bienvenue.

Débutante en VBA ! En forum aussi, hein ! :o 
Toute pièce de code doit être publiée entre les balises [code][/code], conformément au règlement, que je t'invite à lire, puis à respecter.

Or donc, ton code est très mal présenté, aussi ne le lisé-je pas. Moi, j'attends que tu modifies ton message. Mais que cela ne m'empêche pas de te livrer quelques réflexions pertinentes.

Et si tu te servais de la fonction Excel =Somme.Si() ?
Expert Programmation

>>> ensuite on met rien après le Next (pas de i)
Si, Oozenot, en 1985, on faisait comme ça :lol: 
Depuis, on a inventé l'indentation, que la balise [code] de ce site permet de respecter.

>>pour la déclaration de variables : VBA sous excel
Cela reste vrai pour VB tout court.
C'est très joli de mettre plusieurs lignes (c'est comme ça que je fais), mais on peut aussi tout mettre sur une seule ligne :
  1. Dim i As Integer, nb_Vrai As Integer, nb_Faux As Integer, j As Integer, debut As Integer, fin As Integer
Je dis ça pour les ceux-ce qui aiment tous mettre sur une même ligne (Hein Oozenot ;)  )

>>> ensuite : tu compare la textbox a quoi ?????

je compare ma textbox1 et textbox2 avec ma colonne "date" qui est sur le fichier excel et qui a la forme MM/JJ/AAAA classé par ordre chronologique.
donc je parcours la colonne date et je teste la date de la valeur du textbox1 avec la date de la valeur de Cells(i,1) et la même chose pour textbox2, quand je trouve l'intervalle je calcule le nombre de faux et de vrai qui existe entre les deux valeurs de dates que j'ai donné dans les textboxs.

voici le code
  1. Private Sub CommandButton1_Click()
  2. Dim i As Integer
  3. Dim nb_Vrai As Integer
  4. Dim nb_Faux As Integer
  5. Dim j As Integer
  6. Dim debut As Integer
  7. Dim fin As Integer
  8.  
  9. nb_Vrai = 0
  10. nb_Faux = 0
  11.  
  12. i = 4
  13. Do While Cells(i, 1).Value <= TextBox1.Value
  14.  
  15. i = i + 1
  16. Loop
  17.  
  18. debut = i
  19. j = i
  20.  
  21. Do While Cells(i, 1).Value <= TextBox2.Value
  22.  
  23. j = j + 1
  24. Loop
  25. fin = j - 1
  26.  
  27.  
  28. For i = debut To fin
  29.  
  30. If Cells(i, 2).Value = "VRAI" Then
  31. nb_Vrai = nb_Vrai + 1
  32. End If
  33. If Cells(i, 2).Value = "FAUX" Then
  34. nb_Faux = nb_Faux + 1
  35. End If
  36.  
  37. Next
  38.  
  39.  
  40.  
  41.  
  42. MsgBox "Nombre de vrai : " & nb_Vrai & " et nombre de faux : " & nb_Faux
  43.  
  44.  
  45. End Sub

Expert Programmation

salut sisi,

ceque j'entendais par
Citation :
tu la compare a quoi ???
c'est que justement excel ne sait pas de quelle
  1. Cells(i, 1).Value

tu veux parler.
imagine tu as 2 feuilles ouvertes sous excel donc deux cellule (i,1) ( une sur chaque feuille) et excel ne sait pas de laquelle tu parles. Pour remédier a ce probleme : déclare tes feuilles, comme ca, tu indique a excel quelle feuille contient la cellule qui t'interesse

expl : tu a une feuille compta
  1. dim ws_1 as worksheet
  2.  
  3. set ws_1 = Worksheets("compta")
  4. [...]


je l'ai appellé ws_1 (pour que tu comprenne) mais il faut absolument que tu trouve un nom explicite !!

j'ai precisé la feuille sur laquelle je vais travailler mais il ya un pb encore, les valeurs de nb_vrai et nb_faux sont toujours à 0, j'ai aussi declaré
  1. Dim DateMin as date
  2. Dim DateMax as date
  3. [\code]
  4.  
  5. mais ça marche pas, j pense que c'est au niveau de la comparaison entre les dates saisies du texbox1 et textbox2 avec la colonne Date au niveau de la feuille Excel. voci le code :
  6. [code]
  7. Dim calcul As Worksheet
  8. Set calcul = Worksheets("feuille1")
  9. i = 2
  10. nb_Vrai = 0
  11. nb_Faux = 0
  12. DateMin = TextBox1.Value
  13. DateMax = TextBox2.Value
  14. Do While calcul.Cells(i, 1).Value <> "" 'Tant que la cellule n'est pas vide
  15. If DateMin <= calcul.Cells(i, 1).Value And DateMax >= calcul.Cells(i, 1).Value Then
  16.  
  17. If calcul.Cells(i, 2).Value = "VRAI" Then
  18.  
  19. nb_Vrai = nb_Vrai + 1 'Incrémente si la cellule contient 'Vrai'
  20. End If
  21. If calcul.Cells(i, 2).Value = "FAUX" Then
  22. nb_Faux = nb_Faux + 1 'Incrémente si la cellule contient 'Faux'
  23. End If
  24. End If
  25. i = i + 1 'Passe à la ligne suivante
  26. Loop
  27.  
  28. MsgBox "Nombre de vrai : " & nb_Vrai & " et nombre de faux : " & nb_Faux
Expert Programmation

salut sisi,

ah, c'est déja mieux...mais...
1. pour insérer des commentaires sous VBA utilise le signe ' avant ce que tu veux mettre (plutot que de mettre une balise). Les commentaires s'affichent en vert sous VBA ;) 

2. tu n'as pas déclarer i , nb_Vrai et nb_Faux !! :o 

3. :
  1. DateMin = TextBox1.Value
  2. DateMax = TextBox2.Value

bien mais imagine que tu ais autre chose que des dates dedans ? Renseigne toi sur CDate() et/ou ISdate()
4.
  1. If DateMin <= calcul.Cells(i, 1).Value And DateMax >= calcul.Cells(i, 1).Value Then
  2.  
  3. If calcul.Cells(i, 2).Value = "VRAI" Then
  4.  
  5. nb_Vrai = nb_Vrai + 1 'Incrémente si la cellule contient 'Vrai'
  6. End If
  7. If calcul.Cells(i, 2).Value = "FAUX" Then
  8. nb_Faux = nb_Faux + 1 'Incrémente si la cellule contient 'Faux'
  9. End If
  10. End If

c'est quoi cette manie de recommencer une boucle if pour chaque nouvel argument !! :non:  utilise Elseif

5. Es tu sure d'avoir dans tes cellules bien "VRAI" et non pas "Vrai" ou autres ? Sache qu'en programmation VBA (ou autre) on fait la différence entre majuscule et minuscule ce qu'on appelle communément la casse
Pour remédier a se probleme, dirige toi vers les fonctions LCase() ou UCase()

.... je te laisse nous arranger tout ca !!

a tres vite ... :D 
Expert Programmation

Attention. Il ne faut pas confondre ce qu'affiche Excel et ce que contient réellement la cellule.

Pour le cas particulier des booléens, EXCEL affiche en français VRAI mais VBA/Excel considère que la valeur est "Vrai". Il est donc plus judicieux d'écrire :
  1. If calcul.Cells(i, 2).Value = True Then
  2. If calcul.Cells(i, 2).Value = False Then
Notez bien que les mots True et False ne sont pas à mettre entre guillemets. Il s'agit de mots-clef du langage. Cette écriture, puisqu'il s'agit de logique de Boole, peut se simplifier ainsi :
  1. If calcul.Cells(i, 2).Value Then
  2. If Not calcul.Cells(i, 2).Value Then


--------------

Sur PrésencePC, seuls les commentaires C/C++/Java sont peints en vert.
Alors ayez l'élégance de commencer vos commentaires VB* par '//
  1. ' // Commentaire VB en Vert sur présence PC
  2. print "C'est plus joli, non ?"
Lassé par la pub ? Créez un compte
  • Contenus similaires :
Tags :