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 automatique pour passer une ligne d''une feuille à l'autre


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 116
    Par défaut Macro automatique pour passer une ligne d''une feuille à l'autre
    Bonjour,

    J'ai un fichier avec 2 feuilles :
    - 1 feuille "opérations" qui regroupent toutes les opérations (1 opération = 1 ligne)
    - 1 feuille "opérations terminées" où j'aimerai regrouper les opérations qui ont le statut "terminées" dans la feuille 1

    J'ai donc une colonne "statut de l'opération" dans la Feuille1 et je voudrais que lorsque on tape "terminée" dans cette colonne, la ligne de l'opération aille directement dans la feuille2.

    J'ai mi en place ce code :

    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
    Sub Opérationsterminées()
     
      Dim Lig     As Long
      Dim Col     As String
      Dim NbrLig  As Long
      Dim NumLig  As Long
     
      Sheets("Opérations terminées").Activate ' feuille de destination
     
      Col = "P"                 ' colonne de la donnée non vide à tester
      NumLig = 0
      With Sheets("Opérations")     ' feuille source
      NbrLig = .Cells(65536, Col).End(xlUp).Row
      For Lig = 1 To NbrLig
        If .Cells(Lig, Col).Value = "Terminée" Then
          .Cells(Lig, Col).EntireRow.Copy
          NumLig = NumLig + 1
          Cells(NumLig, 1).Select
          ActiveSheet.Paste
        End If
      Next
      End With
     
    End Sub

    Ce code fonctionne mais je suis obligé de lancer le programme pour que le changement de feuille s'effectue, et je voudrais qu'il se fasse automatiquement dés que je rempli la colonne "statut" par "terminée"..

    Comment faire ?

  2. #2
    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,

    Tu peux obtenir le résultat attendu en plaçant le code suivant dans le module de la feuille "Opérations".
    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
    Option Explicit
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim WsSource As Worksheet
    Dim WsCible As Worksheet
    Dim LigneAjout As Long
    Dim NumLig  As Long
        If Target.Column = 16 Then
            Set WsCible = Worksheets("Opérations terminées")
            Set WsSource = Worksheets("Opérations")
            With WsCible
                LigneAjout = .Range("P" & .Rows.Count).End(xlUp).Row + 1
                If Target.Value = "Terminée" Then
                    Target.EntireRow.Copy Destination:=WsCible.Cells(LigneAjout, 1)
                End If
            End With
            Set WsCible = Nothing
            Set WsSource = Nothing
        End If
    End Sub
    Cordialement

  3. #3
    Membre habitué
    Homme Profil pro
    Automaticien
    Inscrit en
    Avril 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

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

    tu pourrais essayer en plaçant cette routine dans le code de la feuille "Opérations"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Columns(16)) Is Nothing And Target.Value = "Terminée" Then
      Target.EntireRow.Copy
      With Sheets("Opérations terminées")
        .Paste Destination:=.Cells(.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1)
      End With
    End If
    End Sub
    cordialement

    oups : un peu tard

  4. #4
    Membre très actif
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 116
    Par défaut
    Merci à vous deux, ça fonctionne parfaitement, vous êtes magiques

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/01/2015, 18h30
  2. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  3. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  4. [E-00] Syntaxe pour insérer une ligne ou une colonne dans une feuille
    Par Benjycool dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/02/2009, 09h27
  5. Commande pour passer à la ligne dans une cellule
    Par tim974 dans le forum Excel
    Réponses: 2
    Dernier message: 22/01/2009, 12h11

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