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 une ligne en fonction d'un certain champs


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
    Apprenti Ingénieur
    Inscrit en
    Octobre 2021
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Apprenti Ingénieur

    Informations forums :
    Inscription : Octobre 2021
    Messages : 40
    Par défaut Copier / coller une ligne en fonction d'un certain champs
    Bonjour à tous, je vous explique mon problème.
    J'ai un onglet avec un export qui provient de SAP, et j'aimerais en fonction de ce que je rentre dans ma cellule A que ma ligne se copie / colle soit dans un onglet soit dans un autre.

    Mais, tout en gardant mes données de l'onglet avec l'export SAP. J'ai essayé avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    For i = [A65000].End(xlUp).Row To 1 Step -1
      If Cells(i, 1) = "Laure" Then Sheets("Export").Rows(i).Copy Sheets("Projet").Cells(Rows.Count, 1).End(xlUp)(2)
    Next i
     
    Application.Calculation = xlCalculationAutomatic
    Ce code fonctionne, lorsque j'écris Projet dans la colonne A, cela me transfert bien les lignes dans l'autre onglet mais je souhaite aussi boucler uniquement sur les données que je rajoutent à la suite dans mon onglet Export pour ne pas boucler sur toutes les lignes de mon onglet Export à chaque fois.
    De plus, j'aimerais aussi lorsque j'écris CAPEX dans une des lignes de ma colonne A que cela se transfert dans l'onglet CAPEX.

    Auriez-vous des idées à me proposer ? Surtout pour éviter de boucler sur toutes mes lignes à chaque fois et boucler uniquement sur celles que je viens de rajouter dans mon onglet Export.

    Merci d'avance, n'hésitez pas si je n'ai pas été assez clair, c'est assez compliqué à expliquer.

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Salut, essaie ceci, j'utilise l'évènement _Change de la feuille "Export".

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim ExportSheet As Worksheet
        Dim ProjetSheet As Worksheet
        Dim CapexSheet As Worksheet
        Dim LastRow As Long
        Dim Cell As Range
     
        ' Définir les feuilles de travail
        Set ExportSheet = ThisWorkbook.Sheets("Export")
        Set ProjetSheet = ThisWorkbook.Sheets("Projet")
        Set CapexSheet = ThisWorkbook.Sheets("CAPEX")
     
        ' Vérifier si la modification a eu lieu dans la colonne A de la feuille "Export"
        If Not Intersect(Target, ExportSheet.Columns("A")) Is Nothing Then
            Application.ScreenUpdating = False
            Application.Calculation = xlCalculationManual
     
            ' Parcourir chaque cellule modifiée
            For Each Cell In Target
                If Cell.Value = "Projet" Then
                    ' Trouver la dernière ligne non vide dans la colonne A de la feuille "Projet"
                    LastRow = ProjetSheet.Cells(ProjetSheet.Rows.Count, "A").End(xlUp).Row
                    ' Copier la ligne de la feuille "Export" vers la feuille "Projet"
                    ExportSheet.Rows(Cell.Row).Copy ProjetSheet.Cells(LastRow + 1, 1)
                ElseIf Cell.Value = "CAPEX" Then
                    ' Trouver la dernière ligne non vide dans la colonne A de la feuille "CAPEX"
                    LastRow = CapexSheet.Cells(CapexSheet.Rows.Count, "A").End(xlUp).Row
                    ' Copier la ligne de la feuille "Export" vers la feuille "CAPEX"
                    ExportSheet.Rows(Cell.Row).Copy CapexSheet.Cells(LastRow + 1, 1)
                End If
            Next Cell
     
            Application.Calculation = xlCalculationAutomatic
            Application.ScreenUpdating = True
        End If
    End Sub

  3. #3
    Membre averti
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Octobre 2021
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Apprenti Ingénieur

    Informations forums :
    Inscription : Octobre 2021
    Messages : 40
    Par défaut
    Citation Envoyé par Franc Voir le message
    Salut, essaie ceci, j'utilise l'évènement _Change de la feuille "Export".

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim ExportSheet As Worksheet
        Dim ProjetSheet As Worksheet
        Dim CapexSheet As Worksheet
        Dim LastRow As Long
        Dim Cell As Range
     
        ' Définir les feuilles de travail
        Set ExportSheet = ThisWorkbook.Sheets("Export")
        Set ProjetSheet = ThisWorkbook.Sheets("Projet")
        Set CapexSheet = ThisWorkbook.Sheets("CAPEX")
     
        ' Vérifier si la modification a eu lieu dans la colonne A de la feuille "Export"
        If Not Intersect(Target, ExportSheet.Columns("A")) Is Nothing Then
            Application.ScreenUpdating = False
            Application.Calculation = xlCalculationManual
     
            ' Parcourir chaque cellule modifiée
            For Each Cell In Target
                If Cell.Value = "Projet" Then
                    ' Trouver la dernière ligne non vide dans la colonne A de la feuille "Projet"
                    LastRow = ProjetSheet.Cells(ProjetSheet.Rows.Count, "A").End(xlUp).Row
                    ' Copier la ligne de la feuille "Export" vers la feuille "Projet"
                    ExportSheet.Rows(Cell.Row).Copy ProjetSheet.Cells(LastRow + 1, 1)
                ElseIf Cell.Value = "CAPEX" Then
                    ' Trouver la dernière ligne non vide dans la colonne A de la feuille "CAPEX"
                    LastRow = CapexSheet.Cells(CapexSheet.Rows.Count, "A").End(xlUp).Row
                    ' Copier la ligne de la feuille "Export" vers la feuille "CAPEX"
                    ExportSheet.Rows(Cell.Row).Copy CapexSheet.Cells(LastRow + 1, 1)
                End If
            Next Cell
     
            Application.Calculation = xlCalculationAutomatic
            Application.ScreenUpdating = True
        End If
    End Sub
    Bonjour,

    merci beaucoup pour ta solution rapide qui fonctionne merveilleusement bien !
    Sais-tu de quelle manière je pourrais copier / coller uniquement les colonnes allant de B à P ? Peut-être en remplaçant Rows par un Range ?

    Merci d'avance et bonne soirée

  4. #4
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Modifie la ligne de copie comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     ' Copier les données de la colonne B à P de la ligne de la feuille "Export" vers la feuille "Projet"
     ExportSheet.Range("B" & Cell.Row & ":P" & Cell.Row).Copy ProjetSheet.Cells(LastRow + 1, 2) ' 2 correspond à la colonne B dans "Projet"

  5. #5
    Membre averti
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Octobre 2021
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Apprenti Ingénieur

    Informations forums :
    Inscription : Octobre 2021
    Messages : 40
    Par défaut
    Citation Envoyé par Franc Voir le message
    Modifie la ligne de copie comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     ' Copier les données de la colonne B à P de la ligne de la feuille "Export" vers la feuille "Projet"
     ExportSheet.Range("B" & Cell.Row & ":P" & Cell.Row).Copy ProjetSheet.Cells(LastRow + 1, 2) ' 2 correspond à la colonne B dans "Projet"
    Tout marche parfaitement !
    Merci beaucoup et bonne journée

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

Discussions similaires

  1. [XL-2016] Copier/coller une ligne en fonction d'une date
    Par pierre3b dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 03/12/2019, 16h23
  2. [XL-2010] Bouton permettant de copier coller une ligne en fonction de deux choix
    Par dr69007 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/11/2017, 17h51
  3. [XL-2010] Copier-Coller des lignes en fonction d'une date
    Par LeDVLP dans le forum Excel
    Réponses: 3
    Dernier message: 03/11/2017, 09h13
  4. Copier coller des lignes en fonction de la valeurs d'une cellule
    Par Tyu38 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/09/2014, 09h38
  5. Copier Coller une ligne d'une table avec modif ?
    Par nolan76 dans le forum Requêtes
    Réponses: 4
    Dernier message: 04/03/2004, 16h34

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