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 :

Copie de résultats dans un onglet de sauvegarde / plages distinct


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Mai 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 14
    Par défaut Copie de résultats dans un onglet de sauvegarde / plages distinct
    Bonjour à tous,

    Je débute en VBA et j'aurais besoin de vos lumières pour le cas suivant :

    Je souhaite créer une macro permettant de copier les valeurs de quelques cellules d'un premier onglet vers un onglet de "SAUVEGARDE". Petite difficulté les plages contenant les valeurs à copier ne sont pas forcément adjacentes ou continues...

    La macro doit plus exactement :
    - copier le contenu de certaines cellules du premier onglet
    - formater les valeur disséminée sur une ligne
    - incrémenter le numéro de ligne de l'onglet "sauvegarde"
    - coller les valeurs sous la dernière ligne sauvegardée.

    J'ai bricolé un code avec l'enregistreur de macro ainsi que de mes micros connaissances en VBA !

    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
     
    Sub copie2()
     
    Static Compteur As Integer
    Dim numligne As Integer
     
        Compteur = Compteur + 1
        numligne = Compteur + 1
        Range("B7:C7").Select
        Selection.Copy
        Sheets("SAUVERGARDE").Select
        Range("A1").Offset(Compteur, 1).Select
        Cells(numligne, 1).Value = Compteur
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
     
    End Sub
    Par contre j'ai l'impression que les copier coller ne sont plus synchro avec la valeur de mon ID lorsque je ferme et ré ouvre le fichier... avez-vous une solution pour palier à cela ? Par ailleurs je ne vois pas comment résoudre le problème de la conversion en ligne des plages non contigues.

    A toute fin utile ci-joint le fichier
    Merci d'avance pour votre aide
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonsoir,

    Pas sûr d'avoir compris donc, testes ce code et reviens si ce n'est pas ça :
    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
    49
    50
    51
    52
    53
    54
     
    Sub copie2()
     
        Dim Plage As Range
        Dim Cel As Range
        Dim Lig As Long
        Dim I As Long
     
        'argument "L" à 2 pour ne pas prendre en compte la première ligne
        Set Plage = DefPlage(Worksheets("resultat"), 2, 1)
     
        With Worksheets("SAUVERGARDE")
     
            'recherche la première ligne vide
            Lig = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
     
            'inscrit la valeur servant d'ID (si c'est ce qu'il faut ?)
            .Cells(Lig, 1) = Lig - 1
     
            'pour éviter la colonne ID (A)
            I = 1
     
            'le parcour de la plage se fait de haut en bas et de droite à gauche
            For Each Cel In Plage.SpecialCells(xlCellTypeConstants)
     
                I = I + 1
                .Cells(Lig, I).Value = Cel.Value
     
            Next Cel
     
        End With
     
    End Sub
     
    Function DefPlage(Fe As Worksheet, Optional L As Long = 1, Optional C As Long = 1) As Range
     
        On Error GoTo Fin
     
        With Fe
     
            Set DefPlage = .Range(.Cells(L, C), _
                           .Cells(.Cells.Find("*", .[A1], -4123, , _
                           1, 2).Row, .Cells.Find("*", .[A1], -4123, , _
                           2, 2).Column))
     
        End With
     
        Exit Function
     
    Fin:
     
        Set DefPlage = Nothing
     
    End Function

  3. #3
    Membre averti
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Mai 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 14
    Par défaut
    Bonjour Theze,

    merci pour ton retour ! On voit l'expert à l'œuvre. Vivement le moment où j'y arriverai par moi-même....

    Le code remplit à merveille son rôle. En réalité il le remplit même trop bien
    Je m'explique : ici sauf erreur de ma part, chaque cellule renseignée dans l'onglet "rsultat" est copiée.

    En fait, je souhaite intégrer ce code dans un classeur à plusieurs onglets de type "résultat" pour effectuer la recopie de cellules préalablement identifiées (cf cellules grisées dans mon fichier joint)

    Quelqu'un aurait-il la solution ?

    Bien cordialement

  4. #4
    Membre averti
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Mai 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 14
    Par défaut
    Bonjour,

    Je me permets juste de remonter ma dernière question... il se trouve que j'aimerais intégrer cette macro dans un classeur excel que je serai amené à présenter à d'autres personnes d'ici quelques jours...

    Merci d'avance !

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Ma manière personnelle de répondre :
    - on constitue la plage des cellules concernées (utilisation au besoin de la méthode Union)
    - on copie d'un seul bloc cette plage vers la destination de son choix (méthode Range.Copy à lire dans ton aide VBA interne).

    Merci d'avance de commencer à t'y mettre sur la base de ces indications et lectures.

  6. #6
    Membre averti
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Mai 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 14
    Par défaut
    Bonjour !

    Après avoir commencé un cours VBA, j'arrive en version simplifiée au code suivant :
    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 copiercollercellules()
     
        Dim Shto As Worksheet
        Dim ShtTo As Worksheet
        Dim Vartab As Variant
     
        Set shfrom = Worksheets("F1")
     
        Set Shto = Worksheets("F2")
     
        'on cherche à copier les cases A1-C3-C6 présent dans l'onglet F1 vers l'onglet F2. Les données seront coller à partir de A2 sur une seule ligne
     
        Vartab = shfrom.Range("A1, C3, C6")
        Debug.Print Vartab
     
        Shto.Range("A2").Resize(UBound(Vartab, 1), UBound(Vartab, 3)) = Vartab
     
     
    End Sub
    pb : j'ai une erreur d'exécution type 13 "incompatibilité de type"
    Une idée de ce qui coince ?
    Merci



    nb : Pour l'emploi de la méthode union, il semblerait que je ne puisse pas déverser le contenu des cellules dans une variable de type tableau

Discussions similaires

  1. [XL-2010] Recherche multicritères et copie des résultats dans une autre feuille
    Par chacha49 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/08/2011, 23h25
  2. [XL-2003] Problème copie dans un onglet
    Par zarktoune dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/03/2011, 12h24
  3. Copie de cellules d'un onglet dans un autre
    Par sebicool dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/01/2009, 12h23
  4. Sauvegarde de résultats dans une boucle FOR-END
    Par laroche1 dans le forum MATLAB
    Réponses: 4
    Dernier message: 19/12/2007, 17h51
  5. Réponses: 2
    Dernier message: 23/08/2007, 21h45

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