IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Masquer / démasquer des lignes sur critère.


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    681
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 681
    Points : 633
    Points
    633
    Par défaut Masquer / démasquer des lignes sur critère.
    Bonjour à tous,
    J'ai un petit problème à destination des spécialistes en VBA (voir fichier joint). Si une âme charitable pouvait m'aider, je lui en serait très reconnaissant car je débute en VBA et j'en suis à la page 41 de "Programmation VBA pour Excel 2007 pour les nuls" et mon projet devra être terminé avant la fin du livre. Je vois la logique, mais pas la syntaxe.
    A votre bon coeur.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    681
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 681
    Points : 633
    Points
    633
    Par défaut
    Bonsoir,
    J'avais mis ce post dans la partie Excel, mais le modérateur l'a déplacé en me disant que j'aurai plus de réponses dans la partie VBA. C'est raté.

  3. #3
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Citation Envoyé par marc56 Voir le message
    C'est raté.
    Ce qui est raté, c'est la manière dont tu présentes ton problème.

    Montre-nous un code sur lequel tu butes plutôt que de nous jeter ton fichier sans autre explication.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  4. #4
    Membre averti Avatar de tomy7
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    540
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 540
    Points : 391
    Points
    391
    Par défaut re
    tu crée un bouton masquer ou tu ecris ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    dim i as integer 
    for i = 6 to 21 
    if range("C" & i).value = "Archivé" then
    rows(i).hidden = true
    end if 
    next i
    ensuite tu crées le bouton afficher
    ou tu écris :sur ton userform1, tu mets un combobox1 ou tu ecris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    dim i as integer 
    for i = 6 to 21 
    with combobox1
    .additem i
    end with
    next i


    tu crées aussis un bouton sur le userform 1 ok
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    dim i as integer 
    for i = 6 to 21 
    if combobox1.value= i then
    rows(i).hidden = false
    end if 
    next i
    voila
    @+
    tom

    "Barbar : The rest of the warrior"

    Into the wild....

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    681
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 681
    Points : 633
    Points
    633
    Par défaut
    Merci Tomy7, ta réponse me met du baume au cœur.
    Comme je l'ai déjà dit, je suis novice en VBA et il me faut aller doucement.
    J'ai intégré ton code dans mon fichier exemple (voir fichier joint), mais à la place d'un userform, j'ai mis une inputbox car je l'utilisais dans d'autres cas.
    - le code du bouton "Masquer" fonctionne bien, mais dans mon fichier exemple, je n'avais que quelques lignes. En réalité j'en ai bien plus. Comment écrire la boucle qui doit commencer par lire la ligne 6, mais qui doit s'arrêter quand la première cellule A est vide (fin des enregistrements). Si tu peux commenter ton code, ce serait encore mieux. A l'avance, merci.

  6. #6
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonsoir,

    Si je comprend bien ta question, ça devrait donner un truc du genre...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For i = 6 To Range("A65535").End(xlUp).Row
    ...
    ...
    ...
    Next
    Je sais...certains viendront me dire (juste pour m'embêter ) que la ligne 65535 n'est plus d'actualité pour Excel 2007...je suis d'accord mé bon, avant de devoir utiliser la 65536ème ligne, ya de la marge
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  7. #7
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Citation Envoyé par fring Voir le message
    ]Je sais...certains viendront me dire (juste pour m'embêter ) que la ligne 65535 n'est plus d'actualité pour Excel 2007...je suis d'accord mé bon, avant de devoir utiliser la 65536ème ligne, ya de la marge
    SAlut
    Rolff ... ben si les gens s'auto-corrige maintenant ... et nos petits plaisirs alors! Si on peut même plus reprendre les gens....
    [Edit]
    Et pour la partie constructive de mon message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Afficher()
    Dim No_Dos As String
    ' Afficher toutes les lignes d'un dossier
    'Demander le numéro de dossier à afficher, "no_dos" prend la valeur saisie
    No_Dos = InputBox("Entrer le numéro de dossier à afficher, puis cliquer sur OK.")
        Dim i As Integer
        For i = 6 To 21
            If Range("A" & i).Text = No_Dos Then
                Rows(i).Hidden = False
            End If
        Next i
    End Sub
    Pour répondre par avance j'aurais aussi utilisé une boucle for each mais je fait pour que se soit l'évolution du code proposé.
    Sauf que pour etre penible le XlUp ne fonctionnera pas puisque 'il ne tient pas compte des cases cachées :S
    Faudra surement descendre les dans les cellules une par une (donc for each pas possible finalement)

    Petite remarque sur le code Affiché, attention au erreur de conversion, comparait un string et un integer ça donne visiblement rien de bon
    [/Edit]
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    681
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 681
    Points : 633
    Points
    633
    Par défaut
    Bonjour fring,
    Ma question était : Comment sortir de la boucle dès que la première cellule A est vide, pour ne pas mouliner pour rien.

  9. #9
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Lut
    Finalement avec For Each quand même
    J'ai intégré la sortie sur 1er cellule vide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Afficher()
    Dim No_Dos As String
    Dim CelTest As Range
    ' Afficher toutes les lignes d'un dossier
    'Demander le numéro de dossier à afficher, "no_dos" prend la valeur saisie
    No_Dos = InputBox("Entrer le numéro de dossier à afficher, puis cliquer sur OK.")
        Dim i As Integer
        For Each CelTest In Range(Range("A6"), Cells(Rows.Count, "A"))
            If CelTest.Text = "" Then Exit For 'on quite a la 1er ligne vide
            If CelTest.Text = No_Dos Then CelTest.Rows.Hidden = False
        Next
     
    End Sub
    [Edit]
    Et si tu veux garder ta forme de code qui marche tout aussi bien tu peux utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 6 To rows.count
    'et
    If range("A" & i).text = "" then exit for
    [/Edit]



    a++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    681
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 681
    Points : 633
    Points
    633
    Par défaut
    Je suis désolé, mais je ne comprends pas grand chose à vos joutes de codes. Je voulais seulement afficher des lignes masquées dont la valeur de A correspond à "no-dos" et arrêter le balayage dès que la valeur de A est supérieur à celle recherchée, car mes lignes sont toujours ordonnées en ordre croissant sur A.

  11. #11
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Ben ... en plus je vais me faire engueuler... c'est pas beau ça
    J'ai mis des edit dans mon message mais si vraiment c'est necessaire ... voila le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Afficher()
    Dim No_Dos As String
    ' Afficher toutes les lignes d'un dossier
    'Demander le numéro de dossier à afficher, "no_dos" prend la valeur saisie
    No_Dos = InputBox("Entrer le numéro de dossier à afficher, puis cliquer sur OK.")
        Dim i As Integer
        For i = 6 To rows.count
            If range("A" & i).text = "" then Exit For
            If Range("A" & i).Text = No_Dos Then Rows(i).Hidden = False
        Next i
    End Sub
    ++Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  12. #12
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    467
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 467
    Points : 493
    Points
    493
    Par défaut
    Citation Envoyé par marc56 Voir le message
    Bonjour à tous,
    J'ai un petit problème à destination des spécialistes en VBA (voir fichier joint). Si une âme charitable pouvait m'aider, je lui en serait très reconnaissant car je débute en VBA et j'en suis à la page 41 de "Programmation VBA pour Excel 2007 pour les nuls" et mon projet devra être terminé avant la fin du livre. Je vois la logique, mais pas la syntaxe.
    A votre bon coeur.
    Bonsoir
    car je débute en VBA et j'en suis à la page 41 de "Programmation VBA pour Excel 2007 pour les nuls"
    Sincèrement je n'ai rien compris membre éclairé avec une étoile et demi et 300 messages
    !!!!!!!!!!!!!!!!!
    Bonne soirée

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    681
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 681
    Points : 633
    Points
    633
    Par défaut
    Bonjour Qwazerty,
    Je viens de tester tes 2 codes, mais le second me retourne un message de dépassement de capacité. Comme le premier fonctionne, je vais le conserver. Loin de moi l'idée de t'engueuler. Merci encore.

    Pour Abed_H,
    Si j'ai 300 messages, ce n'est pas en VBA, mais simplement en Excel. Ce n'est pas de ma faute si le forum ne fait pas le distingo entre les différentes sections.
    Bonne soirée.

  14. #14
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bon...bon...rassemblons nos neurones

    Marc tu parles de 2 choses différentes, tu veux que la recherche s'arrête lorsqu'elle rencontre une ligne vide ou lorsqu'elle rencontre un n° de dossier supérieur ? (ou les deux pourquoi pas)

    Question subsidiaire : est-il possible d'avoir une ligne vide entre 2 n° de dossier ?

    Dernière question, as-tu disons...plus de 1000 lignes contenant des n° de dossier ? Sinon tu peux tranquillement le laisser mouliner parce que entre une fraction de seconde et un quart de fraction de seconde la différence est minime.
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  15. #15
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Re
    Sorry, je l'avais fait a chaud ... faut juste changer la declaration de i en Long


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Afficher()
    Dim No_Dos As String
    Dim i As Long
    ' Afficher toutes les lignes d'un dossier
    'Demander le numéro de dossier à afficher, "no_dos" prend la valeur saisie
    No_Dos = InputBox("Entrer le numéro de dossier à afficher, puis cliquer sur OK.")
     
        For i = 6 To Rows.Count
            If Range("A" & i).Text = "" Then Exit For
            If Range("A" & i).Text = No_Dos Then Rows(i).Hidden = False
        Next i
    End Sub
    Bonne nuit
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  16. #16
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    467
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 467
    Points : 493
    Points
    493
    Par défaut
    Donc mes excuses sincères marc56.
    Bonne soirée.
    Abed_H

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    681
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 681
    Points : 633
    Points
    633
    Par défaut
    Exacte, au départ je pensais sortir à la première ligne vide, mais c'est en rédigeant une réponse que je me suis dit : pourquoi aller jusqu'à la première ligne vide si je peux sortir avant.
    Pour le nombre de lignes, j'en ai un peu moins de 2000 pour le moment, mais on ne sait jamais.
    Je n'ai jamais de ligne vide, elles sont toutes remplies.
    J'ai testé le premier code de Qwazerty dans mon fichier test et il fonctionne, mais quand je l'intègre dans mon fichier réel (4,5Mo), je n'obtiens pas l'affichage du n° de dossier demandé???

    Je teste ton nouveau code.

    Il a l'air de fonctionner, mais je vais le tester encore. Pour le non affichage du dossier demandé, je crois avoir trouvé, ma colonne A n'était plus ordonnée suite à un trie sur une autre colonne.
    Je ne mets pas encore "Résolu" pour le "cazou".

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    681
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 681
    Points : 633
    Points
    633
    Par défaut
    Le cazou est arrivé (voir fichiers joints)

  19. #19
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Juste pour le fun, et si on faisait un truc du genre...(voir fichier joint)

    Pièce jointe 26288
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    681
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 681
    Points : 633
    Points
    633
    Par défaut
    Tout à fait d'accord. Merci pour tout et à tous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Masquer des lignes sur condition
    Par marc56 dans le forum Macros et VBA Excel
    Réponses: 25
    Dernier message: 06/03/2008, 02h11
  2. Supprimer des lignes sur un test de date
    Par cynoq dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 26/11/2007, 17h37
  3. Excel-copier des lignes sur une autre feuille
    Par petecul dans le forum Excel
    Réponses: 7
    Dernier message: 13/09/2007, 02h56
  4. Ordre de sélection des lignes sur une table DB2
    Par Pierre Formosa dans le forum DB2
    Réponses: 1
    Dernier message: 26/04/2006, 20h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo