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 entre feuillet à la suite à deux lignes équivalentes [XL-2010]


Sujet :

Macros et VBA Excel

  1. #41
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Nota.
    Si un seul classeur est ouvert, le rattachement au classeur n'est plus nécessaire.
    Cela dit, cette précaution peut être utile pour las suite du projet.

    Qu'est-ce qui ne fonctionne plus?
    Toujours le même message d'erreur?

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  2. #42
    Membre à l'essai
    Homme Profil pro
    Etd. Supply Chain Manager
    Inscrit en
    Janvier 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Etd. Supply Chain Manager
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2019
    Messages : 41
    Points : 13
    Points
    13
    Par défaut
    J'ai réessayé, le code fonctionne et cela copie-colle les commentaire comme convenu.

    Cependant, cela prend un temps plus long et je me retrouve toujours avec la même ligne en "Erreur d'exécution '9'" (voir ci-dessous)

    Nom : Capture.JPG
Affichages : 392
Taille : 152,7 Ko

    Voulez-vous le fichier ?

  3. #43
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Voulez-vous le fichier ?
    Oui.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  4. #44
    Membre à l'essai
    Homme Profil pro
    Etd. Supply Chain Manager
    Inscrit en
    Janvier 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Etd. Supply Chain Manager
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2019
    Messages : 41
    Points : 13
    Points
    13
    Par défaut
    Voici le fichier.

    Fichier Test - RGS 2019.xlsm

    Par ailleurs j'ai un autre soucis, le code écrase certain commentaire. Je m'explique.

    Le VBA va analyser S01, copier-coller dans S02, et copier-coller dans S03 lorsque les lignes sont égales.

    CEPENDANT : si je modifie des données dans S02 et lance la VBA, la macro va me remettre le commentaire de S01 (ce qui est logique puisqu'il analyse les données précédentes).

    Il y a t-il une solution afin que le VBA analyse UNIQUEMENT sa feuille précédente ?

  5. #45
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Tu adaptes, Antoine.
    Et pour ce faire, tu vois la présence d'une feuille Synthèse 2018.
    Son nom débute par "S" et les 2 derniers caractères sont numériques.
    Elle est donc malencontreusement sélectionnée.
    D'où cette modification:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If IsNumeric(Right(.Name, 2)) And Len(.Name) = 3 Then
    La longueur d'exécution pourrait, à mon humble avis, s'expliquer par les calculs.
    Tu peux donc gérer le mode de calcul.

    D'où

    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
    Option Explicit
     
    Public Sub ajout_comment()
     
    Dim wk As Worksheet, wkpréc As Worksheet
    Dim num As Byte
    Dim i As Integer, dernvide As Integer
    Dim j As Integer, dernpréc As Integer
     
    Application.Calculation = xlCalculationManual
     
    'Balayage de la feuille S03 à la feuille S52
    For Each wk In ThisWorkbook.Worksheets
            With wk
                    If IsNumeric(Right(.Name, 2)) And Len(.Name) = 3 Then
                            num = Right(.Name, 2) + 0
                            If (.Name Like "S*" And num > 1) Then
                                    Debug.Print .Name
                                    dernvide = .Cells(.Rows.Count, 1).End(xlUp).Row
                                    'Définition de la feuille précédente d'où reporter le commentaire
                                    Debug.Print "lavaleur de num -1 " & num - 1
                                    Set wkpréc = ThisWorkbook.Worksheets("S" & Format(num - 1, "0#"))
                                    Debug.Print "la valeur au format " & Format(num - 1, "0#")
                                    With wkpréc
                                            dernpréc = .Cells(.Rows.Count, 1).End(xlUp).Row
                                    End With
                                    'Balayage de toutes les lignes à compléter
                                    For i = 2 To dernvide
                                            'Balayage de toutes les lignes d'où reporter le commentaire éventuel
                                            For j = 2 To dernpréc
                                                    'Test égalité concaténation - Voir fonction personnalisée ci-dessous.
                                                    If concat(Worksheets(.Name), i) = concat(wkpréc, j) Then
                                                            'Information du commentaire
                                                            .Cells(i, 16).Value = wkpréc.Cells(j, 16).Value
                                                            .Cells(i, 17).Value = wkpréc.Cells(j, 17).Value
                                                            Exit For
                                                    End If
                                            Next j
                                    Next i
                                    'libération des variables Worksheet
                                    Set wkpréc = Nothing
                            End If
                    End If
            End With
    Next wk
     
    Application.Calculation = xlCalculationAutomatic
     
    End Sub
     
     
    Public Function concat(lawks As Worksheet, laligne As Integer) As String
     
    Dim lachaine As String
    Dim col As Byte
     
    'Initialisation de la chaine de concaténation
    lachaine = ""
     
    'Concaténation de  la colonne A à la colonne O
    For col = 1 To 15
            lachaine = lachaine & lawks.Cells(laligne, col)
    Next col
     
    concat = lachaine
     
    End Function
    Il y a t-il une solution afin que le VBA analyse UNIQUEMENT sa feuille précédente ?
    Si tu souhaites effectuer la procédure sur une seule feuille, alors la gestion peut s'effectuer par Inputbox

    (éventuellement à adapter)

    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
    Option Explicit
     
    Public Sub ajout_comment()
     
    Dim wk As Worksheet, wkpréc As Worksheet
    Dim num As Byte
    Dim i As Integer, dernvide As Integer
    Dim j As Integer, dernpréc As Integer
     
    Application.Calculation = xlCalculationManual
     
    Dim num_mois As Byte
    num_mois = Application.InputBox( _
            Prompt:="Numéro de feuille (mois) dont vous voulez effectuer la modification", _
            Title:="Choix du mois", _
            Type:=1 _
            )
     
    Set wk = ThisWorkbook.Worksheets("S" & Format(num_mois, "0#"))
     
    With wk
            dernvide = .Cells(.Rows.Count, 1).End(xlUp).Row
            'Définition de la feuille précédente d'où reporter le commentaire
            Set wkpréc = ThisWorkbook.Worksheets("S" & Format(num_mois - 1, "0#"))
            With wkpréc
                    dernpréc = .Cells(.Rows.Count, 1).End(xlUp).Row
            End With
            'Balayage de toutes les lignes à compléter
            For i = 2 To dernvide
                    'Balayage de toutes les lignes d'où reporter le commentaire éventuel
                    For j = 2 To dernpréc
                            'Test égalité concaténation - Voir fonction personnalisée ci-dessous.
                            If concat(Worksheets(.Name), i) = concat(wkpréc, j) Then
                                    'Information du commentaire
                                    .Cells(i, 16).Value = wkpréc.Cells(j, 16).Value
                                    .Cells(i, 17).Value = wkpréc.Cells(j, 17).Value
                                    Exit For
                            End If
                    Next j
            Next i
            'libération des variables Worksheet
            Set wkpréc = Nothing
    End With
     
    Set wk = Nothing
     
    Application.Calculation = xlCalculationAutomatic
     
    End Sub

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  6. #46
    Membre à l'essai
    Homme Profil pro
    Etd. Supply Chain Manager
    Inscrit en
    Janvier 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Etd. Supply Chain Manager
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2019
    Messages : 41
    Points : 13
    Points
    13
    Par défaut
    Merci Marcel, ça fonctionne pas mal. Je viens de faire des tests et je ne rencontre plus de problème.

    Pour le 'Synthèse 2018', ça semblait tellement évident... mais il fallait qu'une personne extérieure me le dise pour tilter rapidement.

    En tout cas, merci.

  7. #47
    Membre à l'essai
    Homme Profil pro
    Etd. Supply Chain Manager
    Inscrit en
    Janvier 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Etd. Supply Chain Manager
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2019
    Messages : 41
    Points : 13
    Points
    13
    Par défaut
    MarcelG,

    Je reviens vers vous en cette nouvelle année afin de revoir une partie du code qui me bloque.

    Lors de la mise en route de la macro, celle-ci est incapable de faire l'opération "Onglet S03 - Onglet S02". Comme les variables sont en Byte, je comprends qu'il ne prenne pas en compte le zéro des semaines tel quel 'S02'.

    Ainsi, cette ligne me revient en erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set wk = ThisWorkbook.Worksheets("S" & Format(num_mois, "0#"))
    Dois-je comprends qu'au travers de "0#" seul le dernier chiffre est considéré ? Et comme le zéro ne l'est pas, il compare du vide à du vide.

    Je voudrais savoir comment procéder, est-ce que je peux mettre deux fois ## ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set wk = ThisWorkbook.Worksheets("S" & Format(num_mois, "##"))

  8. #48
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Bonjour Antoine, Bonjour le Forum,

    (Désolé pour cette absence. Débordé)

    A toi et à l'ensemble du Forum, je souhaite une très belle année 2020, remplie de joies, santé et harmonie.

    Ainsi, cette ligne me revient en erreur :
    Il te faut bien noter que la fonction Format retourne une valeur de texte (String)
    Dédoubler le caractère " ne sert à rien. On peut en utiliser 4 si l'on souhaite un séparateur de milliers, ce qui n'est pas le cas ici.

    A priori, l'erreur proviendrait de la variable num_mois.

    Afin de vérifier sa valeur, pourrais-tu
    - afficher la fenêtre des variables locales (Menu "Affichage" de l'éditeur VBE)
    - placer un point d'arrêt à la ligne précédente
    - lancer l'exécution de la procédure
    - constater la valeur de la variable dans la fenêtre ci-dessus mentionnée.
    - vérifier l'existence de la feuille de travail

    A plus tard.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  9. #49
    Membre à l'essai
    Homme Profil pro
    Etd. Supply Chain Manager
    Inscrit en
    Janvier 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Etd. Supply Chain Manager
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2019
    Messages : 41
    Points : 13
    Points
    13
    Par défaut
    MarcelG,

    Ayant mis deux fois le "##", cela fonctionne parfaitement.



    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
    Public Sub ajout_comment()
     
    Dim wk As Worksheet, wkpréc As Worksheet
    Dim num As Byte
    Dim i As Integer, dernvide As Integer
    Dim j As Integer, dernpréc As Integer
     
    Application.Calculation = xlCalculationManual
     
    Dim num_mois As Byte
    num_mois = Application.InputBox( _
            Prompt:="Numéro de la semaine générée (Ex: 2 pour S2, 11 pour S11)", _
            Title:="Choix du mois", _
            Type:=1 _
            )
     
    Set wk = ThisWorkbook.Worksheets("S" & Format(num_mois, "##"))

    Concernant la valeur, celle-ci est un chiffre.

  10. #50
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Antoine,

    Je n'ai pas repris l'intégralité de la discussion.
    A priori, les feuilles de ton classeur étaient nommées S02, S12....
    D'où les codes proposés.

    Ceci dit, je doute que, ne serait-ce que par exercice, tu aies suivi mes indications.

    Cela étant, malgré tout, puis-je te demander de tester le simple #.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set wk = ThisWorkbook.Worksheets("S" & Format(num_mois, "#"))
    Ceci par cette simple procédure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Option Explicit
     
    Public Sub essai_sem()
     
    Dim num_mois As Byte
     
    num_mois = 2
     
    MsgBox _
            Prompt:=(Format(num_mois, "##") = Format(num_mois, "#")), _
            Buttons:=vbInformation, _
            Title:="Test"
     
    End Sub
    C'est bien beau de se satisfaire d'un "çà marche".
    Encore faut-il prendre un peu de hauteur pour connaître les tenants et aboutissants du code que l'on rédige.
    C'est, à mon modeste avis, un moyen de progresser, donc un investissement.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  11. #51
    Nouveau Candidat au Club
    Homme Profil pro
    Approvisionneur
    Inscrit en
    Septembre 2020
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Approvisionneur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Septembre 2020
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Suite dossier copie commentaire
    Bonjour,

    Je me permets de venir vers vous ce jour pour faire suite au dossier d'Antoine.
    En effet, je viens de rejoindre l'entreprise qu'Antoine a quitté il y a peu en tant qu'alternant.
    Des modifications de dossiers ont eu lieu, et les différents classeurs Excel ont "bougé".
    Avec mon peu d'expérience en VBA, j'ai tant bien que mal réussi à remettre l'ensemble du processus sur pieds.
    Sauf la copie automatique des lignes de commentaires qui étaient présent la semaine passée..
    Je retrouve le même problème qu'Antoine " Erreur d'exécution '9' ".
    Après plusieurs manipulation l'erreur n'apparait plus mais les commentaires ne remontent pas..

    Merci d'avance pour votre aide !

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. Boucle copier coller entre 2 fichiers pour chaque ligne
    Par cheerleaders dans le forum Excel
    Réponses: 3
    Dernier message: 19/05/2015, 18h09
  2. Copier coller entre deux feuilles
    Par charlesveillet dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/08/2012, 10h59
  3. [XL-2000] Copier coller entre deux classeurs
    Par Juan Jacko dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 15/03/2011, 11h35
  4. Copier coller entre deux fichiers excel par macro
    Par miss-o-21 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/11/2009, 14h45
  5. Réponses: 5
    Dernier message: 16/08/2006, 20h09

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