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 :

Déplacer une ligne vers un autre onglet en fonction de la valeur d'une cellule


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    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
    Points : 66
    Points
    66
    Par défaut Déplacer une ligne vers un autre onglet en fonction de la valeur d'une cellule
    Bonjour,

    J'ai un fichier Excel avec 94 colonnes et 191 lignes.
    Mon problème est le suivant : Lorsque une ligne contient la valeur "Non retenu" en colonne T, je voudrais faire passer cette ligne dans une autre feuille du classeur.

    J'ai deux questions :

    - Est-il possible de ne faire passer que certaines colonne de cette ligne dans l'autre feuille ou est-ce que c'est obligatoirement la ligne entière qui sera déplacée ?
    - Faut-il impérativement que je renseigne la valeur "Non retenu" dans la cellule ? Car mon tableau est en fait déjà rempli, et je voulais savoir si il fallait que je retape la valeur "Non retenu" dans chacune des cellules pour que la ligne soit transférée ou si cela peut se faire directement...

    Voici le code VBA que j'ai mis en place pour l'instant :

    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
    Option Explicit
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim WsCible As Worksheet
    Dim LigneAjout As Long
    Dim NumLig  As Long
     
        If Target.Column = 20 Then
        Set WsCible = Worksheets("Annexe 2 (Avis Conf non retenu)")
        With WsCible
        LigneAjout = .Range("T" & .Rows.Count).End(xlUp).Row + 1
            If Target.Value = "Non retenu" Then
            Target.EntireRow.Copy Destination:=WsCible.Cells(LigneAjout, 1)
            End If
        End With
        Set WsCible = Nothing
        End If
    Merci d'avance pour vos réponses

  2. #2
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    - Tu peux évidemment ne copier que certaines cellules plutôt que toute la ligne
    - Je ne comprends pas bien la question, mais si tu veux dire que "Non Retenu" est déjà écrit dans les cellules, plutôt que d'utiliser l'évènement Worksheet_change, tu peux faire une macro qui boucle sur les lignes.
    « Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

  3. #3
    Membre du Club
    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
    Points : 66
    Points
    66
    Par défaut
    Et comment faire pour ne copier que certaines colonnes plutôt que toute la ligne ?

    En fait, je ne suis pas très doué en langage VBA, j'ai déjà pas mal galéré pour faire ce code et je ne vois pas vraiment ce que tu veux dire par "faire une boucle sur les lignes". Je vois le principe, le programme regarde une ligne aprés l'autre, mais je ne vois pas comment le réaliser..

    Merci en tout cas pour cette première réponse

  4. #4
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    A 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
    Dim wsSource As Worksheet
    Dim wsCible As Worksheet
    Dim derniereLigne As Integer
    Dim tmpLigne As Integer
    Dim i As Integer
     
    Set wsSource = Worksheets("Ta feuille source")
    Set wsCible = Worksheets("Annexe 2 (Avis Conf non retenu)")
     
    wsCible.Cells.ClearContents 'Eventuellement à modifier pour n'effacer qu'une partie
    tmpLigne = 1
     
    'On récupère la dernière ligne remplie
    derniereLigne = wsSource.UsedRange.Rows + wsSource.UsedRange.Row
     
    'Pour chaque ligne du fichier source
    For i = 1 To derniereLigne
        'Si la colonne T contient "Non retenu"
        If wsSource.Cells(i, "T").Value = "Non retenu" Then
            'On copie les colonnes qui nous intéressent
            wsCible.Cells(tmpLigne, "A").Value = wsSource.Cells(i, "A").Value
            wsCible.Cells(tmpLigne, "C").Value = wsSource.Cells(i, "C").Value
            'On peut aussi faire plusieurs cellules d'un coup
            wsSource.Range("F" & i & "J" & i).Copy wsCible.Range("F" & tmpLigne)
     
            tmpLigne = tmpLigne + 1
        End If
    Next i
    « Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

  5. #5
    Membre du Club
    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
    Points : 66
    Points
    66
    Par défaut
    Un grand merci à toi ZebreLoup !

    Par contre si je copie ce code et que je l'adapte avec le nom de mes feuilles ça me met "Erreur type 13 : Incompatibilité de type"...
    Tu vois d'où cela peut venir ?

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 03/06/2014, 14h16
  2. [XL-2007] Déplacer des lignes dans un autre onglet selon valeur d'une cellule
    Par Accessifiante dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 06/05/2014, 16h45
  3. copier coller de ligne vers un autre onglet
    Par dinettes dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/06/2010, 17h43
  4. [XL-2000] copier une ligne dans un autre onglet
    Par chouki60 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/10/2009, 13h10
  5. [VBA]comment copier une ligne vers un autre classeur
    Par iboulaye1980 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/05/2007, 18h22

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