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 :

Consolidation nombre d'onglets variable par vba [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2012
    Messages : 177
    Par défaut Consolidation nombre d'onglets variable par vba
    Bonjour le Forum

    Mon probleme :
    Dans un classeur excel 2007, j'ai un nombre variable de feuilles.
    Je souhaite faire un code vba me permettant de consolider les feuilles choisies par une listbox (multiselect) sachant que les cellules sont toujours les mêmes.

    Je bloque sur le code suivant qui me renvoie toujours des erreurs de type 9 ou autres.

    pouvez vous m'aider?

    Mon code :
    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
    Private Sub LBChoix_Change()
    Dim MaListe As String, i As Byte, sh As Worksheet, n As Byte
    MaListe = ""
    With Me.LBChoix
     
            For i = 0 To .ListCount - 1
     
                If .Selected(i) Then
                MaListe = MaListe & fmChoixFeuille.LBChoix.List(i) & "!R8C22:R16C42" & ","
                End If
     
            Next i
     
      End With
     
    End Sub
     
    Private Sub CmdValid_Click()
     
     
    Sheets("Saisie (2)").Range("U8").Consolidate Sources:=MaListe, Function:=xlSum, TopRow:=True, LeftColumn _
                :=True, CreateLinks:=False
     
    End Sub
    Bien cordialement

  2. #2
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut consolidation nombre d'onglets
    Bonjour,

    Il aurait été bon de préciser sur quelle ligne se produit l'erreur.

    Faute de pouvoir faire un essai (pas de fichier joint) cela ne convient-il pas ?

    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
    Private Sub LBChoix_Change()
    
    Dim MaListe As String, i As Byte, sh As Worksheet, n As Byte
    MaListe = ""
    
    With Me.LBChoix
        For i = 0 To .ListCount - 1
            If .Selected(i) Then
                MaListe = MaListe & .List(i) & "!R8C22:R16C42" & ","
            End If
        Next i
    End With
     
    End Sub
    Par ailleurs :
    - à la dernière sélection la "," ne sera-t-elle pas de trop ?
    - je me demande si "with Me.LBChoix" n'est pas superflu dans la mesure où "private sub LBchoix_change" indique clairement où se situe l'action.

    Cordialement,

  3. #3
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    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
     
    Dim MaListe As String
     
    Private Sub LBChoix_Change()
    Dim  i As Byte, sh As Worksheet, n As Byte
    MaListe = ""
    With Me.LBChoix
     
            For i = 0 To .ListCount - 1
     
                If .Selected(i) Then
                MaListe = MaListe & fmChoixFeuille.LBChoix.List(i) & "!R8C22:R16C42" & ","
                End If
     
            Next i
     
      End With
     
    End Sub
     
    Private Sub CmdValid_Click()
     
     
    Sheets("Saisie (2)").Range("U8").Consolidate Sources:=MaListe, Function:=xlSum, TopRow:=True, LeftColumn _
                :=True, CreateLinks:=False
     
    End Sub
    Bien cordialement[/QUOTE]

    Bonjour lps02.

    Pour commencer, tu dois sortir la déclaration Dim MaListe As String de la procédure et la mettre en tête du module, afin qu'elle soit visible dans les autres procédures du module.

    Cordialement

    Docmarti

  4. #4
    Invité
    Invité(e)
    Par défaut bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     MaListe = MaListe & fmChoixFeuille.LBChoix.List(i) & "!R8C22:R16C42" & ","
    il y a toujours une virgule en trop!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Next i
    MaListe =left(MaListe ,len(MaListe )-1)
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If MaListe = "" Then
        MaListe =  fmChoixFeuille.LBChoix.List(I) & "!R8C22:R16C42"
    Else
        MaListe = MaListe & "," & fmChoixFeuille.LBChoix.List(I) & "!R8C22:R16C42"
    End If

  5. #5
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut consolidation nombre d'onglets
    Bonjour Robert,

    Je vois que tu confirmes un de mes doutes.

    Faute d'avoir un fichier pour essai sans lequel je suis incapable d'affirmer quoi que ce soit, peux-tu me dire si mon autre remarque est juste ou pas ?

    Cordialement,

  6. #6
    Invité
    Invité(e)
    Par défaut bonjour,nibledispo
    "with Me.LBChoix" n'est pas une erreur tu propose
    qui marche également. j'aime mieux une déclinaison total qui permet de mieux définir de quoi on parle. le deux sont bon!

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2012
    Messages : 177
    Par défaut
    Bonjour à vous et merci pour vos réponses aussi rapide.

    Hélas toujours probleme.
    Renvoi d'une erreur 1004 reference de consolidation non valide à la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sheets("Saisie (2)").Range("U8").Consolidate Sources:=MaListe, Function:=xlSum, TopRow:=True, LeftColumn _
                :=True, CreateLinks:=False
    Je recherche une solution vers un tableau pour la source type MonTableau () que je mettrai en reference.
    Ce tableau serait rempli par ma listbox à partir des onglets choisis auquels j'ajouterai les référence de cellules.

    Possible??

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2012
    Messages : 177
    Par défaut
    Docmarti,

    Merci de ton aide. j'ai juste modifié le code pour la zone à consolider. Il faut garder la même zone que les onglets à consolider pour une consolidation par legne identiques. sinon tout se fait sur la même ligne.

    Mon code :
    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
    Dim MaListe() As Variant
    Private Sub UserForm_Initialize()
     
    Dim s As Object
     
      For Each s In ActiveWorkbook.Sheets
      If s.Name <> "Parametres" And s.Name <> "Page" Then
        Me.LBChoix.AddItem s.Name
        End If
      Next s
      Me.LBChoix.ListIndex = -1
     
    End Sub
     
     
     
     
    Private Sub LBChoix_Change()
    Dim i As Byte, sh As Worksheet, n As Byte
    ReDim MaListe(0)
    With Me.LBChoix
     
     
     
                For i = 0 To .ListCount - 1
                If .Selected(i) Then
     
                MaListe(UBound(MaListe)) = fmChoixFeuille.LBChoix.List(i) & "!R8C21:R16C42"
                ReDim Preserve MaListe(UBound(MaListe) + 1)
                End If
     
            Next i
     
      End With
     
    End Sub
     
    Private Sub CmdValid_Click()
     
     ReDim Preserve MaListe(UBound(MaListe) - 1)
    Sheets("Saisie (2)").Range("U8:AP16").Consolidate Sources:=MaListe(), Function:=xlSum, TopRow:=True, LeftColumn _
                :=True, CreateLinks:=False
     
    End Sub
    Private Sub CmdQuit_Click()
    Unload Me
     
    End Sub
    Bien cordialement et merci encore Docmarti.

    lps02

  9. #9
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Merci de l'info lps02.

    C'est une fonction que je ne connaissais pas.

    J'ai trouvé une excellente description de la marche à suivre

    http://excel.developpez.com/faq/?page=Feuille#Consolider

    Et un exemple très clair

    http://www.excel-easy.com/examples/consolidate.html

    Amicalement

    Docmarti

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

Discussions similaires

  1. nombre de valeurs variable par ligne d'un fichier texte
    Par Christinita dans le forum MATLAB
    Réponses: 3
    Dernier message: 15/02/2012, 22h05
  2. Récupérer le nombre d'onglets ouverts sous IE en VBA excel
    Par Gibbon_fute dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 08/11/2010, 15h30
  3. [6.5][VBA] Création de variable par macro
    Par Pitinonoz dans le forum SDK
    Réponses: 3
    Dernier message: 29/05/2008, 17h22
  4. Réponses: 9
    Dernier message: 11/05/2006, 15h31
  5. [CSS][HTML] Nombre d'onglets variable
    Par poah dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 02/12/2005, 08h30

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