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
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
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 :
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 :
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
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 :
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 :
dim i as integer
dim j as integer
[...]
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
Bonjour, et bienvenue.
Débutante en VBA ! En forum aussi, hein !
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() ?
Débutante en VBA ! En forum aussi, hein !
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() ?
>>> ensuite on met rien après le Next (pas de i)
Si, Oozenot, en 1985, on faisait comme ça
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 :
)
Si, Oozenot, en 1985, on faisait comme ça
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 :
Je dis ça pour les ceux-ce qui aiment tous mettre sur une même ligne (Hein Oozenot
Dim i As Integer, nb_Vrai As Integer, nb_Faux As Integer, j As Integer, debut As Integer, fin As Integer
)
>>> 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
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
Private Sub CommandButton1_Click()
Dim i As Integer
Dim nb_Vrai As Integer
Dim nb_Faux As Integer
Dim j As Integer
Dim debut As Integer
Dim fin As Integer
nb_Vrai = 0
nb_Faux = 0
i = 4
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, 2).Value = "VRAI" Then
nb_Vrai = nb_Vrai + 1
End If
If Cells(i, 2).Value = "FAUX" Then
nb_Faux = nb_Faux + 1
End If
Next
MsgBox "Nombre de vrai : " & nb_Vrai & " et nombre de faux : " & nb_Faux
End Sub
salut sisi,
ceque j'entendais par c'est que justement excel ne sait pas de quelle
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
je l'ai appellé ws_1 (pour que tu comprenne) mais il faut absolument que tu trouve un nom explicite !!
ceque j'entendais par
Citation :
tu la compare a quoi ???
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
dim ws_1 as worksheet
set ws_1 = Worksheets("compta")
[...]
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é
Dim DateMin as date
Dim DateMax as date
[\code]
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 :
[code]
Dim calcul As Worksheet
Set calcul = Worksheets("feuille1")
i = 2
nb_Vrai = 0
nb_Faux = 0
DateMin = TextBox1.Value
DateMax = TextBox2.Value
Do While calcul.Cells(i, 1).Value <> "" 'Tant que la cellule n'est pas vide
If DateMin <= calcul.Cells(i, 1).Value And DateMax >= calcul.Cells(i, 1).Value Then
If calcul.Cells(i, 2).Value = "VRAI" Then
nb_Vrai = nb_Vrai + 1 'Incrémente si la cellule contient 'Vrai'
End If
If calcul.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
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 !!
3. :
bien mais imagine que tu ais autre chose que des dates dedans ? Renseigne toi sur CDate() et/ou ISdate()
4.
c'est quoi cette manie de recommencer une boucle if pour chaque nouvel argument !!
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 ...
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 !!
3. :
DateMin = TextBox1.Value
DateMax = TextBox2.Value
bien mais imagine que tu ais autre chose que des dates dedans ? Renseigne toi sur CDate() et/ou ISdate()
4.
If DateMin <= calcul.Cells(i, 1).Value And DateMax >= calcul.Cells(i, 1).Value Then
If calcul.Cells(i, 2).Value = "VRAI" Then
nb_Vrai = nb_Vrai + 1 'Incrémente si la cellule contient 'Vrai'
End If
If calcul.Cells(i, 2).Value = "FAUX" Then
nb_Faux = nb_Faux + 1 'Incrémente si la cellule contient 'Faux'
End If
End If
c'est quoi cette manie de recommencer une boucle if pour chaque nouvel argument !!
utilise Elseif5. 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 ...
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 :
--------------
Sur PrésencePC, seuls les commentaires C/C++/Java sont peints en vert.
Alors ayez l'élégance de commencer vos commentaires VB* par '//
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 :
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 :
If calcul.Cells(i, 2).Value = True Then If calcul.Cells(i, 2).Value = False Then
If calcul.Cells(i, 2).Value Then 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 '//
' // Commentaire VB en Vert sur présence PC print "C'est plus joli, non ?"
Lassé par la pub ? Créez un compte