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 plusieurs lignes et boucles capricieuses [XL-2000]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 29
    Par défaut Masquer plusieurs lignes et boucles capricieuses
    Bonjour, je souhaiterais un peu d'aide concernant deux problèmes distincts:

    -Le premier, j'ais le code suivant qui est sensé mettre 1 ou 0 dans la colonne E selon si le texte de la cellule voisine ( en D ) est "VRAI" ou "FAUX", mais ce dernier ne me met rien :s

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Dim i As Integer
    Dim Compt As Integer
    'Worksheets("Fournitures").Cells(2, 10).Value = 1
    'Worksheets("Fournitures").Cells(3, 10).Value = 0
     
    Compt = 1
    While Cells(Compt, 3).Value <> ""
        Compt = Compt + 1
    'Cells(2, 8).Value = Compt
    Worksheets("Fournitures").Cells(Compt - 1, 5) = "0"
    Wend
     
    For i = 2 To Compt - 1
     
    'Select Case Worksheets("Fournitures").Cells(i, 4).Value
     
    '    Case Worksheets("Fournitures").Cells(i, 4).Value = "VRAI"
    '         Worksheets("Fournitures").Cells(i, 5).Value = "1"
    '    Case Worksheets("Fournitures").Cells(i, 4).Value = "FAUX"
    '         Worksheets("Fournitures").Cells(i, 5).Value = "0"
    'End Select
     
        If Worksheets("Fournitures").Cells(i, 4).Value = "FAUX" Then
        Worksheets("Fournitures").Cells(2, 9) = "0"
        End If
        If Worksheets("Fournitures").Cells(i, 4).Value = "VRAI" Then
        Worksheets("Fournitures").Cells(i, 5).Value = "1"
        End If
     
     
        'Cells(3, 8).Value = i
        'Cells(4, 8).Value = Worksheets("Fournitures").Cells(i, 4).Value
        'Cells(5, 8).Value = Worksheets("Fournitures").Cells(i, 5).Value
    Next i
    -Second problème, pour masquer les lignes qui ont dans la colonne D un "FAUX" mon code à beau être exécuté, il ne fait rien :s

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Dim i As Integer
    Dim Compt As Integer
     
    Compt = 1
     
    While Cells(Compt, 4).Value <> ""
        Compt = Compt + 1
    Wend
     
     
     
        For i = 2 To Compt - 1
            If Cells(i, 4) = "FAUX" Then Rows(i).Hidden = True
            If Cells(i, 4) = "VRAI" Then Rows(i).Hidden = False
     
        Next i
    Pourriez vous m'éclairer, sachant que je débute en VB

  2. #2
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Une première chose pour trouver la dernière ligne regarde cette contribution de Ouskel'n'or
    personnellement je suis un adepte du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DerniereLigne = Range("A65536").End(xlUp).Row
    Pour ton problème essaye peut être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     If Worksheets("Fournitures").Cells(i, 4).Value = "FAUX" Then
        Worksheets("Fournitures").Cells(2, 9) = "0"
    tu testes la ligne i et tu met la 2 à 0
    essaye de remplacer le 2 par un i

  3. #3
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 29
    Par défaut
    Merci de ta réponse rapide.

    Néanmoins quand j'applique le mode "pas à pas" je constate qu'il ne fait jamais le "then" de la condition "IF"

    N'ayant pas trop compris la fin de ton post j'ais testé en modifiant le "0" de la condition par "2" mais ça n'a rien changé sur le tableur, il ne modifie rien.

    Sur le "case" ( j'ais testé avec lui comme ça ne marchait pas avec le IF ) c'est folclorique, il me met les "vrai" à 0 et les "FAUX" à 1 alors que je lui demande l'inverse ( et en inversant les deux cases, il me met tout à 0, pareil si j'inverse les deux "IF" )

  4. #4
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     If Worksheets("Fournitures").Cells(i, 4).Value = "FAUX" Then
        Worksheets("Fournitures").Cells(2, 9) = "0"
    essaye

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     If Worksheets("Fournitures").Cells(i, 4).Value = "FAUX" Then
        Worksheets("Fournitures").Cells(i, 9) = "0"
    aussi tu mes les 0 dans la colonne 9 et les 1 dans la colonne 5


    Voila qui devrais mieux fonctionner ou du moins faire ce que tu aimerais qu'il fasse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        If Worksheets("Fournitures").Cells(i, 4).Value = "FAUX" Then
        Worksheets("Fournitures").Cells(i, 5) = "0"
        End If
        If Worksheets("Fournitures").Cells(i, 4).Value = "VRAI" Then
        Worksheets("Fournitures").Cells(i, 5).Value = "1"
        End If

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour,
    Comment est-ce que les cellules sont remplie avec des FAUX ou VRAI ?
    probablement avec des formules ?
    Si oui, la valeur FAUX par formule est équivalente à False en VBA
    et VRAI à True
    essaye avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    For i = 2 To Compt - 1
         With Sheets("Fournitures")
            Select Case .Cells(i, 4).Value
            Case  True
                 .Cells(i, 5).Value = "1"
            Case  False
                 .Cells(i, 5).Value = "0"
            End Select
        End With
    ......
    A+
    Edit:
    ou bien plus simple...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       With Sheets("Fournitures")
            .Cells(i, 5) = Abs(.Cells(i, 4))
        End With

  6. #6
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 29
    Par défaut
    Merci de vos réponses !

    En effet, mettre le "i" ( erreur de ma part lors de mon post ici, méaculpa ) et le coup du "vrai" => "true" ont fait que tout fonctionne de manière cohérente

    Par contre, petite colle, j'ais un bouton qui met les "vrai" et "faux" sur une feuille différente ( "articles" ), comment faire pour qu'il permette aussi de lancer la procédure permettant de passer de "vrai" à "1" ( fdans la feuille "procédure" ) ?


    Pour le second problème, j'ais testé d'interchanger les true et false mais ça ne me masque toujours pas les lignes qui ont "faux"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Dim i As Integer
    Dim Compt As Integer
     
    Compt = 1
     
    While Cells(Compt, 4).Value <> ""
        Compt = Compt + 1
    Wend
     
     
     
        For i = 2 To Compt - 1
            If Cells(i, 4) = False Then Rows(i).Hidden = True
            If Cells(i, 4) = True Then Rows(i).Hidden = False
     
        Next i
    EDIT: tout fonctionne, j'ais fais la boulette de faire la détection de dernière ligne sur une colonne déjà vide ^^' ( je vois un sourire, et vous avez bien raison ! )

    ar contre, une petite idée pour le lancement de la procédure via le bouton ( Private Sub CommandButton1_Click() ) situé sur une autre feuille ?

  7. #7
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Tu peu remplacer les lignes de ton dernier poste par...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        For i = 2 To Range("D65536").End(xlUp).Row
            Rows(i).Hidden = Not Cells(i, 4)
        Next i
    Pour ce qui est de ta question, il faut mettre la procédure dans un module général genre Module1 et l'appeler par le code du bouton.
    A+

  8. #8
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 29
    Par défaut
    Merci ==

    Mais je ne vois pas comment "appeler" la procédure via le bouton ... faut il que je mette "CommandButton1_Click()" au début de la procédure ? ( je suis débutant )

  9. #9
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    ta procedure s'appelle bonjour et a besoin d'une variable nom
    ex
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sub bonjour(nom as string)
    msgbox "Bonjour " &nom
    end sub
    dans CommandButton1_Click()"
    tu met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private sub CommandButton1_Click()
    bonjour "Bob"
    end sub
    quelque exemple dans le tuto : Les syntaxes de base

  10. #10
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 29
    Par défaut
    Merci !

    J'ais testé aussi en mettant un run, ça marche aussi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub CommandButton1_Click()
     
    Run (Worksheets("Fournitures").CacherFourniture())
    Run (Worksheets("Fournitures").Conversion())
     
    End Sub
    Mission complete

  11. #11
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Citation Envoyé par vash641 Voir le message
    Merci !

    J'ais testé aussi en mettant un run, ça marche aussi
    A proscrire... source de problèmeS si tu fait appel à différentes feuilles et dans tout les cas mieux vaux mettre les procédures dans des modules et les appeller comme expliquer par Krovax. en oubliant pour le moment les paramètres
    Met tes procédures CacherFourniture et Conversion dans Module1
    et dans le code du bouton simplement...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub CommandButton1_Click()
        CacherFourniture
        Conversion
    End Sub

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

Discussions similaires

  1. Bison : boucle WHILE - WEND espacée de plusieurs lignes
    Par DjPoke dans le forum Générateurs de compilateur
    Réponses: 5
    Dernier message: 07/10/2014, 11h23
  2. Réponses: 3
    Dernier message: 21/03/2013, 10h51
  3. Console R: boucle for - plusieurs lignes
    Par mathieu_r dans le forum R
    Réponses: 2
    Dernier message: 11/02/2011, 14h12
  4. Réponses: 9
    Dernier message: 16/05/2006, 12h59
  5. Define sur plusieurs lignes
    Par Gogoye dans le forum C
    Réponses: 6
    Dernier message: 06/10/2003, 12h45

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