[VBA]Résolu:Fonction Si à plusieurs conditions en VBA

Jiby_

XLDnaute Nouveau
Bonjour à tous!

Voila, pour un projet de VBA je dois réaliser un calendrier/agenda sous excel.

Pour les plus curieux je peux joindre mon fichier complet (du moins la ou je me suis arrêté).

Je tenais aussi à vous dire (et c'est le plus important) c'est que je n'ai jamais fait de VBA de ma vie. Tout ce que j'ai codé, c'est du bricolage fait avec l'aide excel et quelque exemple du net (je suis étonné d'ailleurs que ça fonctionne et que mon pc n'est pas encore explosé à cause du nombre d'erreur).

Donc pour un soucis de compréhension je souhaiterai que vous m'expliquiez vos solutions à base de commentaire et d'exemple. ^^

Donc voila, pour afficher les tâches que j'ai rentrée precedement dans mon agenda j'utilise la fonction .Autofilter

Cependant j'ai plusieurs critère et comme je ne connais qu'une méthode j'ai rédigé le code de la facon suivant:

Code:
With Worksheets(2)
    .AutoFilterMode = False
    'Ligne de la dernière cellule remplie de la colonne A
    Recherche = .Cells(.Rows.Count, "A").End(xlUp).Row

*
    With .Range("A2:H" & Recherche)
        'Si un item est choisi dans ComboBoxJours alors on filtre la colonne A sur cet item
        If Me.ComboBoxJours.ListIndex > -1 Then .AutoFilter Field:=1, Criteria1:=Me.ComboBoxJours.Value
        'Si un item est choisi dans ComboBoxMois alors on filtre la colonne B sur cet item
        If Me.ComboBoxMois.ListIndex > -1 Then .AutoFilter Field:=2, Criteria1:=Me.ComboBoxMois.Value
        'Si un item est choisi dans ComboBoxAnnees alors on filtre la colonne C sur cet item
        If Me.ComboBoxAnnees.ListIndex > -1 Then .AutoFilter Field:=3, Criteria1:=Me.ComboBoxAnnees.Value
 *       
        
Worksheets(2).Range("A3:H50").Copy
Worksheets(2).Range("R1").PasteSpecial xlPasteAll
AutoFilterMode = False
Unload Me
ActiveSheet.ShowAllData
End With

Bon la partie à la fin c'est un copier-coller et puis on désactive le filtre.

Par contre... La partie entre les étoiles c'est celle qui me pose problème.
En gros on a ca:

Jour Mois Année Taches
1 1 2014 Mécanique
2 2 2014 Maths

ComboboxJours pour les jours
ComboboxMois pour les mois
ComboboxAnnes pour les ans

Pour résumé, je cherche la valeur de ma combobox dans la colonne correspondante des que je choisi un item dans la combobox (What? :confused: ). Le soucis c'est que les 3 fonctions IF sont séparés,ce qui veux dire que si je filtre les Jours sur 1 et le Mois sur 2, même si j'ai aucune valeur 2 dans mon tableau la macro va quand meme me lire les lignes ou la colonne 1 est sur 1.

Pour résoudre le problème j'ai pensais a mettre une fonction ET :

Code:
With Worksheets(2)
    .AutoFilterMode = False
    'Ligne de la dernière cellule remplie de la colonne A
    Recherche = .Cells(.Rows.Count, "A").End(xlUp).Row
    With .Range("A2:H" & Recherche)

        If Me.ComboBoxJours.ListIndex > -1 And  Me.ComboBoxMois.ListIndex > -1 And Me.ComboBoxAnnees.ListIndex > -1 Then
 .AutoFilter Field:=1, Criteria1:=Me.ComboBoxJours.Value And .AutoFilter Field:=2, Criteria1:=Me.ComboBoxMois.Value And .AutoFilter Field:=3, Criteria1:=Me.ComboBoxAnnees.Value

End With

Mais bon j'y croyais pas vraiment et effectivement ça ne marche pas ^^.

Si vous avez une solution, je prends. Et si en plus vous pouvez me joindre un mini classeur excel avec exemple concret je vous en serais extrêmement reconnaissant..!

Cordialement!

Edit: Voici le fichier
Edit: Et sans le mot de passe cette fois
 

Pièces jointes

  • Calendrier(+Ajout_Tache).xlsm
    53.1 KB · Affichages: 60
Dernière édition:

Jack2

XLDnaute Occasionnel
Re : [VBA]Fonction Si a plusieurs conditions et plusieurs ordres

Bonjour Jiby_ et bon courage pour tes débuts en VBA,

Il serait préférable que tu joignes un fichier dans lequel figurerait le résultat de ton projet (sans données confidentielles). Cela permettrait de voir si tout doit être fait en VBA où si l'on peut adapter un des nombreux agendas, plannings et autres, ce qui allégerait le fichier (cf. ma demande de planning de février : https://www.excel-downloads.com/threads/aide-pour-mise-en-forme-conditionnelle.216995/.

A+ Jack2
 

Jiby_

XLDnaute Nouveau
Re : [VBA]Fonction Si a plusieurs conditions et plusieurs ordres

Bonjour Jack2,

C'est vrai que c'est une bonne idée ,le lien que tu m'a donné m’amène sur une autre partie de mon planning que je n'ai pas encore abordé..

Voila j'ai ajouté le fichier au premier message! ^^


Cordialement!

EDIT : Concrètement la partie qui pose problème ce trouve dans l'userform Consulter et sur le bouton Voir Planning
 
Dernière édition:

Jack2

XLDnaute Occasionnel
Re : [VBA]Fonction Si a plusieurs conditions et plusieurs ordres

Re Bonjour,

Ton code est protégé par un mot de passe !

A+ Jack2

Edit est-ce que tu veux que ton calendrier soit automatisé à la manière de JCGL ?
 

Pièces jointes

  • JC Calendrier Pérenne.xlsx
    19.8 KB · Affichages: 50
  • JC Calendrier Pérenne.xlsx
    19.8 KB · Affichages: 54
  • JC Calendrier Pérenne.xlsx
    19.8 KB · Affichages: 55
Dernière édition:

Jiby_

XLDnaute Nouveau
Re : [VBA]Fonction Si a plusieurs conditions et plusieurs ordres

Re ^^,

Le voici déprotégé, désolé j'ai l'habitude de le laisser ouvert du coup je pense pas forcement qu'il y a un mot de passe.

Oui et non, il faudrait un systeme comme le sien mais codé en VBA, je m'y interesserai surement plus tard

Cordialement!
 

Jack2

XLDnaute Occasionnel
Re : [VBA]Fonction Si a plusieurs conditions et plusieurs ordres

Bonjour Jiby_,

Avec Excel 2003, lorsque je veux tester ton code, j'ai "bibliothèque introuvable sur toutes les variables". Quand j’essaye de cocher Outil Référence dans l"éditeur : demande de mot de passe. Ca m'oblige à définir toute tes variables. To ficher sans aucun mot de passe me faciliterait la vie. Merci.

A+Jack2
 

Jiby_

XLDnaute Nouveau
Re : [VBA]Fonction Si a plusieurs conditions et plusieurs ordres

Bonjour Jack2,

Je pense que cette fois ci c'est la bonne. J'ai complètement enlevé le mot de passe normalement. Dans le cas contraire le mot de passe est 1234.

Cordialement!
 

Jiby_

XLDnaute Nouveau
Re : [VBA]Fonction Si a plusieurs conditions et plusieurs ordres

Solution trouvé!

Je suis passé par une Si imbriqué pour que mes filtres ne s'activent seulement quand j'ai tous les critères réunis.

Voici le code:
Code:
With Worksheets(2)
    .AutoFilterMode = False
    'Ligne de la dernière cellule remplie de la colonne A
    Recherche = .Cells(.Rows.Count, "A").End(xlUp).Row
    With .Range("A2:H" & Recherche)
        'Si un item est choisi dans ComboBoxJours alors Si un item est choisi dans ComboBoxMois alors 'Si un item est choisi dans ComboBoxAnnees alors on filtre la colonne A, B et C sur ces items
        If Me.ComboBoxJours.ListIndex > -1 Then If Me.ComboBoxMois.ListIndex > -1 Then If Me.ComboBoxAnnees.ListIndex > -1 Then _
        .AutoFilter Field:=1, Criteria1:=Me.ComboBoxJours.Value
        .AutoFilter Field:=2, Criteria1:=Me.ComboBoxMois.Value
        .AutoFilter Field:=3, Criteria1:=Me.ComboBoxAnnees.Value
End With

Cordialement!
 

Jack2

XLDnaute Occasionnel
Re : [VBA]Résolu:Fonction Si à plusieurs conditions en VBA

Bonjour Jiby_,

Dans le fichier joint, j'ai apporté quelques modifications dans "consulter". La date comporte le nombre de jours pour un mois donné + année bissextile. Par défaut, la date correspond à celle que tu cliques sur "Calendrier Annuel". Elle peut être transposée dans les autres boîtes de dialogue. Par contre, je n'ai pas compris le copier/coller de "Consulter" et je n'ai pas regardé la partie "Ajouter"

A+ Jack2
 

Pièces jointes

  • Calendrier_Tache(1).xlsm
    67.5 KB · Affichages: 46

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof