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 une ligne dans un autre onglet [XL-2000]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 41
    Points : 31
    Points
    31
    Par défaut copier une ligne dans un autre onglet
    Bonjour,

    J'ai creé un tableau dans un onglet appellé "feuil1" et ma derniere colonne est une question, si la réponse est oui je souhaite que toute ma ligne se coupe et se copie dans un autre onglet -appellé "oui"-. Cet onglet à le même tableau que le précedent.

    Comment puis-je faire?

    Merci beaucoup

  2. #2
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 239
    Points : 307
    Points
    307
    Par défaut Recopie de lignes
    Bonjour,

    Il faut décomposé les choses simplement , voici les étapes :

    1)On compte le nombre de ligne de la feuil1
    2) On fait une boucle sur chacune de ces lignes.
    Pour chacunes des lignes , on teste la colonne condition
    -Si la condition est à Oui , on recopie dans le feuillet 'oui' et on incrémente le compteur pour connaitre le nombre de lignes du feuillet 'oui'
    Exemple de code ( je n'ai pas testé , il peut y avoir des erreurs de syntaxe):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    nb_lig_feuil1 = range ("A1").currentregion.rows.count
     
    ligne_feuil_oui = 2  ' on démarre à la ligne 2
    for ligne = 2 to nb_lig_feuil1
      if worksheets ("Feuil1").cells ( ligne , col_condition).value = "oui" then 
         for col = 1 to  col_condition
           worksheets ("oui").cells ( ligne_feuil_oui , col).value = worksheets ("Feuil1").cells ( ligne , col).value 
       next col 
     
    ligne_feuil_oui  = ligne_feuil_oui  + 1
     
    next ligne

  3. #3
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Bonjour,
    Voici une autre proposition avec une autre méthode pour détecter la dernière ligne (désolé codefacile) mais j'aime pas trop le 'currentregion.rows.count'; en effet imaginons un tableau de 3000 lignes dont les 600 dernières ne sont pas égales à 'oui' on va passer en revue les 600 dernières pour rien...
    J'ai aussi ajouter la détection de la dernière colonne puisque c'est celle là qui contient le fameux 'oui' et donc le compte du nombre de ligne sur base sur cette colonne.
    Autre précision que j'ai indiqué en commentaire dans le code, Oui est différent de oui, il faut donc gérer la casse pour être certain de bien copier tous les oui...
    Et pour finir, j'ai préféré la méthode de Copy au ballayage des colonnes pour affectation (ça me semble plus rapide) que deux boucles imbriquées (mais ton exemple est bon même si j'ai pas testé non plus )

    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
    Sub CopieOui()
    Dim NbCol As Long, NbLig As Long, r As Long, LigCible As Long
     
    NbCol = Sheets("Feuil1").Cells(1, Rows(1).Cells.Count).End(xlToLeft).Column 'Récupère le n° de la dernière colonne
    NbLig = Sheets("Feuil1").Cells(Columns(NbCol).Cells.Count, NbCol).End(xlUp).Row 'Récupère le N° de la dernière ligne de la dernière colonne
    LigCible = 1 'Débute à 1 car incrémentation à la première condition vrai; ceci veut dire qu'on écrase à chaque relance de la macro !!!
     
    For r = 2 To NbLig 'de 2 à la dernière ligne de la dernière colonne remplie (de 2 car titre)
        If UCase(Sheets("Feuil1").Cells(r, NbCol)) = "OUI" Then 'Attention à la casse Oui <> oui, donc on passe le contenu de la cellule vérifier en majuscule: Ucase(...)
            LigCible = LigCible + 1 'Incrémentation de la ligne cible pour le collage
            Sheets("Feuil1").Rows(r).Copy Destination:=Sheets("Oui").Cells(LigCible, 1) 'Copie de la ligne entière
        End If
    Next r 'Passage à la ligne suivante
     
    End Sub
    A+

    P.S. Comme je l'ai indiqué en commentaire dans le code, le fait de définir la première ligne cible comme étant la N°2 implique qu'à chaque lancement de la macro ça recopiera sur les copie précédentes.
    N'oubliez pas le si votre problème est solutionné.

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

Discussions similaires

  1. [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
  2. rechercher une date et copier la colonne dans un autre onglet
    Par jd69001 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/02/2012, 20h09
  3. rechercher une date et copier la ligne dans un autre onglet
    Par ptitloup57 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/02/2009, 13h34
  4. language SQL - Copier une ligne dans autre table
    Par fxd dans le forum Langage SQL
    Réponses: 1
    Dernier message: 26/10/2005, 18h16
  5. copier une ligne dans une autre table
    Par BoeufBrocoli dans le forum SQL
    Réponses: 5
    Dernier message: 24/10/2003, 22h59

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