Se connecter avec
S'enregistrer | Connectez-vous

macro copier ligne dans autre onglet si condition respectée

Dernière réponse : dans Programmation

Bonjour,

Je cherche à copier des lignes respectant une condition
Voici l'entête du tableau que j'ai :
Date / Nom / Compte / Valeur

Je souhaite copier les lignes affichant le numéro de compte
62 dans l'onglet 62 et ainsi de suite
63 dans l'onglet 63 , etc.

J'ai de nombreux tableaux à retraiter et cherche un / des conseil(s) (descriptif de la procédure) pour créer cette macro sous VBA.



D'avance merci pour ce gros coup de pouce

Un novice
Lassé par la pub ? Créez un compte

Pour faire cela, il faut quelques notions de base en prog....
Idem pour expliquer ce dont tu as besoins.

Par exemple, si tu veux copier le N° de compte 62 dans l'Onglet 62, alors il ne s'agit pas d'une copie subordonnée à une condition. On utilise pour cela une variable:


NbLignes = nombre de lignes de ton tableau

  1. dim i as integer
  2.  
  3. for i=1 to NbLignes
  4.  
  5. ActiveWorkBook.Sheets(i).Cells(1,1).Text = ActiveWorkBook.Sheets("Feuille_du_Tableau").Cells(i,3).Text
  6.  
  7. next



bon, c'est très simplifié, mais cela copie le numéro de compte X dans la première cellule de la feuille X, à partir de ton tableau de départ qui est sur la feuille "Feuille_du_Tableau".

Ca t'aide ?

Bonjour,

Je me mets au VBA pour mon boulot et je bloque sur un truc assez stupide, afin d'automatiser un fichier j'aimerai recopier quelque cellules d'une ligne dans une autre feuille si une condition est respectée.

Je m'explique :

La cellule J d'une ligne peut contenir différents mots pour simplifier X, Y et Z
Si le mot contenu dans "J" est Y alors je voudrais que les cellules A à D soit recopier dans la feuillle 2
Et ainsi de suite pour toutes les lignes

J'ai beau prendre le problème dans tous les sens ou essayer d'abord d'enregistrer puis d'automatiser, pas moyen !!!

Merci d'avance si qq connais une solution !!!

Pour la feuille de données "feuille1"
Si la cellule J3 est égale à "Committed"
Alors copier celulle A3:H3 vers la feuille 2 (commencé copiage en A3)
Et ainsi de suite

Je suis débutant mais j'ai vraiment envie de m'y mettre, alors j'ai essayé de le faire en VBA mais il y a un truc qui fonctionne pas vu que copie pas !!!!

Merci, bonne journée
Expert Programmation

Tu es aussi débutant en français ? On dit copie, pas copiage ! :D 
Bon j'arrête de me payer ta poire.

Tu veux vraiment t'y mettre, le mieux c'est de faire et comprendre ce que tu fais, quitte à ce qu'on te l'explique.

