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 :

Boucle Conditionnelle de Modification de la Hauteur de Ligne et de Masquage de Feuille [XL-2000]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 22
    Par défaut Boucle Conditionnelle de Modification de la Hauteur de Ligne et de Masquage de Feuille
    Bonjour,

    J'ai écris un code avec une boucle conditionnelle qui modifie la hauteur des lignes si des cellules ont été grisées sur une autre feuille. Pourtant ce code ne marche pas et je ne sais pas pourquoi ... Pourriez vous m'indiquer mon erreur ?

    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
     
    Sub MAJ() 
     
        Dim nom As String
     
        For i = 7 To 26
        If Cells(i, 2).Interior.ColorIndex = 16 Then
     
        With ThisWorkbook.Sheets("FI")
        .Range(.Cells(i, 2), .Cells(i, 12)).Interior.ColorIndex = 16
        Rows("i:i").RowHeight = 0
        nom = "MDD" & i
        ThisWorkbook.Sheets(nom).Visible = False
        End With
     
        End If
     
        Next i
     
    End Sub
    Je pense que je me suis trompé pour l'utilisation de Rows, j'ai cru lire qu'il fallait utiliser un Range ... Mais pourtant excel m'indique dans le défault : RowIndex, ColumnIndex ...

    Merci,
    Kulnae.

  2. #2
    Membre expérimenté
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut
    Perso j'utilise
    tout simplement

  3. #3
    Membre expérimenté
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut
    Si je peux me permettre une modif sur ton code:
    Pourquoi mettre la hauteur de ligne à 0 alors que tu peux tout simplement la masquer
    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
    Sub MAJ()
     
        Dim nom As String
     
        For i = 7 To 26
        If Cells(i, 2).Interior.ColorIndex = 16 Then
     
        With ThisWorkbook.Sheets("FI")
        .Range(.Cells(i, 2), .Cells(i, 12)).Interior.ColorIndex = 16
        .Rows(i).EntireRow.Hidden = True
        End With
        nom = "MDD" & i
        ThisWorkbook.Sheets(nom).Visible = False
     
        End If
     
        Next i
     
    End Sub

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

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Bonjour ce qui est entre guillemet est une chaine de caractère pas une variable!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Rows("i:i").RowHeight = 0
    La tu défini ta ligne par la LETTRE i pas par la valeur de la variable i
    essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dim a as integer
    a=12
    msgbox "a"
    msgbox a
    ensuite utilise comme te l'a indiqué diude
    même si comme l'indique sont deuxième poste il vaut peut être mieux utiliser (le entirerow est inutile puisque l'on a déjà la ligne complète ) que mettre la hauteur à 0

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 22
    Par défaut
    Bonjour,

    Merci pour ces explications claires et précises

    Pour les onglets, ça marche aussi mais je n'arrive pas à les faire réapparaître dans une autre macro faite pour remettre à zéro ...

    Pourriez vous m'aider ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    For i = 1 To i = 32
     
    nom = "MDD" & i
    Sheets(nom).Visible = True
    Next i
    Le code complet étant le suivant :
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
    Sub RAZ()
     
       Dim nom As String
     
        For j = 8 To 12
     
        For i = 7 To 38
        With ThisWorkbook.Sheets("FI")
        .Cells(i, j).Interior.ColorIndex = 2
        End With
     
        Next i
     
        Next j
     
        For i = 7 To 26
        With ThisWorkbook.Sheets("FI")
        .Range(.Cells(i, 2), .Cells(i, 12)).Interior.ColorIndex = 2
        End With
     
        nom = "MDD" & i - 6
        ThisWorkbook.Sheets(nom).Tab.ColorIndex = 2
     
        With ThisWorkbook.Sheets("FD-MDD")
        .Range(.Cells(i, 2), .Cells(i, 5)).Interior.ColorIndex = 2
        End With
     
        Next i
     
        For i = 29 To 39
        With ThisWorkbook.Sheets("FI")
        .Range(.Cells(i - 2, 2), .Cells(i - 2, 12)).Interior.ColorIndex = 2
        End With
     
        nom = "MDD" & i - 8
        ThisWorkbook.Sheets(nom).Tab.ColorIndex = 2
     
        With ThisWorkbook.Sheets("FD-MDD")
        .Range(.Cells(i, 2), .Cells(i, 5)).Interior.ColorIndex = 2
        End With
     
        Next i
     
        With ThisWorkbook.Sheets("FD-MDD")
        .Range(.Cells(42, 2), .Cells(42, 5)).Interior.ColorIndex = 2
        End With
     
        nom = "MDD" & 32
        ThisWorkbook.Sheets(nom).Tab.ColorIndex = 2
     
        With ThisWorkbook.Sheets("FI")
        .Range(.Cells(42, 2), .Cells(42, 7)).Interior.ColorIndex = 2
        End With
     
        With ThisWorkbook.Sheets("FI")
        .Cells(7, 10).Interior.ColorIndex = 1
        .Cells(18, 10).Interior.ColorIndex = 1
        .Cells(35, 10).Interior.ColorIndex = 1
        End With
     
        For i = 8 To 17
        With ThisWorkbook.Sheets("FI")
        .Cells(i, 9).Interior.ColorIndex = 1
        End With
     
        Next i
     
        For i = 19 To 34
        With ThisWorkbook.Sheets("FI")
        .Cells(i, 9).Interior.ColorIndex = 1
        End With
     
        Next i
     
        For i = 36 To 38
        With ThisWorkbook.Sheets("FI")
        .Cells(i, 9).Interior.ColorIndex = 1
        End With
     
        Next i
     
        For i = 1 To i = 32
     
        nom = "MDD" & i
        Sheets(nom).Visible = True
     
        Next i
     
    End Sub
    J'ai même essayé ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        For i = 1 To i = 32
     
        nom = "MDD" & i
        Sheets(nom).Visible = True
        ThisWorkbook.Sheets(nom).Visible = True
        ThisWorkbook.Sheets(nom).Tab.Visible = True
     
        Next i
    Merci,
    Kulnae.

  6. #6
    Membre expérimenté
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut
    Ou sont placées tes macros, moi je fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Macro1()
     
    Worksheets("MDD1").Visible = True
     
    End Sub
    A partir d'un module et en ayant la Feuil4 active et ça fonctionne.

  7. #7
    Membre expérimenté
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut
    une proposition pour remettre en visible toutes les feuille MDD
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim Wk as Worksheet
     
    For each Wk in thisworbook.worksheets
     
    If Left(Wk.name, 3)="MDD" then Wk.visible=True
     
    next Wk

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 22
    Par défaut
    Re,

    La macro RAZ() qui contient l'instruction est placée sur un bouton

    Merci,
    Kulnae.

    Ps. : C'est très bizarre ce que me fait mon excel ...
    Il ne veut pas faire marcher le code :
    Mais il fait marcher celui là :
    Ensuite sur la macro RAZ c'est le next i qu'il ne veut pas ... Il ne fait aucune erreur de compilation mais surligne en jaune le Next i ... Si je fais éxécuter jusqu'au curseur, il fait réapparaître 1 seul onglet par 1 seul onglet (en gros faudrait que je fasse 32 fois éxécuter jusqu'au curseur ...)

    Pss. : Pendant que j'écrivais mon message, j'ai réussi à faire marcher le code comme il fallait ...

    J'ai juste tapé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    For i = 7 To 38
    nom = "MDD" & i
    Worksheets(nom).Visible = True
    Next i
    Une explication sur le pétage de câble de mon excel ?

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

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Citation Envoyé par kulnae Voir le message
    Ps. : C'est très bizarre ce que me fait mon excel ...
    Il ne veut pas faire marcher le code :
    Mais il fait marcher celui là :
    Une explication sur le pétage de câble de mon excel ?
    Ben oui c'est normale le problème ne vient pas de excel mais de toi
    La syntaxe est Tu peux essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i=1,2,3,4,5,6,7,8,9,....,38
    mais ca ne marchera pas mieux quand c'est pas la bonne syntaxe ce n'est pas la bonne syntaxe
    Regarde du coté des tutos sur les boucles
    http://silkyroad.developpez.com/vba/boucles/

  10. #10
    Membre expérimenté
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut
    C'est normal qu'il fasse marcher celui la:
    Mais il fait marcher celui là :
    C'est la bonne syntaxe

    Ensuite sur la macro RAZ c'est le next i qu'il ne veut pas ... Il ne fait aucune erreur de compilation mais surligne en jaune le Next i ... Si je fais éxécuter jusqu'au curseur, il fait réapparaître 1 seul onglet par 1 seul onglet (en gros faudrait que je fasse 32 fois éxécuter jusqu'au curseur ...)
    C'est une boucle, le code va donc la parcourir 32 fois. Si tu met un point d'arret au niveau du Next i , tu passes dans la boucle une seule fois et ça s'arrete, regarde la valeur de i quand tu est sur next i.

    Met un point d'arret après ta boucle et le code parcours 32 la boucle tout seul

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 22
    Par défaut
    Merci à tous !
    Le classeur semble tourner
    Mais je ne mets pas que c'est résolu maintenant, je mettrais ça d'ici la fin de mon stage (Vendredi) ! On ne sait jamais, quelque fois que j'ai besoin d'encore 1 ou 2 trucs (Plutôt que de réouvrir un post ...)

    Non ?

    En tout cas, encore merci !

    Kulnae.

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

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Une fois que tu as mis le résolu tu peux l'enlever en cas de souci.
    Si le problème est différent il vaux mieux faire 1 post par problème ca permet de faciliter les recherche

    Bonne fin de stage, peaufine bien ton rapport et ta présentation

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/02/2012, 14h27
  2. pb sur boucle conditionnelle
    Par oliver75 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/07/2007, 13h59
  3. Enregistrement vide et Boucle conditionnel
    Par baylci dans le forum ASP
    Réponses: 4
    Dernier message: 23/05/2007, 15h32
  4. Réponses: 7
    Dernier message: 30/10/2006, 23h16
  5. Modification de la hauteur des lignes d'un TCustomTree
    Par Mickey9683 dans le forum C++Builder
    Réponses: 4
    Dernier message: 30/08/2006, 08h59

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