Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Microsoft 365somme de 1 sur feul2 données sur feuil1
Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
En feuil1 j'ai un tableau dont un 1 apparait si conditon avec fourmule
J' additionne le nb de 1 sur feuil2 mais resultat 0
si je tape un 1 numerique sans formuledans feuil1, ca fonctionne 🤔
ma formule est: = sumif(feuil1!A3:A60;feuil2!B3;feuil1!F$3:F$60)
feuil1!A3:A60 correspond a la plage de recherche
feuil2! B3 correspond a la valeur recherché
feuil1!F$3:F$60 correspond a la somme des 1 trouvé
merci pour vos retour et bonne journée ensoleillée🥵
Effectivement c'était tout bête. les fameux guillmets .Pourtant JHA me l'avait dit😉
Merci a vous. 👍 vous etes des chefs
Je pensais faire un userform feuil3 de recherche entre deux dates. debut TextBox1 et fin TextBox2
Le resultat afficherait toutes les dates debut et fin dans TextBox3 ainsi que nb total dans Label4 de la personne en label 3 Application.UserName)
* sur "Feuil1" : c'est inchangé : il y a les mêmes données ; ne change pas de feuille, et lis la suite.
* fais Ctrl e ➯ ça ouvre ton formulaire, de la même façon que si tu avais cliqué sur "Bouton 2" de "Feuil3", mais c'est plus pratique car on voit les données de ton tableau ; tu peux faire Ctrl e depuis chacune des 3 feuilles : ça fera pareil ; note que le nom de l'utilisateur est bien affiché entre les 2 champs "date" ; en bas à droite, le cadre pour "nombre :" est vide.
* le formulaire est donc affiché à l'écran, et tu es sur le 1er champ de saisie : date début ; appuie sur la touche Échap ➯ ça ferme le formulaire ; ça permet de quitter facilement si tu changes d'avis et que tu ne veux plus faire de recherche ; ça serait idem si tu avais appuyé sur Échap en étant sur le 2ème champ de saisie date fin.
* fais de nouveau Ctrl e ➯ le formulaire s'affiche de nouveau ; pour date début : saisis "1/1" (comme y'a pas d'année, c'est l'année en cours, donc idem que si tu avais saisi 1/1/2022) ; appuie sur la touche TAB(tabulation) : ça va sur le champ date fin ; saisis "5/3" (donc idem que si tu avais saisi 5/3/2022).
* appuie sur la touche TAB : ça va sur le bouton Valider ; appuie sur Espace : idem qu'un clic sur ce bouton ; ça fait la recherche, les résultats sont affichés dans la fenêtre, et le nombre d'items trouvés est affiché en bas à droite ; pour une nouvelle recherche, il te suffit d'aller sur le champ date début et de saisir d'autres dates ; bien sûr, ça aurait été nettement mieux que ton tableau comporte plus de données, avec des dates différentes : on aurait pu mieux tester, en faisant plusieurs essais ; alors à toi de faire plus de tests.
* si tu es toujours sur le bouton Valider, appuie sur TAB ➯ ça va sur le bouton Fermer ; appuie sur Espace : ça ferme le formulaire ; fin de la démo, il te reste à lire le code VBA.
code VBA de UserForm1(42 lignes) :
VB:
Option Explicit
Private Sub cmdOK_Click()
If Date1 = "" Or Date2 = "" Then Exit Sub
If Not IsDate(Date1) Or Not IsDate(Date2) Then Exit Sub
Dim D1 As Date, D2 As Date, D3 As Date, D4 As Date
Dim chn$, n%, dlg&, lig&
D1 = DateValue(Date1): D2 = DateValue(Date2)
With Worksheets("Feuil1")
dlg = .Cells(Rows.Count, 1).End(3).Row: If dlg < 3 Then Exit Sub
For lig = 3 To dlg
With .Cells(lig, 1)
If Not IsEmpty(.Offset(, 1)) And Not IsEmpty(.Offset(, 2)) Then
If IsDate(.Offset(, 1)) And IsDate(.Offset(, 2)) Then
D3 = .Offset(, 1): D4 = .Offset(, 2)
If D3 >= D1 And D4 <= D2 Then
chn = chn & D3 & " " & D4 & " " & .Value & vbLf
n = n + 1
End If
End If
End If
End With
Next lig
lbResult = chn: lbNb = n
End With
End Sub
Private Sub Date1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = 27 Then Unload Me
End Sub
Private Sub Date2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = 27 Then Unload Me
End Sub
Private Sub cmdClose_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize()
lbNom = Application.UserName
End Sub
Merci pou la macro Soan. Tu es un chef😉👋
je cherche comment alimenter combobox1 de l userform avec les donnéees de la feuille4 du même fichier
l'objectif est de sélectionner un nom et date debut et fin puis valider. apparait tous les enregistrement de la personne.
Je sais faire quand c'est sur la meme feuille mais je bloque🤫
Merci a vous
fais Ctrl e ➯ ça ouvre le formulaire ; j'ai mis les champs des 2 dates côte à côte car c'est plus logique pour la saisie des 2 dates ; je ne l'avais pas fait avant car le champ lbNom était juste pour afficher le UserName.
quand tu saisis uniquement les 2 dates, sans choisir de nom à droite, ça fait pareil qu'avant : ça montrera toutes les lignes dont les dates correspondent, quelque soit le nom.
bien sûr, si à droite tu choisis aussi un nom, ça montrera les lignes adéquates de cette personne, et pour laquelle les dates saisies correspondent.
sur le champ cbNom, tu peux aussi appuyer sur Echap pour quitter le UserForm ; c'est pratique au cas où tu changes d'avis et que tu ne veux plus faire de recherche.
* du 1/1 au 5/3, pour CRISTELLE : ça montre 2 lignes.
* mêmes dates, pour PAUL : ça montre 1 seule ligne
car la ligne 4 sans date fin est ignorée.
* mêmes dates, pour PIERRE, ou RENE, ou JEAN :
ça montre 1 seule ligne, car y'en a qu'une seule.
* mêmes dates, pour ERIC ou JEAN RENE : ça ne
montre rien car y'a aucune ligne avec ce nom.
il ne te reste plus qu'à lire le nouveau code VBA ;
bonne lecture ! 🙂
code VBA de UserForm1(50 lignes) :
VB:
Option Explicit
Private Sub cmdOK_Click()
If Date1 = "" Or Date2 = "" Then Exit Sub
If Not IsDate(Date1) Or Not IsDate(Date2) Then Exit Sub
Dim D1 As Date, D2 As Date, D3 As Date, D4 As Date
Dim chn$, n%, dlg&, lig&
D1 = DateValue(Date1): D2 = DateValue(Date2)
With Worksheets("Feuil1")
dlg = .Cells(Rows.Count, 1).End(3).Row: If dlg < 3 Then Exit Sub
For lig = 3 To dlg
With .Cells(lig, 1)
If Not IsEmpty(.Offset(, 1)) And Not IsEmpty(.Offset(, 2)) Then
If IsDate(.Offset(, 1)) And IsDate(.Offset(, 2)) Then
D3 = .Offset(, 1): D4 = .Offset(, 2)
If D3 >= D1 And D4 <= D2 Then
If cbNom = "" Or (cbNom <> "" And cbNom = .Value) Then
chn = chn & D3 & " " & D4 & " " & .Value & vbLf
n = n + 1
End If
End If
End If
End If
End With
Next lig
lbResult = chn: lbNb = n
End With
End Sub
Private Sub Date1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = 27 Then Unload Me
End Sub
Private Sub Date2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = 27 Then Unload Me
End Sub
Private Sub cbNom_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = 27 Then Unload Me
End Sub
Private Sub cmdClose_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize()
Dim n&
n = Feuil4.Cells(Rows.Count, 1).End(3).Row: If n = 1 Then Exit Sub
cbNom.RowSource = "Feuil4!A2:A" & n
End Sub
pour tes questions en MP, je préfère te répondre ici car ça n'a rien de confidentiel, l'aide en privé est interdite par la Charte du site XLD, et mes réponses seront utiles pour d'autres lecteurs qui n'auraient pas bien compris eux non plus. 🙂
* D1 et D2 sont les 2 dates début et fin saisies dans le formulaire UserForm1
* D3 et D4 sont les 2 dates début et fin de la feuille de calcul (colonnes B et C)
à l'ouverture de UserForm1, le 1er champ qui est sélectionné est Date1 ; le code ci-dessus permet de sortir aussitôt du formulaire si tu appuies sur la touche Echap quand tu es sur le champ Date1 ; ainsi, si tu as fait Ctrl e par erreur, ou si tu te ravises et que tu n'as plus envie de faire une recherche, tu peux quitter le formulaire plus facilement et plus simplement avec un appui sur Echap plutôt que de cliquer avec la souris soit en bas sur le bouton « fermer », soit en haut à droite sur la croix de fermeture du UserForm ; 27 est le code Ascii de la touche Echap ; Unload Me : décharge le formulaire de la mémoire RAM ➯ ça ferme le formulaire en libérant de l'espace mémoire ➯ ça quitte le formulaire ; voici un complément de réponse, même si tu n'as rien demandé pour la sub Date2_KeyPress() :
VB:
Private Sub Date2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = 27 Then Unload Me
End Sub
ici, c'est la même chose pour le champ Date2 ; car même si Date2 n'est pas le 1er champ qui a le focus à l'ouverture de UserForm1, ça te permet de quitter le formulaire si tu te ravises alors que tu es passé au champ Date2 (par un clic sur ce champ ou par un appui sur la touche TAB).
si je souhaite changer de feuil pour récupérer les noms, on est d'accord que je dois modifier Feuil4 & cbNom.RowSource = "Feuil4!A2:A" & n par la nouvelle feuil et colonne.
exact, c'est bien la propriété .RowSource qui est concernée. 🙂
VB:
Private Sub UserForm_Initialize()
Dim n&
n = Feuil4.Cells(Rows.Count, 1).End(3).Row: If n = 1 Then Exit Sub
cbNom.RowSource = "Feuil4!A2:A" & n
End Sub
gilles37 à dit:
Pb, en le faisant, et en vérifiant par débogage pas à pas cbNom.RowSource = "Feuil4!A2:A" & n indique feuil1
* pour cbNom.RowSource = "Feuil4!A2:A" & n : la feuille utilisée est celle qui a pour Nom "Feuil4" ; c'est le .Name de la feuille.
* pour n = Feuil4.Cells(Rows.Count, 1).End(3).Row : la feuille utilisée est celle qui a pour CodeName "Feuil4" ; c'est donc le nom de code de la feuille.
fais Alt F11 ➯ fenêtre "Microsoft Visual Basic pour Applications" ; côté gauche, en haut, il y a l'Explorateur de projets : "Projet - VBAProject" ; juste au dessus de ThisWorkbook, il y a les feuilles du classeur ; exemple : Feuil1(Feuil1) ; le 1er Feuil1 est le nom de code de la feuille (si l'utilisateur change le nom de la feuille : le nom de l'onglet sera différent ; et si le programmeur vba utilise le nom de code de la feuille, ça sera toujours cette même feuille, même si elle a été renommée par l'utilisateur) ; le 2ème Feuil1(entre parenthèses) est le nom de la feuille.
tu as peut-être Feuil4(Feuil1) ? donc Feuil4 est le .CodeName de la feuille, et Feuil1 est le .Name de la feuille ; sans ton classeur, pas évident de voir ce qui cloche ! d'un autre côté, si ça fait uniquement une petite bizarrerie en mode débogage mais qu'à l'exécution du code VBA c'est quand même Feuil4 qui est utilisé, quelque soit son .Name alors c'est OK ! 😃 par contre, si ça écrit sur Feuil1 au lieu de Feuil4, c'est plus embêtant ! 😁 😄 🤣
Je souhaiterai pouvoir avoir un montant(prix) dans userform 3 en fonction du nombre de jour effectues LbNb (userforme3)par une personne.
Le tarif différe entre ldeux categories de personne.
Merci poyr vote aide / support
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD