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 :

Problème avec le nombre de lignes d'une feuille copiée automatiquement


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 54
    Points : 35
    Points
    35
    Par défaut Problème avec le nombre de lignes d'une feuille copiée automatiquement
    Bonjour,

    J'ai un code qui me permet de copier, sur une nouvelle feuille le contenu d'une autre (qui contient un TCD).
    Mon problème est le suivant, lorsque la macro a tournée, sur la nouvelle feuille SDD R2Y16, il manque des lignes de mon TCD car je pense que seules, les 26 premières lignes de la feuille R2Y2016 SDD sont copiées.
    I'l n'y a pourtant pas de borne supérieure..

    Pourriez-vous m'aider svp?

    D'avance, un tout grand merci!

    Jenna

    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
    Sub Macro()
     
    Dim TabFeuilles()
    Dim ShSource As Worksheet
    Dim ShDest As Worksheet
    Dim i As Integer
     
    ' pour boucler sur les feuilles
    TabFeuilles = Array("R2Y2016 SDD")
     
    Set ShDest = ThisWorkbook.Worksheets("SDD R2Y16")
    ' nettoyage de la feuille de destination
    ShDest.Rows(1 & ":" & ShDest.Rows.Count).Clear
     
    ' pour chaque feuille
    For i = LBound(TabFeuilles) To UBound(TabFeuilles)
        Set ShSource = ThisWorkbook.Worksheets(TabFeuilles(i))
        With ShSource
            ' si la dernière ligne est supérieure à 8 = il y a des données dans le TCD
            If .UsedRange.Rows.Count > 8 Then
                ' copie de la plage du TCD dans la feuille de destination
     
               .Range(.Cells(8, 1), .Cells(.UsedRange.Rows.Count, .UsedRange.Columns.Count)).Copy _
                            ShDest.Cells(ShDest.UsedRange.Row + ShDest.UsedRange.Rows.Count + 1, 1)
     
            End If
        End With
    Next i
     
    Set ShSource = Nothing
    Set ShDest = Nothing
     
    End Sub

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Plutôt que d'utiliser une boucle sur des adresses fixes, utilise les propriétés de l'objet PivoTable de la feuille.
    Petit exemple d'une procédure qui liste les différentes adresses des différents éléments qui composent le tableau croisé dynamique présent sur la feuille active
    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 PivotTableProperties()
     ' Dans ce test lire LePivot Table présent sur la feuille active
     Dim txt As String
     Dim sht As Worksheet, rngPvt As Range
     Dim pvtTable As PivotTable, pvtField As PivotField
     Set sht = ThisWorkbook.ActiveSheet
     Set pvtTable = sht.PivotTables(1)
     With pvtTable
      txt = "Properties list for the PivotTable " & Chr(34) & .Name & Chr(34) & " present on the sheet [" & sht.Name & "]" & vbCrLf
      txt = txt & vbCrLf & "TableRange1 : " & .TableRange1.Address
      txt = txt & vbCrLf & "TableRange2 : " & .TableRange2.Address
      txt = txt & vbCrLf & "DataLabel : " & .DataLabelRange.Address
      txt = txt & vbCrLf & "DataBodyRange : " & .DataBodyRange.Address
      txt = txt & vbCrLf & "Row / Col Range : " & .RowRange.Address & " / " & .ColumnRange.Address & " - "
      MsgBox txt
     End With
     Set pvtTable = Nothing: Set pvtField = Nothing
     Set sht = Nothing: Set rngPvt = Nothing
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 54
    Points : 35
    Points
    35
    Par défaut
    Bonjour,

    Un grand merci pour votre réponse. Cependant, n'étant pas très calée en VBA, je ne sais pas trop quoi faire avec le code.
    Pouvez-vous m'aider un peu plus?

    Jenna

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut heu
    bonjour
    personnellement j'ai un soucis avec ceci: moi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ' pour boucler sur les feuilles
    TabFeuilles = Array("R2Y2016 SDD")
    pour moi dans cet array il y a un seul élément tu vois ce que je veux dire ???
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 54
    Points : 35
    Points
    35
    Par défaut
    Bonjour Patrick,

    J'ai défini la feuille elle, même comment étant un array..
    Comment verrais-tu les choses?

    Bàt,

    Jenna

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut
    Re bonjour
    Je ne vois par pourquoi utiliser un aray pour une seule feuille utilise plutôt une variable pour ta feuille si tu veux
    Et supprime la boucle for
    C'est moins embigu

    re
    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
    Sub Macro()
    Dim sh1 As Worksheet, ShDest As Worksheet, i As Integer
    ' on determine les feuilles source et destination
    Set sh1 = Sheets("R2Y2016 SDD")
    Set ShDest = ThisWorkbook.Worksheets("SDD R2Y16")
    ' nettoyage de la feuille de destination
     ShDest.Cells.Clear
        With sh1
            ' si la dernière ligne est supérieure à 8 = il y a des données dans le TCD
            If .UsedRange.Rows.Count > 8 Then
                ' copie de la plage du TCD dans la feuille de destination
                .Range(.Cells(8, 1), .Cells(.UsedRange.Rows.Count, .UsedRange.Columns.Count)).Copy _
                            Destination:=ShDest.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
     
            End If
        End With
    Set ShDest = Nothing
    End Sub
    et quoi que!!!
    je ne vois pas pourquoi tu efface les lignes du shdest pour utiliser ensuite "rows.count,column.count,etc..." dans la ligne de copie

    donc si tu efface la destination sera shdest .cells(1,1)
    point barre
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 54
    Points : 35
    Points
    35
    Par défaut
    Merci pour l'aide et de jeter un oeil à tout ça

    En fait, à la base, j'ai plusieurs feuilles dans lesquelles il y a un tableau à copier sur la page de destination, d'où le count.

    Pas certaine que ça réponde à ta question

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    a tu essayé ma proposition avant d'aller plus loin
    si ca fonctionne pour un on le mettra
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

Discussions similaires

  1. [XL-2010] Problème avec le nombre de digit dans une cellule
    Par thomasdu40 dans le forum Excel
    Réponses: 2
    Dernier message: 09/01/2013, 14h20
  2. Problème avec le passage à la ligne dans une Textbox
    Par iFlo1 dans le forum Général Dotnet
    Réponses: 0
    Dernier message: 22/03/2009, 13h47
  3. problème avec les sauts de ligne dans une string
    Par hexdoc dans le forum Langage
    Réponses: 6
    Dernier message: 02/05/2008, 15h28
  4. Calcul du nombre de ligne d'une feuille Excel en VBA
    Par top_eagle dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/06/2007, 17h09
  5. Réponses: 2
    Dernier message: 13/06/2006, 15h46

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