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 :

Souci Requête avec Vba.


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2013
    Messages : 15
    Points : 10
    Points
    10
    Par défaut Souci Requête avec Vba.
    Bonjour,

    J'ai un souci avec une macro.
    Ma macro doit me masquer/démasquer certaines lignes sur une feuille "Recap_2013_Chiffres".
    Les numéros des lignes sont : 119,120,124,125,129,130,134,135,139,140,144,145,149,150,154,155,159,160,164,165,169,170,174,175,179,180,184,185,189,190,194,195,201,202,206,207,211,212,216 & 217.

    Ma macro est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub cache_decache_ligne()
    If Sheets("Recap_2013_Chiffres").Range("119:119,120:120,124:124,125:125,129:129,130:130,134:134,135:135,139:139,140:140,144:144,145:145,149:149,150:150,154:154,155:155,159:159,160:160,164:164,165:165,169:169,170:170,174:174,175:175,179:179,180:180,184:184,185:185,189:189,190:190,194:194,195:195,201:201,202:202,206:206,207:207,211:211,212:212,216:216,217:217").EntireRow.Hidden = False Then
    Sheets("Recap_2013_Chiffres").Range("119:119,120:120,124:124,125:125,129:129,130:130,134:134,135:135,139:139,140:140,144:144,145:145,149:149,150:150,154:154,155:155,159:159,160:160,164:164,165:165,169:169,170:170,174:174,175:175,179:179,180:180,184:184,185:185,189:189,190:190,194:194,195:195,201:201,202:202,206:206,207:207,211:211,212:212,216:216,217:217").EntireRow.Hidden = True
    Else
    Sheets("Recap_2013_Chiffres").Range("119:119,120:120,124:124,125:125,129:129,130:130,134:134,135:135,139:139,140:140,144:144,145:145,149:149,150:150,154:154,155:155,159:159,160:160,164:164,165:165,169:169,170:170,174:174,175:175,179:179,180:180,184:184,185:185,189:189,190:190,194:194,195:195,201:201,202:202,206:206,207:207,211:211,212:212,216:216,217:217").EntireRow.Hidden = False
    End If
    End Sub
    Cette macro ne fonctionne pas correctement. Dans l'état, lorsque je l'exécute, Visual Basic me renvoie vers le deboggeur.
    Pour qu'elle fonctionne, je dois retirer les dernières lignes à masquer/démasquer (201,202,206,207,211,212,216,217).
    Ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub cache_decache_ligne()
    If Sheets("Recap_2013_Chiffres").Range("119:119,120:120,124:124,125:125,129:129,130:130,134:134,135:135,139:139,140:140,144:144,145:145,149:149,150:150,154:154,155:155,159:159,160:160,164:164,165:165,169:169,170:170,174:174,175:175,179:179,180:180,184:184,185:185,189:189,190:190,194:194,195:195").EntireRow.Hidden = False Then
    Sheets("Recap_2013_Chiffres").Range("119:119,120:120,124:124,125:125,129:129,130:130,134:134,135:135,139:139,140:140,144:144,145:145,149:149,150:150,154:154,155:155,159:159,160:160,164:164,165:165,169:169,170:170,174:174,175:175,179:179,180:180,184:184,185:185,189:189,190:190,194:194,195:195").EntireRow.Hidden = True
    Else
    Sheets("Recap_2013_Chiffres").Range("119:119,120:120,124:124,125:125,129:129,130:130,134:134,135:135,139:139,140:140,144:144,145:145,149:149,150:150,154:154,155:155,159:159,160:160,164:164,165:165,169:169,170:170,174:174,175:175,179:179,180:180,184:184,185:185,189:189,190:190,194:194,195:195").EntireRow.Hidden = False
    End If
    End Sub
    Savez vous pourquoi ?
    Existe-il une restriction sur les lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Recap_2013_Chiffres").Range() ?
    Merci

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    EDIT

    L'adresse à l'intérieur Range est limitée à 255 caractères


    Utilise ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Cache_Decache_Ligne()
     
    With Worksheets("Recap_2013_Chiffres")
        With Union(.Range("119:119,120:120,124:124,125:125,129:129,130:130,134:134,135:135,139:139,140:140,144:144,145:145,149:149,150:150"), .Range("154:154,155:155,159:159,160:160,164:164,165:165,169:169,170:170,174:174,175:175,179:179,180:180,184:184,185:185,189:189,190:190,194:194,195:195,201:201,202:202,206:206,207:207,211:211,212:212,216:216,217:217")).EntireRow
            .Hidden = Not .Hidden
        End With
    End With
    End Sub

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2013
    Messages : 15
    Points : 10
    Points
    10
    Par défaut Souci Requête avec Vba.
    Bonjour,

    Merci pour votre réponse concernant la restriction sur Range.
    Vous serait-il possible de me refaire toute ma requête avec votre modèle ?
    Merci

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Je t'avais donné un code qui fonctionne en utilisant Union.

    Sinon, une autre approche plus flexible
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Cache_Decache_Ligne()
    Dim i As Integer
     
    Application.ScreenUpdating = False
    With Worksheets("Recap_2013_Chiffres")
        For i = 119 To 216 Step 5
            With Rows(i).Resize(2)
                .Hidden = Not .Hidden
            End With
        Next i
    End With
    End Sub

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2013
    Messages : 15
    Points : 10
    Points
    10
    Par défaut Souci Requête avec Vba.
    Bonsoir,

    J'ai remplacé toute ma requête par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Cache_Decache_Ligne()
     
    Dim i As Integer
    Application.ScreenUpdating = False
    With Worksheets("Recap_2013_Chiffres")
        For i = 119 To 216 Step 5
            With Rows(i).Resize(2)
                .Hidden = Not .Hidden
            End With
        Next i
    End With
     
    End Sub
    Mais cela ne marche pas.

    Par contre, celle-ci fonctionne

    Sub Cache_Decache_Ligne()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    With Worksheets("Recap_2013_Chiffres")
        With Union(.Range("119:119,120:120,124:124,125:125,129:129,130:130,134:134,135:135,139:139,140:140,144:144,145:145,149:149,150:150"), .Range("154:154,155:155,159:159,160:160,164:164,165:165,169:169,170:170,174:174,175:175,179:179,180:180,184:184,185:185,189:189,190:190,194:194,195:195,201:201,202:202,206:206,207:207,211:211,212:212,216:216,217:217")).EntireRow
            .Hidden = Not .Hidden
        End With
    End With
     
    End Sub

  6. #6
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Es-tu sûr que le code 1 ne fait pas ce que tu souhaite?

    Les 2 fonctionnent correctement. le premier code est plus adaptable.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2013
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    La 3ème solution ne marche pas chez moi, les lignes ne se masquent/demasquent pas.

    La 2nd marche très bien

  8. #8
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Désolé, une coquille s'est glissée (un point manquait avant Rows(i))

    Il fallait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Cache_Decache_Ligne()
    Dim i As Integer
     
    Application.ScreenUpdating = False
    With Worksheets("Recap_2013_Chiffres")
        For i = 119 To 216 Step 5
            With .Rows(i).Resize(2)
                .Hidden = Not .Hidden
            End With
        Next i
    End With
    End Sub

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2013
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Je viens de tester et elle marche nickel ;-)
    Merci beaucoup pour ce coup de main

  10. #10
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2013
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Je confirme la macro passe nickel.
    J'ai juste réadapté la ligne "For i = 119 To xxx Step 5" en modifiant xxx

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

Discussions similaires

  1. [AC-2003] Modifier critére de requête avec VBA
    Par Max02 dans le forum IHM
    Réponses: 6
    Dernier message: 14/02/2013, 09h24
  2. [AC-2003] Problème création de requête avec VBA
    Par Sylas dans le forum VBA Access
    Réponses: 2
    Dernier message: 17/11/2012, 14h35
  3. VB + Excel + SQL + Soucis requête avec des dates
    Par Invité dans le forum Excel
    Réponses: 2
    Dernier message: 12/03/2009, 08h15
  4. Requête avec VBA
    Par egg3774 dans le forum VBA Access
    Réponses: 17
    Dernier message: 29/08/2007, 02h38
  5. Réponses: 2
    Dernier message: 17/10/2005, 14h58

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