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 :

Récupérer les valeurs sur des colonnes spécifiques pour les coller sur un autre onglet [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Points : 8
    Points
    8
    Par défaut Récupérer les valeurs sur des colonnes spécifiques pour les coller sur un autre onglet
    Bonjour à tous,

    Voilà je suis un peu bloqué dans mon petit programme car je ne sais pas comment formuler en VBA le fait de ne récupérer les valeurs que sur certaines colonnes pour les coller dans un onglet récap. En fait j'ai 17 onglets, dont 16 ont la même structure. Le 17e étant l'onglet récap.
    Je souhaite récupérer les valeurs des colonnes 1, 3, 4, 5, 6 et 7 (à partir de la deuxième ligne) de tous mes onglets et les coller dans mon onglet récap et toujours à la même position, soit les colonnes 1, 3, 4, 5, 6 et 7 (à partir de la deuxième ligne) . Avec un tri possible par la colonne 7 qui est une date.
    La raison pour laquelle je ne veux pas copier toutes les colonnes de mes onglets c'est que j'inscris des données à posteriori dans mon onglet recap. Et avec le code actuel, elles sont effacées.

    Un grand grand merci pour vos pistes.


    Voici 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
    Public Sub recap()
    Dim WsRecap As Worksheet, Ws As Worksheet
    Dim Dlo As Long, Dli As Long
    ActiveSheet.Unprotect ("17cpe2015")
      Application.ScreenUpdating = False
      ' je concatène tous mes onglets en ne prenant que les valeurs, pas les formules.
     
      Set WsRecap = Sheets("recap global")
      'WsRecap.Range("a2:BZ60000").ClearContents
      Dlo = 2
      For Each Ws In Worksheets
        If Ws.Name <> WsRecap.Name Then
          Dli = Ws.Cells(Rows.Count, 1).End(xlUp).Row
          If Dli > 1 Then
            Ws.Rows("2:" & Dli).Copy
            WsRecap.Cells(Dlo, 1).PasteSpecial Paste:=xlPasteValues
            Dlo = Dlo + Dli - 1
          End If
        End If
      Next
      Dlo = Dlo - 1
      ' Et maintenant je supprime les lignes si la colonne F contient un 0
      WsRecap.Range("a1:U" & Dlo).AutoFilter field:=6, Criteria1:=0
      If Application.Subtotal(103, Columns(6)) > 1 Then
        WsRecap.Range("F2:F" & Dlo).SpecialCells(xlCellTypeVisible).EntireRow.Delete
      End If
      WsRecap.Range("a1:U" & Dlo).AutoFilter field:=6
      Range("B2").Select
        ActiveCell.FormulaR1C1 = _
            "=IF(RC[12]<>"""",""CLOTURE"",IF(RC[10]<>"""",""SIGNATURE DG EN COURS"",IF(RC[9]<>"""",""ORIGINAL DU CONTRAT RECU"", IF(RC[8]<>"""",""VALIDE PAR LE SIEGE"", IF(RC[5]<>"""",""TRANSMIS AU SIEGE"","""")))))"
      Selection.AutoFill Destination:=Range("B2:B386"), Type:=xlFillDefault
        Range("B2:B386").Select
     Range("B3").Select
     ActiveSheet.Protect ("17cpe2015")
     Dim nbre As Byte, cptr As Byte
     
    Application.ScreenUpdating = False
    nbre = ThisWorkbook.Sheets.Count
    cptr = 2
    For cptr = 2 To nbre
      Sheets(cptr).Visible = xlSheetVeryHidden
    Next
    Application.ScreenUpdating = True
    End Sub

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bonjour,

    Mets ton code entre les balises de code (les "#") sinon, c'est illisible. Modifie-le comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    For Each Ws In Worksheets
        With Ws
            If .Name <> WsRecap.Name Then
                Dli = .Cells(.Rows.Count, 1).End(xlUp).Row
                If Dli > 1 Then
                    .Range(.Cells(2, 1), .Cells(Dli, 1)).Copy
                    WsRecap.Cells(Dlo, 1).PasteSpecial Paste:=xlPasteValues
                    .Range(.Cells(2, 3), .Cells(Dli, 7)).Copy
                    WsRecap.Cells(Dlo, 3).PasteSpecial Paste:=xlPasteValues
                    Dlo = Dlo + Dli - 1
                End If
            End If
        End With
    Next

  3. #3
    Futur Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Points : 8
    Points
    8
    Par défaut Super !
    Merci Daniel.
    Bonne journée

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 08/01/2013, 11h03
  2. Réponses: 2
    Dernier message: 24/03/2011, 00h17
  3. Réponses: 3
    Dernier message: 29/04/2010, 13h54
  4. Réponses: 3
    Dernier message: 25/09/2008, 10h26
  5. Réponses: 7
    Dernier message: 24/04/2008, 11h53

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