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 :

Macro copier coller vers la droite si cellule pleine [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2018
    Messages : 5
    Par défaut Macro copier coller vers la droite si cellule pleine
    Bonjour forumeuses et forumeurs,

    Cela fait plusieurs jours que je cherche à créer une macro pour construire un tableau de bord pour mon travail. Je souhaite compiler des données qualité sur un seul fichier.
    A ce jour, l'opérateur remplit un premier fichier (appelons le : Rapport container n°X) il me l'envoie et ensuite je récupère ces infos que je mets dans un fichier 'global' (appelons le : Rapport global) dans ce fichier chaque container est référencé pour assurer un suivi qualité. Je souhaite automatiser la remontée d'informations. Pour le moment j'ai réussi, quand les deux fichiers sont ouverts, à créer une macro qui récupère les infos du Rapport container n°X pour les envoyer dans le Rapport Global. Cependant je n'arrive pas à faire en sorte que lorsque la macro détecte la dernière colonne remplie (une colonne par container) décale d'une colonne vers la droite et colle les infos. Je suis un novice très prononcé sur Excel, le bout de macro que j'ai créé fonctionne mais vous donnera sûrement envie de vous tirer les cheveux ahah

    En clair : Je souhaite prendre les infos du premier classeur en B20:J22, convertir les colonnes en ligne puis coller les cellules converties dans le deuxième classeur sur la première colonne dispo.

    Vous avez deux fichiers exemple à votre disposition

    J'espère que je suis clair, n'hésitez pas à me demander plus d'informations

    Par avancer merci pour votre aide précieuse !

    Bien cordialement

    Turakatur
    Fichiers attachés Fichiers attachés

  2. #2
    Membre expérimenté

    Homme Profil pro
    Technical Account Manager
    Inscrit en
    Avril 2015
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technical Account Manager

    Informations forums :
    Inscription : Avril 2015
    Messages : 224
    Billets dans le blog
    1
    Par défaut
    Bonjour Turakatur,

    Si j'ai bien compris ta demande, normalement tu devrais pouvoir réussir ton opération avec ce code (à adapter selon tes besoins) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim cls_2 As Object
     
    'Remplacer Onglet par le nom de ta feuille où tu copies tes données
    Worksheets("Onglet").Range("B20:J22").Copy
     
    'Remplacer chemin par le chemin d'accès de ton fichier. Workbooks.Open ouvre le classeur où tu colles tes valeurs
    Set cls_2 = Workbooks.Open("chemin")
     
    'Collage spécial avec comme propriétés Transpose = True pour transformer tes données "lignes" en données "colonnes"
    'Remplacer A1:C9 par la plage de données où tu veux coller tes valeurs
    Worksheets(1).Range("A1:C9").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
    Tu peux mettre le code ci-dessus dans la procédure que tu utilises pour remplacer ton code actuel.
    Je reste disponible pour plus d'informations sur ce sujet,
    Cordialement,
    BDA53

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2018
    Messages : 5
    Par défaut
    Bonjour BDA53,

    Tout d'abord merci pour ton aide ! En effet c'est bien ce que je souhaites faire mais lorsque je lance la macro j'ai un message d'erreur :

    Nous sommes désolé mais "mon chemin" est introuvable. Peut-être a-t-il été déplacé, renommé ou supprimé ? Erreur d'exécution '1004'

    J'ai contrôlé le nom du fichier, personne n'est dessus en même temps et je n'ai pas d'autre classeur ouvert portant le même nom. Une idée pour régler cette erreur ?


    En plus de ça j'aimerais rajouter une fonctionnalité. Je dois compiler les infos (B20:J22) pour chaque commande, j'aimerai que la macro décale d'une colonne à chaque fois pour avoir toutes les commandes à la suite des autres. J'ai cherché longtemps sur divers forums et apparemment c'est possible de demander à Excel de checker les colonnes et de choisir la première vide (désolé si mon vocabulaire ne fait pas très programmation ).

    Pour faire simple : Je souhaite qu'Excel décale d'une colonne à droite après chaque copier coller pour avoir toutes les infos à la suite et assurer un suivi.

    D'avance merci !

    Cordialement

    Turakatur

  4. #4
    Membre expérimenté

    Homme Profil pro
    Technical Account Manager
    Inscrit en
    Avril 2015
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technical Account Manager

    Informations forums :
    Inscription : Avril 2015
    Messages : 224
    Billets dans le blog
    1
    Par défaut
    Je n'aurai pas le temps de regarder ta seconde requête aujourd'hui désolé..
    Peut-être lundi si ça ne te dérange pas. Sinon tu peux attendre la réponse d'un autre forumiste

    Est-ce que tu as pris le nom du fichier dans ton chemin d'accès ? il faut aussi le prendre .
    Attention à bien prendre le nom complet (par ex : "test.xlsm")

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2018
    Messages : 5
    Par défaut
    Aucun problème ! c'est déjà bien gentil de m'aider !

    Oui j'ai vérifié j'avais inversé le l et le s -> .xslm quel boulet !

    Bon week-end et à bientôt !

    Turakatur

  6. #6
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    Transpose ne suffira pas si j'ai bien compris la demande il faut prendre les cellules par groupe de 2 ou 3 cellules et placer ces groupes les uns en dessous des autres.

    Essai comme ça.
    Il faudra bien sûr adapter le nom des fichiers

    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    Option Explicit
     
    Sub test()
    Dim WB_Commande As Workbook
    Dim WS_Rapport As Worksheet
    Dim RgTotaux As Range
    Dim iOffsetColCmd As Integer, iOffsetRowRegroupe
    Dim iOffsetColRegroupement As Integer
     
        'On crée un onglet pour y mettre la rapport
        Set WS_Rapport = ThisWorkbook.Worksheets.Add
        'On y place la date et l'heure
        WS_Rapport.Range("A1").Value = Format(Date + Time, "dd/MM/yy hh:mm:ss")
     
        'On défini la 1ère colonne qui recevra les données
        iOffsetColRegroupement = 1
     
        'Provisoirement on défini le classeur contenant les données à ajouter
        'Il faudra par la suite inclure le code dans une boucle
        'ou tout autre système permettant de pointer les fichiers à importer
        Set WB_Commande = Workbooks("Copie de Rapport Test.xlsm")
     
        'On pointe la feuille à importer, on considére que c'est toujours la 1ère feuille
        With WB_Commande.Sheets(1)
     
            'On recherche la ligne contenant les totaux
            Set RgTotaux = .Columns("A").Find("Total", , xlValues, xlWhole, MatchCase:=False)
     
            'On vérifie qu'une cellule a été trouvée
            If Not RgTotaux Is Nothing Then
     
                'Ici pour personnaliser la 1ère ligne de la colonne qui va recevoir les données (N° de Container)
                'A adapter
                WS_TDB.Cells(1, iOffsetColRegroupement + 1).Value = Left(.Range("A1").Value, 13)
     
                'On copie la ligne OK dont on ne prend que 2 lignes (B20:B21)
                'WS_TDB correspond au code name de la feuille TDB
                RgTotaux.Offset(, 1).Resize(2, 1).Copy WS_TDB.Range("A3:A4").Offset(, iOffsetColRegroupement)
                WS_TDB.Range("A3:A4").Offset(, iOffsetColRegroupement).Value = RgTotaux.Offset(, 1).Resize(2, 1).Value
     
                'On boucle ensuite sur les 7 autres colonnes pour copier les 3 lignes
                For iOffsetColCmd = 2 To 9
     
                    'On défini où vont être placées les données
                    iOffsetRowRegroupe = (iOffsetColCmd - 2) * 3
     
                    'On copie les données
                    With WS_TDB.Range("A5:A7").Offset(iOffsetRowRegroupe, iOffsetColRegroupement)
                        'On fait une copie complète pour avoir les formats de cellules
                        RgTotaux.Offset(, iOffsetColCmd).Resize(3, 1).Copy .Cells
                        .Value = RgTotaux.Offset(, iOffsetColCmd).Resize(3, 1).Value
                    End With
     
                Next
     
                'On pointe la colonne suivante
                iOffsetColRegroupement = iOffsetColRegroupement + 1
     
            Else
                'Pas de totaux
                'On ajoute une ligne à la suite du rapport
                With WS_Rapport.Range("A1").End(xlDown).Offset(1)
                    'On met le nom du classeur qui pose problème
                    .Value = WB_Commande.Name
                    'On indique la problème
                    .Offset(, 1).Value = "Pas de ligne de totaux"
                End With
            End If
     
        End With
     
    End Sub
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2018
    Messages : 5
    Par défaut
    Salut Qwaz,

    Merci pour ta contribution, j'essaye de mettre ta macro en place mais j'ai un souci à la ligne 32.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WS_TDB.Cells(1, iOffsetColRegroupement + 1).Value = Left(.Range("B1").Value, 13)
    Pour WS_TDB, Excel me dit
    Erreur d'exécution '424' : Objet requis
    . J'ai consulté l'aide mais je t'avoue que les termes techniques du support ne m'ont pas aidés ahah

    Aurais-tu une explication avec des termes plus simple ?

    Merci beaucoup !

    Turak

  8. #8
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    Ah oui j'avais renommé une des feuilles pour alléger le code.
    Il faut juste modifier le codename de la feuille qui contient le tableau global.

    Pour modifier le codename, c'est ici
    Nom : 2015-01-18_134906.png
Affichages : 853
Taille : 14,2 Ko

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2018
    Messages : 5
    Par défaut
    Salut !

    Ok c'est bon ça marche nickel

    Merci à BDA53 et Qwazerty pour votre aide.

    A très bientôt !

    Je suis en train de me familiariser avec les Userform donc je ne devrai pas tarder à ouvrir une nouvelle discussion ahah

    Encore merci

    Turakatur

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

Discussions similaires

  1. [XL-2003] Macro copier/coller la valeur d'une cellule sur une cellule [Colone fixe - Ligne N+1 ]
    Par faustina dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 27/06/2018, 14h20
  2. [XL-2010] Macro copier/coller et champ recherche + afficher cellule absolue.
    Par Spamev dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 31/07/2014, 14h54
  3. Réponses: 4
    Dernier message: 27/05/2014, 23h28
  4. [XL-2003] Macro copier coller vers access
    Par makila64 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 22/03/2012, 14h03
  5. Macro copier coller première cellule vide
    Par jul85 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 24/02/2008, 17h06

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