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 :

boucle copier cellule vers une autre feuille


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 9
    Points : 4
    Points
    4
    Par défaut boucle copier cellule vers une autre feuille
    Bonjour,
    Voici mon " soucis" je débute et en vba et j'ai bricolé en fouinant sur le web un code qui me permet de tester un tableau sous forme de boucle.

    Si la colone f= x (dans la feuille stock) ça recopie toute la ligne vers la seconde feuille ( commande).

    tout fonctionne à merveille sauf que dans la feuille stock ensuite ma macro fait le ménage et supprime les colonnes inutiles.

    J'ai beau bricolé tout et n'importe quoi , je n'arrive pas à faire en sorte que si la case f=X (stock) ça ne copie que les cases a b et h au lieu de toute la ligne histoire de simplifier la macro et le travail d excel.

    Mon " travail" fonctionne mais je voudrai optimiser car la en gros je test je copie tout et je supprime.

    Voici mon code

    Merci pour votre aide






    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
    Sub fournitures()
    
    
    
    Dim Lig     As Long
      Dim Col     As String
      Dim NbrLig  As Long
      Dim NumLig  As Long
      
      Sheets("commande").Activate ' feuille de destination
      
      Col = "f"                 ' colonne données non vides à tester'
      NumLig = 2          'alors là ca doit etre le N° de la 1er ligne de données en comptant la ligne 1 = 0 .... ? '
      With Sheets("stock")     ' feuille source'
      NbrLig = .Cells(65536, Col).End(xlUp).Row
      For Lig = 2 To NbrLig             'n° de la 1ere ligne de donnéesla ligne 1 = 0'
        If .Cells(Lig, Col).Value = "x" Then
        .Cells(Lig, Col).EntireRow.Copy         c'est cette ligne la que je ne sais pas modifier correctement
      
     
          NumLig = NumLig + 1
          Sheets("commande").Cells(NumLig, 1).Insert Shift:=xlDown
                'ici pour insérer ou  .Paste pour coller'
                'ici .insert Shift:=xlDown pour coller'
        End If
      Next
    End With
    End Sub

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut


    Bonjour,

    conformément aux règles de ce forum, merci de baliser le code via l'icône # dédiée ‼

    Le plus efficace (sans boucle) et le plus simple est de définir dans la feuille de destination juste une ligne avec les mêmes titres
    de colonnes à copier de la feuille source puis d'utiliser un filtre avancé, le tout représentant moins de dix lignes de code …



    _____________________________________________________________________________________________________
    Je suis Charlie - Je suis Bardo

  3. #3
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 125
    Points : 9 953
    Points
    9 953
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    proposition sans filtre avancé, nombres de lignes de codes raisonnables (avec deux lignes supplémentaires pour instancier la valeur cherchée, ce qui n'est pas impératif), sans avoir besoin de préparer le terrain (contrairement aux filtres avancés)

    tout est commenté, si tu dois changer l'agencement des données écrites dans la feuille commande
    après, il faut adapter la partie qui défini la première ligne d'écriture dans la feuille commande, là ça écrit à partir de la ligne 2, qu'il y ai déjà des données ou non

    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
    Sub fournitures()
     
    Dim Tablo
    Dim i As Long
    Dim j As Long
    Dim Valeur As String
     
    ' ce qu'on cherche en colonne F
    Valeur = "x"
     
    ' première ligne d'écriture dans la feuille commande
    j = 2
     
    ' récupération des données de la feuille Stock
    Tablo = Sheets("stock").UsedRange
     
    ' pour chaque ligne de données
    For i = LBound(Tablo, 1) To UBound(Tablo, 1)
        ' si la valeur cherchée est en colonne F
        If Tablo(i, 6) = Valeur Then
            ' écriture de la colonne A en colonne A
            Sheets("commande").Cells(j, 1) = Tablo(i, 1)
            ' écriture de la colonne B en colonne B
            Sheets("commande").Cells(j, 2) = Tablo(i, 2)
            ' écriture de la colonne H en colonne C
            Sheets("commande").Cells(j, 3) = Tablo(i, 8)
     
            ' décalage de la ligne d'écriture
            j = j + 1
        End If
    ' ligne de données suivante
    Next i
     
     
    End Sub

    EDIT : 10 lignes de code tout pile si on supprime les commentaires, les variables superflues et les sauts de lignes

  4. #4
    Membre émérite Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Points : 2 439
    Points
    2 439
    Par défaut
    Test avec ça :
    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
    Sub fournitures()
        Dim Col&, Lig&, NbrLig&, NumLig&
     
        Sheets("commande").Select ' feuille de destination
     
        Col = 6 ' colonne données non vides à tester'
        NumLig = 2 'alors là ca doit etre le N° de la 1er ligne de données en comptant la ligne 1 = 0 .... ? '
            'Non c'est (je pense) car ta ligne 1 doit etre l'en-tete
     
        With Sheets("stock") ' feuille source'
            NbrLig = .Cells(Application.Rows.Count, Col).End(xlUp).Row
            For Lig = 2 To NbrLig 'n° de la 1ere ligne de donnéesla ligne 1 = 0'
                If .Cells(Lig, Col).Value = "x" Then
                    .Cells(Lig, Col).EntireRow.Copy 'c 'est cette ligne la que je ne sais pas modifier correctement
                    NumLig = NumLig + 1
                    Sheets("commande").Cells(NumLig, 1).Insert Shift:=xlDown
                    'ici pour insérer ou .Paste pour coller'
                    'ici .insert Shift:=xlDown pour coller'
                End If
            Next
        End With
    End Sub
    Cells(Lig, Col) avec col="f" je suis pas sur que ça puisse fonctionner

  5. #5
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut



    C'est bien pour un apprentissage de la logique algorithmique mais utiliser une boucle dans ce cas
    avec Excel peut s'avérer énormément gourmand en temps d'exécution, c'est vraiment ballot !

    Qui plus est avec le filtre avancé une unique ligne de code est nécessaire pour juste copier les données souhaitées !

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Bonjour,
    Merci pour vos réponses

    j'ai commencé par les filtres avancés , ca pourrait répondre à mon soucis, je ne maitrisais pas cela non plus et cela me posait problème pour la suite avec des copier coller des résultats vers un autre classeur; mais j'ai viré cette liaison donc cela pourrait me suffir en bricolant la mise en page.
    Car je suppose que ce filtre élaboré ( non dynamique ) peut se retrouver dans un bouton macro pour l effectuer dès que besoin.


    JE vais étudier les codes vba aussi , ca me plait bien de comprendre un peu tout ça.

    Encore merci de cette rapidité

    Ps j'ai édité pour les balises codes désolé

  7. #7
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut


    Qu'entends-tu par « non dynamique » ? Pour moi rien n'est plus dynamique qu'un filtre avancé en mode copie …

    Sinon joindre un classeur exemple .xlsx (sans macro) avec la feuille commande vide sauf sa première ligne
    comportant les titres des colonnes à récupérer de la feuille stock source et, dans une zone libre d'une de ses feuilles
    avec un espacement d'au moins une colonne entièrement vide entre, dans la première ligne le titre de la colonne à filtrer
    et dans la cellule en-dessous le critère du filtre (x par exemple) …

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    alors concernant joe.levrai ça fonctionne impeccable. Merci !! il faut que j épluche un peu pour comprendre exactement comment ça fonctionne


    Quand je dis que ce n'est pas dynamique, je pensais que le filtre ( je déplace donc les données sur l'autre feuille) allait magiquement rajouter des données si dans la feuille commande quelque chose changeait. mais en fait faut effacer et relancer la commande du filtre ( par un bouton macro sinon l'utilisateur ne saura le faire seul).

    Ensuite je bosse sur excel * murmure 2000 et oui dans la boite ils ont pas encore beaucoup évolué..


    j'ai commencé à lire le topo sur les filtres avancés il faut que je comprenne l'exportation partielle.
    Les deux solutions ont l'air viables.Concernant la rapidité d exécution de la boucle il faut savoir que mon tableau contient 75 lignes maxi en gros.

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

Discussions similaires

  1. [XL-2013] Copier cellules vers une autre feuille - VBA
    Par antgrandj dans le forum Macros et VBA Excel
    Réponses: 23
    Dernier message: 15/04/2020, 11h51
  2. [XL-2010] Copier plage de cellules vers une autre feuille selon un critère dans une boucle
    Par klash384 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/01/2015, 17h53
  3. [XL-2013] Copier lignes vers une autre feuille si une cellule = à
    Par antgrandj dans le forum Excel
    Réponses: 10
    Dernier message: 19/06/2014, 18h37
  4. [XL-2010] copier des cellules vers une autre feuille
    Par fredplusvar dans le forum Excel
    Réponses: 1
    Dernier message: 22/03/2014, 12h34
  5. [XL-2007] recopie de cellules vers une autre feuille.
    Par dom66 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 02/02/2011, 22h15

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