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 :

Copier Coller spécial


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Décembre 2013
    Messages : 8
    Par défaut Copier Coller spécial
    bonjour,,

    Je souhaiterai résumer les productions des différentes feuilles tel que "POT_S" par date qui se situe en L1C1 sur la feuille "résumé et Par produit

    je suis donc parti avec une macro comme ci dessous. Qui se déroulait plutot bien, par contre en arrivant sur le produit "coupelle" de la feuille "COUP"
    en voulant entre la ligne 17 à 22.
    La macro m'écrit 3fois la meme chose une fois sur 2..... En supprimant la limite mise en "a" je remarque que ma boucle ne se termine jamais....

    Pouvez-vous corriger ma macro??? La macro ci dessous à pour but de copier les données en "POT_S" et "COUP" pour les coller dans les tableaux atitrés au chaque en feuille "résumé"

    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
    73
    74
    75
    76
    77
    78
    Max = 3
    Do While Sheets("POT_S").Cells(Max, 1) <> ""
    Max = Max + 1
    Loop
     
    For a = 4 To 12
    For i = 2 To Max
    'production soupe
    Boucle:
    If Sheets("résumé").Cells(a, 2) = "" Then
        If Sheets("POT_S").Cells(i, 2) = Sheets("résumé").Cells(1, 6) Then
        Sheets("résumé").Cells(a, 2) = Sheets("POT_S").Cells(i, 2)
        Sheets("résumé").Cells(a, 3) = Sheets("POT_S").Cells(i, 3)
        Sheets("résumé").Cells(a, 4) = Sheets("POT_S").Cells(i, 4)
        Sheets("résumé").Cells(a, 5) = Sheets("POT_S").Cells(i, 5)
        Sheets("résumé").Cells(a, 6) = Sheets("POT_S").Cells(i, 6)
        Sheets("résumé").Cells(a, 7) = Sheets("POT_S").Cells(i, 7)
        Sheets("résumé").Cells(a, 8) = Sheets("POT_S").Cells(i, 8)
        Sheets("résumé").Cells(a, 9) = Sheets("POT_S").Cells(i, 9)
        Sheets("résumé").Cells(a, 10) = Sheets("POT_S").Cells(i, 10)
        Sheets("résumé").Cells(a, 11) = Sheets("POT_S").Cells(i, 13)
        Sheets("résumé").Cells(a, 12) = Sheets("POT_S").Cells(i, 16)
        Sheets("résumé").Cells(a, 13) = Sheets("POT_S").Cells(i, 19)
        Sheets("résumé").Cells(a, 14) = Sheets("POT_S").Cells(i, 11)
        Sheets("résumé").Cells(a, 15) = Sheets("POT_S").Cells(i, 12)
        Sheets("résumé").Cells(a, 16) = Sheets("POT_S").Cells(i, 14)
        Sheets("résumé").Cells(a, 17) = Sheets("POT_S").Cells(i, 15)
        Sheets("résumé").Cells(a, 18) = Sheets("POT_S").Cells(i, 17)
        Sheets("résumé").Cells(a, 19) = Sheets("POT_S").Cells(i, 18)
        End If
     
    Else:
    a = a + 1
    GoTo Boucle
    End If
    Next i
    Next a
     
    'production coupelle
    Max = 3
    Do While Sheets("POT_S").Cells(Max, 1) <> ""
    Max = Max + 1
    Loop
     
    For a = 17 To 22
    For i = 2 To Max
     
    Boucle2:
    If Sheets("résumé").Cells(a, 2) = "" Then
        If Sheets("coup").Cells(i, 2) = Sheets("résumé").Cells(1, 6) Then
        Sheets("résumé").Cells(a, 2) = Sheets("coup").Cells(i, 2)
        Sheets("résumé").Cells(a, 3) = Sheets("coup").Cells(i, 3)
        Sheets("résumé").Cells(a, 4) = Sheets("coup").Cells(i, 4)
        Sheets("résumé").Cells(a, 5) = Sheets("coup").Cells(i, 5)
        Sheets("résumé").Cells(a, 6) = Sheets("coup").Cells(i, 6)
        Sheets("résumé").Cells(a, 7) = Sheets("coup").Cells(i, 7)
        Sheets("résumé").Cells(a, 8) = Sheets("coup").Cells(i, 8)
        Sheets("résumé").Cells(a, 9) = Sheets("coup").Cells(i, 9)
        Sheets("résumé").Cells(a, 10) = Sheets("coup").Cells(i, 10)
        Sheets("résumé").Cells(a, 11) = Sheets("coup").Cells(i, 13)
        Sheets("résumé").Cells(a, 12) = Sheets("coup").Cells(i, 16)
        Sheets("résumé").Cells(a, 13) = Sheets("coup").Cells(i, 19)
        Sheets("résumé").Cells(a, 14) = Sheets("coup").Cells(i, 11)
        Sheets("résumé").Cells(a, 15) = Sheets("coup").Cells(i, 12)
        Sheets("résumé").Cells(a, 16) = Sheets("coup").Cells(i, 14)
        Sheets("résumé").Cells(a, 17) = Sheets("coup").Cells(i, 15)
        Sheets("résumé").Cells(a, 18) = Sheets("coup").Cells(i, 17)
        Sheets("résumé").Cells(a, 19) = Sheets("coup").Cells(i, 18)
        End If
     
    Else:
    a = a + 1
    GoTo Boucle2
    End If
    Next i
    Next a
     
    End Sub
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut copier coller special
    bonsoir,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    'production coupelle
    Max = 3
    Do While Sheets("POT_S").Cells(Max, 1) <> ""
    ne serait-ce pas les parties rouges le problème ?

    cordialement,

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Décembre 2013
    Messages : 8
    Par défaut
    J'ai modifié ma bourde mais rien à faire....

  4. #4
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut copier coller special
    Bonjour,

    Regarde si le fichier joint peut convenir sauvegarde version 2003 et 2013 pour le cas où.

    Avec ce code, les différents tableaux doivent comporter un nombre de lignes identiques et être régulièrement espacés. Voir quel peut être le nombre de lignes maxi.
    Les cellules de la 1ere colonne feuille résumé sont au format date.

    On doit pouvoir faire plus performant mais cela est l'affaire de plus doué que moi.
    Notamment, ne pas fixer un nombre de lignes figés aux tableaux.

    cordialement
    Fichiers attachés Fichiers attachés

  5. #5
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 344
    Par défaut
    Je pense que dans ton code le problème est là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Boucle:
    If Sheets("résumé").Cells(a, 2) = "" Then
    ...
     
    Else:
     
    GoTo Boucle
    Ton "Boucle:" et ton Goto Boucle => il faut les enlever. Car, ton i ne s'incrémente pas. En effet, ton GoTo est avant le "next i" et du coup ton i ne s'icrémente jamais et tu tourne en rond

    C'est pareil pour ta boucle2.

    Et pour info, les 2 points (":") après le Else ne servent en rien en VBA
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  6. #6
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Décembre 2013
    Messages : 8
    Par défaut
    Citation Envoyé par nibledispo Voir le message
    Bonjour,

    Regarde si le fichier joint peut convenir sauvegarde version 2003 et 2013 pour le cas où.


    cordialement
    merci bien, j'ai essayé de transférer la macro sur ma feuille, et mettre les tableaux manquant à partir de la ligne 69 ou 70 le programme fait mouliné mon pc et mets en échec et redemarre excel....

  7. #7
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut copier coller special
    Bonsoir Antos 579 et illight,

    Antos 579 : Est-ce que le code fourni sans ajouts de ta part tournait rond chez toi. Sur mon ordinateur c'ést bien le cas.
    Peux-tu joindre ton fichier compléter de tes apports pour que je fasse des essais ?

    illight : Si tu reviens sur cette discussion, peux tu regarder ma proposition de code et proposer des améliorations tant pour le questionneur que pour moi- même.

    Cordialement,

  8. #8
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Décembre 2013
    Messages : 8
    Par défaut
    Bonsoir,

    Merci de vous intéresser à mon soucis... Voici le fichier avec la macro complétée par mes soins...
    Fichiers attachés Fichiers attachés

  9. #9
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut copier coller special
    Bonsoir,

    La feuille sachet pose problème avec la colonne a superflue à enlever.
    Une feuille vide de contenu posait également problème. c'est pourquoi j'ai modifié la formule du calcul Max.
    ajouté la condition max >2 dans le if car il est inutile de traiter une feuille ne comportant que les entêtes.

    j'ai également rajouté une sub effacement dans la feuille résumé.

    Il t'appartient d'apprécier si 9 lignes par rubrique répondront à tous les cas de figure.

    Voici le fichier revu qui marche très bien chez moi.
    Fichiers attachés Fichiers attachés

  10. #10
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Décembre 2013
    Messages : 8
    Par défaut
    bonjour,

    Merci nibledispo, la macro fonctionne à merveille, à terme si je veux copier automatique les données (colonnes 1 à 3) (que j'incrémente quotidiennement en feuille "Emballage_produits") de Emballage_produits aux différentes feuilles POT_S Coup, sachet, etc

    Dois-je reprendre la meme macro en utilisant la variable en colonne 5 et
    cellule(1,1) des différentes feuille de destination?

    Merci,

    Antoine.

  11. #11
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 344
    Par défaut
    Citation Envoyé par nibledispo Voir le message
    illight : Si tu reviens sur cette discussion, peux tu regarder ma proposition de code et proposer des améliorations tant pour le questionneur que pour moi- même.
    Je viens de voir ton message j'ai vu que tu avais modifié ton fichier par la suite.
    C'est bon du coup ? Je vais quand même jeter un oeil sur ton dernier fichier
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  12. #12
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 344
    Par défaut
    J'aime bien ta façon de procéder.

    Néanmoins, pour certains points, je n'aurai pas fait de la même manière.

    Par exemple, pour le tableau, j'aurai mis le nom de la feuille ET le numéro du début de ligne (tableau à 2 dimensions du coup).

    Ou encore mieux, mettre toutes les données dans une variable tableau. Du coup, ta boucle sur ton tableau pour remplir le LIG n'aurait pas été utile

    Après, effectivement, le cas où il y a plus de lignes que 9 n'est pas mentionné, mais est-ce bien utile ?
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  13. #13
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut copier coller special
    Bonjour,

    Si j'ai bien compris ta demande complémentaire, tu souhaites renvoyer dans chaque feuille(sachet, pot,...) toutes les saisies faites dans la feuille emballage_ produit.

    Je suis plutôt partisan de séparer les taches.
    Deux possibilités, peut-être plus :
    - une procédure événementielle qui renvoie la saisie automatiquement dans les feuilles concernées, dés que tu l'introduis, .
    - une procédure qui renverrai les saisies une fois la ligne totalement renseignée. Je ne pense pas qu'une événementielle puisse faire cela, auquel cas il faudra un bouton.

    Nota : pour la procédure efface(), supprimer tous les sheets("résumé") dont la répétition n'est pas très heureuse et écrire ces instructions entre "with sheets("résumé")" et "end with". Laisser le " . " devant range.

    Cordialement,

  14. #14
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Décembre 2013
    Messages : 8
    Par défaut
    Bonjour,

    La procédure numéro 1 pourrait être sympa! Et cela concerne quelques saisies dont la date(colonne1) la référence (colonne2) et le grammage(colonne3).

    Cordialement,

    Antoine.

  15. #15
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut copier coller special
    Bonjour,

    Voici un code susceptible d’amélioration par plus connaisseur en VBA. Notamment la gestion des erreurs au cas ou utilisateur taperait le fichier concerné plutôt que d'utiliser les données de validation.
    sur ce point : il convient d'étendre la plage de données de ventilation dan la feuille "emballage produits"

    Code à loger dans feuille VBA "emballage produit"

    IMPORTANT: la colonne 5 (pot, sachet,.....) de la feuille "emballage produit" doit être obligatoirement renseignée pour que le code fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sub worksheet_change(ByVal target As Range)
    Application.EnableEvents = False
    If target.Column = 5 And target.Count = 1 Then
         With Sheets(target.Value)
              derlig = .[B65536].End(xlUp).Row
              .Cells(derlig + 1, 2) = DateValue(target.Offset(0, -4))
              .Cells(derlig + 1, 3) = target.Offset(0, -3)
              .Cells(derlig + 1, 4) = target.Offset(0, -2)
         End With
    End If
    Application.EnableEvents = True
    End Sub
    Par ailleurs, dans col 1 de chaque feuille (pot, sachet, .....) mettre le code ci dessous en lieu et place de celui existant.
    Cela te permettra de le prévoir sur une grande étendue sans te retrouver avec des "N/A"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    =SI($C3 <> "";RECHERCHEV($C3;Donnée!$H$3:$I$289;2;FAUX);"")
    Cordialement,

Discussions similaires

  1. Macro VBA Copier-coller avec formatage spécial
    Par brunchinio dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/05/2015, 02h27
  2. [XL-2007] Tri + Copier / Coller un peu spécial
    Par mikeactuaire dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 18/04/2012, 17h55
  3. Copier coller spécial
    Par Lost_in_VBA dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/07/2011, 12h12
  4. Excel vers powerpoint : copier/coller spécial
    Par fabiencal dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/07/2009, 23h31
  5. [VBA-E]Excel vers powerpoint : copier/coller spécial
    Par illight dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 06/09/2006, 12h41

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