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 :

Vba: Copier plusieurs cellules non contigües d'une feuille sur une seule ligne d'une autre feuille [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Juillet 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Rédacteur technique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2014
    Messages : 10
    Par défaut Vba: Copier plusieurs cellules non contigües d'une feuille sur une seule ligne d'une autre feuille
    bonjour à tous
    je souhaite copier différentes cellules ( cellules non adjacentes)de ma feuille 1. Par exemple cellule A2, B2, D3, F4, H8 et les coller sur ma feuille 2 en A2, B2, C2 ,D2, E2

    Quand j'active ma macro je souhaite, a chaque nouvelle saisie de mes données de la feuille 1 copier les mêmes cellules de ma feuille 1 sur les mêmes colonnes de ma feuille 2 mais une ligne en dessous, c'est à dire A2, B2, C2 , D2,E2
    et ainsi de suite à chaque fois que j'active ma macro copier une ligne en dessous.

    A chaque saisie une nouvelle ligne est donc créée soit automatiquement (sans bouton macro) ou alors avec bouton.

    Je commence tout juste à m'initier au VBA et je pense que l'un d'entre vous pourrait m'épauler. Si besoin je peux vous envoyer le fichier de travail

    Merci pour votre aide.....précieuse

  2. #2
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 271
    Par défaut
    Bonjour,

    Regarde ça,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Sub Macro9()
     
        Range("A2,B2,D2,F2,H2").Select
        Selection.Copy
        Sheets("Feuil1").Select
        ActiveSheet.Paste
     
    End Sub

  3. #3
    Invité
    Invité(e)
    Par défaut
    Salut,

    Pas très efficace, mais à essayer tout de même:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub CopyRange1()
     
        Dim Area As Range
        Dim n As Long
     
        For Each Area In ThisWorkbook.Worksheets("Feuil1").Range("A2, B2, D3, F4, H8").Areas
            n = n + 1
            ThisWorkbook.Worksheets("Feuil2").Range("A2").Offset(, n - 1) = Area.Cells(1, 1).Value
        Next
     
    End Sub
    Le Cells(1,1) est là pour s'assurer qu'il n'y a bien qu'une seule cellule pour ne copier que la 1ère cellule d'une Area.

  4. #4
    Membre habitué
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Juillet 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Rédacteur technique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2014
    Messages : 10
    Par défaut VBA: Copier plusieurs cellules non contigües d'une feuille sur une seule ligne d'une autre feuille
    Bonjour,

    Merci pour vos retours la première solution apportée ne me permet que de copier les données et ne permet pas à la seconde saisie de la totalité des données d'être copié sur la 2ème ligne vide de mon fichier. Merci néanmoins pour ce retour rapide.
    La 2ème solution testée ne m'a pas apporté de résultat : j'ai essayé de me l'approprier selon le fichier que j'ai construit, voilà ce que cela donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Macro1()
    '
    ' Macro1 Macro
    '
     
        Dim Area As Range
        Dim n As Long
     
        For Each Area In ThisWorkbook.Worksheets("Fiche de saisie").Range("A2, B2, D3, F4, H8").Areas
            n = n + 1
            ThisWorkbook.Worksheets("saisie enregistrée").Range("A2").Offset(, n - 1) = Area.Cells(1, 1).Value
        Next
     
    End Sub
    Je suis un peu perdu car je pensais qu'il fallait introduire la nécessité d'aller rechercher la première ligne vide du fichier où la totalité de mes données seront sauvegardées (fichier : "saisie enregistrée).
    En effet, à chaque saisie de ces 5 cellules, le fichier "saisie enregistrée" doit enregistrer sur une seule ligne ces données et ainsi de suite sur la 2ème ligne pour la nouvelle saisie de ces 5 données.
    Je ne sais pas si je suis trés clair : je peux vous joindre mon fichier de travail si vous le souhaitez.
    Dans tous les cas un grand merci pour vos retours....je continue à tester ......!!!
    .......

    Après de nouvelles recherches: j'ai trouvé ceci : mais bémol les données ne sont pas copiées sur une seule ligne or je souhaite que tous les enregistrement tiennent sur une seule ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Macro1()
    '
    ' Macro1 Macro
    '
    ActiveSheet.UsedRange.Select
    Selection.Copy
        Sheets("saisie enregistrée").Select
    Range("A" & Cells(Rows.Count, "a").End(xlUp).Row + 12).PasteSpecial xlPasteValues
    End Sub

  5. #5
    Invité
    Invité(e)
    Par défaut
    Effectivement, c'est bizarre.

    Avant execution de la Macro, dans une feuille appelé "Fiche de saisie", j'obtiens:
    Nom : Worksheets(Fiche de saisie).png
Affichages : 7742
Taille : 7,5 Ko
    La feuille "saisie enregistrée" est totalement vide avant éxecution.


    Dans la feuille "saisie enregistrée", Après execution:
    Nom : Worksheets(saisie enregistrée).png
Affichages : 7602
Taille : 4,9 Ko


    Nouveau code plus générique (presque identique):
    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 CopyCellsToColumns(Source As Range, Destination As Range)
     
        Dim Area As Range
        Dim i As Long
        Dim ParamCalc As VBACALCULPERFORMANCETYPE
     
    On Error GoTo Finish
     
        BeforeVBACalculate ParamCalc
     
        For Each Area In Source.Areas
            i = i + 1
            Destination.Cells(1, 1).Offset(, i - 1).Value = Area.Cells(1, 1).Value
        Next
     
    Finish:
        AfterVBACalculate ParamCalc
     
    End Sub
    A mettre dans un module standard:
    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
     
    Option Explicit
    Option Private Module
     
    Public Type VBACALCULPERFORMANCETYPE
        ScreenUpdating As Boolean
        Calculation As XlCalculation
        EnableEvents As Boolean
        DisplayStatusBar As Boolean
    End Type
     
    Function BeforeVBACalculate(UserDefinedType As VBACALCULPERFORMANCETYPE)
        With Application
            UserDefinedType.ScreenUpdating = .ScreenUpdating
            UserDefinedType.Calculation = .Calculation
            UserDefinedType.EnableEvents = .EnableEvents
            UserDefinedType.DisplayStatusBar = .DisplayStatusBar
     
            .ScreenUpdating = False
            .Calculation = XlCalculation.xlCalculationManual
            .EnableEvents = False
            .DisplayStatusBar = False
        End With
    End Function
    Function AfterVBACalculate(UserDefinedType As VBACALCULPERFORMANCETYPE) As Boolean
        With Application
            .ScreenUpdating = UserDefinedType.ScreenUpdating
            .Calculation = UserDefinedType.Calculation
            .EnableEvents = UserDefinedType.EnableEvents
            .DisplayStatusBar = UserDefinedType.DisplayStatusBar
        End With
    End Function

    Test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Sub CopyCellsToColumnsTest()
        CopyCellsToColumns Source:=ThisWorkbook.Worksheets("Fiche de saisie").Range("A2, B2, D3, F4, H8"), _
                           Destination:=ThisWorkbook.Worksheets("saisie enregistrée").Range("A2")
    End Sub



    --------------------------------------------------------------------------------------------------------------

    A voir si il y a du changement avec cette Macro:
    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
     
    Sub CopyCellsToColumns2(Source As Range, Destination As Range)
     
        Dim Area As Range
        Dim j As Long
        Dim ParamCalc As VBACALCULPERFORMANCETYPE
        Dim aAreaValue
     
    On Error GoTo Finish
     
        BeforeVBACalculate ParamCalc
     
        ReDim aAreaValue(1 To 1, 1 To Source.Areas.Count)
        For j = LBound(aAreaValue, 2) To UBound(aAreaValue, 2)
            aAreaValue(1, j) = Source.Areas(j).Cells(1, 1).Value
        Next
        Destination.Cells(1, 1).Resize(1, UBound(aAreaValue, 2)).Value = aAreaValue
     
    Finish:
        AfterVBACalculate ParamCalc
     
    End Sub
    Test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Sub CopyCellsToColumnsTest2()
        CopyCellsToColumns2 Source:=ThisWorkbook.Worksheets("Fiche de saisie").Range("A2, B2, D3, F4, H8"), _
                            Destination:=ThisWorkbook.Worksheets("saisie enregistrée").Range("A2")
    End Sub

    -----------------------------------------------------------------------------------

    Plutôt:
    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
     
    Sub CopyCellsToColumns3(Source As Range, Destination As Range)
     
        Dim Area As Range
        Dim j As Long
        Dim ParamCalc As VBACALCULPERFORMANCETYPE
        Dim aAreaValue
     
        BeforeVBACalculate ParamCalc
     
    On Error GoTo Finish
     
        ReDim aAreaValue(1 To 1, 1 To Source.Areas.Count)
        For j = LBound(aAreaValue, 2) To UBound(aAreaValue, 2)
            aAreaValue(1, j) = Source.Areas(j).Cells(1, 1).Value
        Next
        Destination.Cells(1, 1).Resize(1, UBound(aAreaValue, 2)).Value = aAreaValue
     
    Finish:
        AfterVBACalculate ParamCalc
        With Err
            If CBool(.Number) Then MsgBox "Erreur : " & .Number & vbCrLf & .Description
        End With
    End Sub
    Dernière modification par Invité ; 11/09/2014 à 17h36.

  6. #6
    Membre habitué
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Juillet 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Rédacteur technique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2014
    Messages : 10
    Par défaut Vba: Copier plusieurs cellules non contigües d'une feuille sur une seule ligne d'une autre feuille
    Encore félicitation pour tous ces essais...mais cela ne fonctionne pas : peut-être que je ne m'y prend pas correctement ???
    Aussi je décide de vous livrer mon fichier (l'onglet"fiche de saisie" doit se déverser sur une seule ligne sur l'onglet"saisie enregistrée" . (la feuille 1 est ce que souhaite obtenir à chaque saisie des 16 données (en fait j'ai beaucoup plus de données qu'annoncées.....!!!!)

    Je suis perplexe mais ne désespère pas de trouver la solution;
    Merci pour vos réflexions
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/02/2014, 13h33
  2. VBA Copier plusieurs cellules dans uen autre feuille
    Par Tm7555555 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/09/2013, 19h25
  3. [Toutes versions] comment copier plusieurs cellules d'une feuille sur plusieurs feuilles
    Par lem56 dans le forum Excel
    Réponses: 1
    Dernier message: 28/04/2013, 12h10
  4. novice VBA : copier plusieurs feuilles
    Par kamkam33 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 05/03/2009, 23h09
  5. [EXCEL][VBA] Compter les cellules non-vides
    Par Squelet dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/02/2006, 15h40

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