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 :

Couper/coller ligne automatiquement cellule modifiée [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 9
    Par défaut Couper/coller ligne automatiquement cellule modifiée
    Bonjour,

    Etant débutant en VBA et ne sachant pas du tout comment faire, j'aurais besoin de votre aide !

    Le but est de réaliser une macro qui permet de couper/coller une ligne dans une autre feuille si la cellule d'une colonne est modifiée.
    Par exemple, si une cellule de ma colonne A est non vide ou une cellule de ma colonne B est égale à "Toto" dans ma feuille1, alors il coupe et colle la ligne dans ma feuille2.

    De plus, j'aimerais que cela soit automatisé ... c'est-à-dire que dès lorsque les cellules répondent aux conditions (colonne A = cellule non vide, colonne B = toto), il m'effectue le couper/coller dans l'autre feuille et qu'il ne m'écrase pas les lignes qui y sont déjà collées.

    Est-ce que quelqu'un saurait comment faire ?

    Merci d'avance !

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Arcenix Voir le message
    si la cellule d'une colonne est modifiée.
    Utiliser un évènement Worksheet_Change en vérifiant que la cellule qui a changé est dans la zone qui t'intéresse.
    https://msdn.microsoft.com/fr-fr/lib.../ff839775.aspx

    couper/coller une ligne dans une autre feuille
    Méthode Cut appliqué à un Range (ou un Row) référençant ta ligne.
    https://msdn.microsoft.com/fr-fr/lib.../ff838374.aspx

    qu'il ne m'écrase pas les lignes qui y sont déjà collées.
    Utilise la propriété End(xlUp) de Range pour trouver quelle est la dernière ligne remplie et donc faire le coller sur la suivante.
    https://msdn.microsoft.com/fr-fr/lib.../ff839539.aspx

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 9
    Par défaut
    Merci pour ta réponse !

    J'ai réussi à écrire un bout de code à l'aide de tes liens mais ça ne fonctionne pas :

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim KeyCells, KeyCells2 As Range
        Set KeyCells = Range("G2:G5000")
        Set KeyCells2 = Range("H2:H5000")
        Dim DernLigne1, DernLigne2 As Long
     
        If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
            Ligne1 = Target.Row
            DernLigne1 = Worksheets("Rebut").Range("A" & Rows.Count).End(xlUp).Row
            Range(Ligne1).Cut (DernLigne1)
            MsgBox "La ligne " & Ligne1 & " vient d'être déplacée ... dans la feuille Rebut"
        End If
     
     
        If Not Application.Intersect(KeyCells2, Range(Target.Address)) Is Nothing Then
            If Target.Value = "Sorti Immo" Or Target.Value = "Destocké" Then
                Ligne2 = Target.Row
                DernLigne2 = Worksheets("Rebut").Range("A" & Rows.Count).End(xlUp).Row
                Range(Ligne2).Cut (DernLigne2)
                MsgBox "La ligne " & Ligne2 & " vient d'être déplacée ... dans la feuille Rebut"
            End If
        End If
     
    End Sub
    Je ne comprends pas le soucis avec le couper/coller ...
    Une idée ?

    Merci

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Arcenix Voir le message
    ça ne fonctionne pas :
    "Ca ne fonctionne pas", ça n'est pas très précis comme description de dysfonctionnement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Dim KeyCells, KeyCells2 As Range
    Quand tu écris ça, seule KeyCells2 est déclaré comme Range.
    KeyCells est déclarée comme Variant.
    La bonne syntaxe est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Dim KeyCells As Range, KeyCells2 As Range
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            Ligne1 = Target.Row
            DernLigne1 = Worksheets("Rebut").Range("A" & Rows.Count).End(xlUp).Row
            Range(Ligne1).Cut (DernLigne1)
    Ca c'est pas bon.

    Dans le Range de la seconde ligne, tu ne donnes qu'un numéro de ligne alors qu'il faut donner une adresse complète (ligne et colonne).
    Si tu veux te référencer uniquement à la ligne, il faut utiliser Rows à la place de Range.

    La destination de Cut ne doit pas être une valeur numérique mais une référence de cellule.

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 9
    Par défaut
    Rebonjour,

    J'ai modifié la destination de mon cut et j'obtiens maintenant ceci :

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim KeyCells As Range, KeyCells2 As Range
        Set KeyCells = Range("G2:G5000")
        Set KeyCells2 = Range("H2:H5000")
        Dim DernLigne1, DernLigne2 As Long
     
        If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
            Ligne1 = Target.Row
            Rows(Ligne1).Cut Worksheets("Rebut").Cells(Rows.Count, 1).End(xlUp)(2)
            MsgBox "La ligne " & Ligne1 & " vient d'être déplacée ... dans la feuille Rebut"
        End If
     
     
        If Not Application.Intersect(KeyCells2, Range(Target.Address)) Is Nothing Then
            If Target.Value = "Sorti Immo" Or Target.Value = "Destocké" Then
                Ligne2 = Target.Row
                Rows(Ligne2).Cut Worksheets("Rebut").Cells(Rows.Count, 1).End(xlUp)(2)
                MsgBox "La ligne " & Ligne2 & " vient d'être déplacée ... dans la feuille Rebut"
            End If
        End If
     
    End Sub
    Le débogage ne m'affiche aucune erreur de code cependant lorsque je modifie l'une des cellules concernées par le couper/coller dans l'autre feuille, mon classeur se fige et il n'effectue pas la modification ...

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

Discussions similaires

  1. Faire un couper - coller de plusieurs cellules d'un tableau
    Par absot dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 08/06/2014, 20h41
  2. [XL-2003] VBA : Comparer cellules + couper/coller lignes
    Par CedricBDO dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 02/08/2011, 09h22
  3. Verifier date(s) puis couper/coller ligne(s) si correspondance
    Par jonathanoudelet dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/08/2008, 17h23
  4. Renvoi à la ligne automatique cellules fusionnées
    Par ginkas31 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/06/2008, 14h14
  5. Macro renvoi à la ligne automatique cellules fusionnées
    Par Couettecouette dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 18/10/2007, 11h08

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