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 Excel Vba


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 25
    Par défaut Macro Excel Vba
    Bonjour,

    Je suis débutante en VBA. Dans le cadre de mon stage, je dois effectuer une macro qui doit faire l’exécution suivante:
    j'aimerais copier une colonne d'un fichier .xls sur un autre fichier .xls qui vient en fait d'un .csv. Les deux fichiers ont les mêmes en-tête dans les mêmes classeurs. Ils se trouvent ds le même dossier.
    La difficulté ici est de copier la colonne de l'ancien fichier et la transférer dans l'autre fichier qui lui est mis à j (cela signifie qu'il peut y avoir moins ou plus de lignes ds celui).
    Pour être plus claire depuis un export.csv via la macro je sors un fichier .xls. A l'intérieur de ce fichier, il y a un tableau. Mon maître de stage ajoute des commentaire ds la colonne par ex P. Tout les 2jours, depuis l'export je mets à jour le fichier .xls. Il y a donc des lignes qui s'ajoutent ou se suppriment. Ce que me demande mon maitre de stage c'est de recopier les commentaires qu'il a ajouté et de les mettre ds le nouveau xls.

    Merci par avance de vos réponses!!
    Bises

  2. #2
    Membre confirmé
    Femme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Avril 2012
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Cyberdocumentaliste

    Informations forums :
    Inscription : Avril 2012
    Messages : 113
    Par défaut
    Bonjour,

    Si tu veux simplement copier une colonne à la place d'une autre, c'est assez simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Range("A1:A500").Select 'Sélectionne de la cellule A1 à la cellule A500
    Selection.Copy
     
    Workbooks.Open ("H:\DATA\Test\NouveauClasseur.xls") 'Ouvre le deuxième classeur
    Workbooks("NouveauClasseur.xls").Activate
     
    Columns("A").Select 'Sélectionne la colonne dans laquelle copier
     
    ActiveSheet.Paste 'Copie dans le deuxième classeur
    En espérant que cela soit suffisant

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 25
    Par défaut
    oui mais le problème c'est qu'il y a des lignes où rien est inscrit. De plus, ds le fichier .xls qui est mis à j, il y a des lignes qui se sont soit ajoutées ou supprimées. Du coup, il faut faire attention au fait que le commentaire situé sur le n° de la ligne (ex ligne 5) se retrouve à la même ligne ds le nouveau fichier .xls
    Je ne sais pas si j'ai été claire?

    Un stagiaire avant moi a fait ça mais ça ne marche pas. Pourtant ça marché avant qu'il s'en aille. Je ne sais pas pourquoi.
    ca peux te donner une petite idée...

    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
    Private Sub CommandButton3_Click()
     
        Unload Me
     
        Dim fichier As String
        Dim i As Integer
        Dim j As Integer
        Dim nbLigne As Integer
        Dim trouver As Boolean
        Dim numCl As Integer
     
     
        fichier = TextBox1.Value
        chemin = ThisWorkbook.Path
        Workbooks.Open (chemin & "\" & fichier)
        Windows(fichier).Activate
        Sheets("Support").Select
        nbLigne = Cells(1, 1).CurrentRegion.Rows.Count
     
     
        For i = 2 To Cells(1, 1).CurrentRegion.Rows.Count
            Windows(fichier).Activate
            Sheets("Support").Select
            Cells(i, 16).Select
            Selection.Copy
            numCl = Cells(i, 1)
            trouver = True
            j = 2
     
            If IsEmpty(Cells(i, 16)) = False Then
                Windows("Restitutions.xls").Activate
                Sheets("Support").Select
     
                While trouver And j < nbLigne + 1
                    Cells(j, 1).Select
                    If Cells(j, 1).Value = numCl Then
                        Cells(j, 16).Select
                        ActiveSheet.Paste
                        trouver = False
                    Else
                        j = j + 1
                    End If
                Wend
            End If
        Next i
     
    End Sub

  4. #4
    Membre confirmé
    Femme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Avril 2012
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Cyberdocumentaliste

    Informations forums :
    Inscription : Avril 2012
    Messages : 113
    Par défaut
    Bonjour,

    Désolée mais j'ai du mal à visualiser le problème Si tu copies la colonne de ton ancien document vers ton nouveau document, tout sera exactement à la même place que dans le document d'origine, et donc pas de soucis au niveau des lignes ajoutées ou enlevées. Le commentaire à la ligne 5 se retrouvera donc bien à la ligne 5 du nouveau fichier Excel.

    La question est : y a t il des lignes du premier fichier qui ne doivent pas être copiées dans le deuxième ? Si effectivement certaines lignes ne doivent pas être copiées, comment sait on lesquelles doivent l'être, ou inversement, lesquelles ne doivent pas être copiées ?

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 25
    Par défaut
    Oui je vois ce que tu veux dire. Mais le premier document est en fait une extraction à partir d'un export.csv. J'effectue cette extraction via une macro qui existe déjà (fait par un autre stagaire). Cette macro permet d'extraire un fichier restitutions.xls relativement bien présenté avec 4 feuilles où on retrouve des tableaux, tableau dynamique, etc. Et je veux ajouter dans cette extraction les commentaires issu d'un autre fichier .xls directement via la même macro. Du coup l'ancien stagiaire a eu l'idée de créer un command-bouton où on inclut le fichier avec les commentaires.Le code dont je t'ai donné devrait permettre ainsi de récupérer les commentaire de la colonne P de la feuille 2 et les copier ds la restitution.xls.
    C'est peut être plus claire?

  6. #6
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    J’ai effectué le test avec les éléments suivants :
    Dans le classeur "Restitutions.xlsm", j’ai créé un Userform qui contient la TextBox1 et le CommandButton3.
    Le code de cet Userform est repris de celui que tu as indiqué :
    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
    Option Explicit
    Private Sub CommandButton3_Click()
    Unload Me
    Dim Fichier As String, Chemin As String
    Dim i As Integer, j As Integer, NbLigne As Integer, NumCl As Integer
    Dim Trouver As Boolean
    Dim Wb1 As Workbook, Wb2 As Workbook
    Dim Ws1 As Worksheet, Ws2 As Worksheet
     
        Application.ScreenUpdating = False
        'Nouveau fichier issu de la mise à jour
        Set Wb1 = Workbooks("Restitutions.xlsm")
        Set Ws1 = Wb1.Worksheets("Support")
     
        'Ancien fichier où se trouvent les commentaires
        Fichier = TextBox1.Text
        Chemin = ThisWorkbook.Path
        Set Wb2 = Workbooks.Open(Chemin & "\" & Fichier)
        Set Ws2 = Wb2.Worksheets("Support")
     
            Ws1.Activate
            'Nombre de lignes dans l'ancien fichier
            NbLigne = Ws2.Cells(1, 1).CurrentRegion.Rows.Count
            'On balaye toutes les lignes de l'ancien fichier
            For i = 2 To NbLigne
                'On copie le commentaire
                Ws2.Cells(i, 16).Copy
                'On relève l'identifiant de la ligne où doit se trouver le commentaire
                NumCl = Ws2.Cells(i, 1)
                Trouver = True
                j = 2
                'Si le commentaire existe
                If IsEmpty(Ws2.Cells(i, 16)) = False Then
                'On balaye toutes les lignes du nouveau fichier afin de trouver le même identifiant
                    While Trouver And j < NbLigne + 1
                        'Si le même identifiant est trouvé, on copie le commentaire
                        If Ws1.Cells(j, 1).Value = NumCl Then
                            Ws1.Paste Destination:=Ws1.Cells(j, 16)
                            Trouver = False
                        Else
                            j = j + 1
                        End If
                    Wend
                End If
            Next i
        Application.CutCopyMode = False
        Application.ScreenUpdating = True
    End Sub
    La procédure va bien copier les commentaires contenus dans la colonne P de l’ancien fichier et les colle dans la colonne P du nouveau fichier (Restitutions.xlsm), à l’emplacement correspondant à la ligne identifiée avec la valeur de la colonne A.

    Cordialement.

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

Discussions similaires

  1. Appeler une dll ou un autre module vba depuis une macro excel vba
    Par technobiz dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/11/2008, 14h24
  2. Réponses: 3
    Dernier message: 19/03/2008, 21h44
  3. Macro Excel VBA : création automatique de 140 graphes/graphiques
    Par techneric dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 11/02/2007, 10h13
  4. macro excel vba
    Par fildupa dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/12/2006, 21h29

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