Alors fais ce qui suit :
  • Démarre l'enregistreur de macro.
  • Sélectionne la feuille Feuil1 (Au pire, sélectionne une autre feuille avant pour voir ce qu'écrit l'enregistreur pour sélectionner ta feuille 1)
  • Sélectionne la plage A3:H3 de cette feuille.
  • Copie.
  • Sélectionne la feuille Feuil2.
  • Sélectionne la cellule A3.
  • Colle.
  • Arrête l'enregisteur de macro.

    Et publie le code obtenu ici. Tu auras bientôt une belle macro, faite par toi qui répondra à tes besoins :) 

    Ok pour Copiage, Niveau français c'était très très moyen !!!

    Bon lorsque j'enregistre à la main la macro après un tri de ma collone J voila ce que j'obtient :

    1. Sub CopyCommittedCells()
    2.  
    3.  
    4. Sheets("Orders Funnel").Select
    5. Range("A3:H18").Select
    6. Application.CutCopyMode = False
    7. Selection.Copy
    8. Sheets("Committed Funnels").Select
    9. Range("A2").Select
    10. ActiveSheet.Paste
    11. Range("I8").Select
    12. ActiveWindow.ScrollColumn = 4
    13. ActiveWindow.ScrollColumn = 5
    14. ActiveWindow.ScrollColumn = 4
    15. ActiveWindow.ScrollColumn = 1
    16. Range("F2").Select
    17. End Sub


    Le seul problème c'est que je voudrais le faire automatiquement le tri et le "COPIAGE !"
    En insérant les cellules dans des nouvelles ligne si possible mais là j'abuse peut etre !
    Expert Programmation

    Ah, tu copies la zone A3:H18 dans la cellule A2 :/  C'est nouveau.
    Considérons que tu veux toujours coller A3:H3 dans A3 d'une autre feuille.

    Je réécris ta procédure :
    1. Sub CopyCommittedCells()
    2. Sheets("Orders Funnel" ).Range("A3:H3" ).Copy
    3. Sheets("Committed Funnels" ).Range("A2" ).Paste
    4. End Sub

    C'est plus simple.

    Ajoutons le test :
    1. Sub CopyCommittedCells()
    2. If Sheets("Orders Funnel").Range("J3").Text = "Committed" Then
    3. Sheets("Orders Funnel").Range("A3:H3").Copy
    4. Sheets("Committed Funnels").Range("A3").Paste
    5. End If
    6. End Sub

    Est-ce toujours clair ?

    Bon maintenant, on le fait pour une ligne, n'importe laquelle :
    1. Sub CopyCommittedCells()
    2. Dim r As Integer
    3. Dim sOF As Worksheet
    4. Dim sCF As Worksheet
    5.  
    6. Set sOF = Worksheets("Orders Funnel")
    7. Set sCF = Worksheets("Committed Funnel")
    8.  
    9. r = <N'importe laquelle>
    10.  
    11. If sOF.Cells(r, 10).Text = "Committed" Then
    12. sOF.Range(Cells(r, 1), Cells(r, 7)).Copy
    13. sCF.Cells(r, 1).Paste
    14. End If
    15. End Sub


    J'utilise des variables pour les feuilles, c'est plus concis, mais pas obligatoire.
    Dans ce dernier code, il y a un problème : la ligne de départ et la ligne d'arrivée sont la même dans des feuilles différentes.

    Bon, maintenant pour toutes les lignes de 3 à 10000 :
    1. Sub CopyCommittedCells()
    2. Dim rOF As Integer
    3. Dim rCF As Integer
    4. Dim sOF As Worksheet
    5. Dim sCF As Worksheet
    6.  
    7. Set sOF = Worksheets("Orders Funnel")
    8. Set sCF = Worksheets("Committed Funnel")
    9.  
    10. rCF = <première ligne libre de Committed Funnel>
    11.  
    12. For rOF = 3 To 10000
    13. If sOF.Cells(rOF, 10).Text = "Committed" Then
    14. sOF.Range(Cells(rOF, 1), Cells(rOF, 7)).Copy
    15. sCF.Cells(rCF, 1).Paste
    16. End If
    17. Next
    18. End Sub

    Alors ?

    Ben il te reste à initialiser rCF, et à mettre autre chose que For 3 To 10000 pour coller à ton problème. Une boucle While est sans doute plus adéquate.

    Merci pour ton message,

    Alors ca fonctionne bien car ça selection bien une ligne avec Committed mais après ça stop pour une erreur
    '1004' pour un Range qui foire ligne 15...

    j'ai pas encore changer For 3 to 1000 pour l'instant et j'ai :

    1. Sub CopyCommittedCells()
    2. Dim rOF As Integer
    3. Dim rCF As Integer
    4. Dim sOF As Worksheet
    5. Dim sCF As Worksheet
    6.  
    7. Set sOF = Worksheets("Orders Funnel")
    8. Set sCF = Worksheets("Committed Funnels")
    9.  
    10. rCF = 2
    11.  
    12. For rOF = 3 To 10000
    13. If sOF.Cells(rOF, 10).Text = "Committed" Then
    14. sOF.Range(Cells(rOF, 1), Cells(rOF, 7)).Copy
    15. sCF.Range(Cells(rCF, 1)).Paste
    16. End If
    17. Next
    18. End Sub


    Alala c'est vraiment bizare hier je prend un exemplaire de formulaire pour inserer des valeurs dans une nouvelle ligne et tout à fonctionné sans pb, maintenant c Opérationel mais ça je sais pas pourquoi ca veut pas !!

    He oui désolé si je me plante dans les copier/coller maintenant que vais-je faire ?? du tricot peut-être.

    Anyway, lorsque je remplace avec : sCF.Cells(rCF, 1).Paste
    alors j'obtient une erreur 438 : 'object doesn't support this property'

    Je pense que de vais finir par jeter mon PC par la fenêtre !!

    Pour info :

    1. Sub CopyCommittedCells()
    2. Dim rOF As Integer
    3. Dim rCF As Integer
    4. Dim sOF As Worksheet
    5. Dim sCF As Worksheet
    6.  
    7. Set sOF = Worksheets("Orders Funnel")
    8. Set sCF = Worksheets("Committed Funnels")
    9.  
    10. rCF = 2
    11.  
    12. For rOF = 3 To 10000
    13. If sOF.Cells(rOF, 10).Text = "Committed" Then
    14. sOF.Range(Cells(rOF, 1), Cells(rOF, 7)).Copy
    15. sCF.Cells(rCF, 1).Paste
    16. End If
    17. Next
    18. End Sub
    Expert Programmation

    Bon ok, maintenant tu m'as foutu la honte : 1°, j'ai réussi à publier du code qui ne marche pas, 2°, j'ai failli te dégouter du VBA. :sarcastic: 

    Et comme ça :
    1. Sub CopyCommittedCells()
    2. Dim rOF As Integer
    3. Dim rCF As Integer
    4. Dim sOF As Worksheet
    5. Dim sCF As Worksheet
    6.  
    7. Set sOF = Worksheets("Orders Funnel")
    8. Set sCF = Worksheets("Committed Funnels")
    9.  
    10. rCF = 2
    11.  
    12. For rOF = 3 To 10000
    13. If sOF.Cells(rOF, 10).Text = "Committed" Then
    14. sOF.Range(sOF.Cells(rOF, 1), sOF.Cells(rOF, 7)).Copy sCF.Cells(rCF, rCF)
    15. rCF = rCF + 1
    16. End If
    17. Next
    18. Application.CutCopyMode = False
    19. End Sub


    (Testé et approuvé, cette fois :whistle:  )

    Remarque la ligne 15 qui incrémente rCF au fur et à mesure qu'on trouve des lignes "Committed" ;) 

    Bon alors,

    1° tu ne t'es pas ridiculisé du tout je suis le premier à ne pas avoir réussi à le faire fonctionner !!

    2° Me dégouter du VBA c'est pas loin mais ça n'est pas de ta faute plutôt de la mienne qui m'entete sur un truc comme ça !

    3° Le code fonctionne et copie les bonne données

    4° Mais (car il y a un mais dsl...) les cellules sont pas copiées au bon endroit, elles se décalent d'une cellule a chq fois, la premier se copie en B2 puis la deuxieme ligne en C3 puis D4 etc.

    En tout cas un grand merci à toi Zeb !!!

    Bonjour,
    quand j'execute la commande dès qu'il y a écrit committed dans la cellule du fichier Orders Funnel, cela remplace ce qui avait été copié auparavant dans le fichier Committed Funnel. Moi je voudrais que la nouvelle ligne a copier se colle à la suite de l'ancienne(dans la 1ère ligne vide). Est-ce possible ?
    Merci
    Lassé par la pub ? Créez un compte