Macro copiage d'informations avec condition
Fermé
wallhqck
Messages postés
37
Date d'inscription
vendredi 3 mai 2013
Statut
Membre
Dernière intervention
11 février 2017
-
23 juil. 2014 à 23:31
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 25 juil. 2014 à 14:14
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 25 juil. 2014 à 14:14
A voir également:
- Macro copiage d'informations avec condition
- Entrer les informations d'identification reseau - Guide
- Excel cellule couleur si condition texte - Guide
- Macro word - Guide
- Macro logiciel - Télécharger - Organisation
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
4 réponses
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 303
24 juil. 2014 à 06:33
24 juil. 2014 à 06:33
Bonjour
apparemment on restitue dans la colonne A ?
proposition: on ne boucle que sur le nombre de "PB" dans la colonne L au lieu de parcourir la colonne ligne par ligne
il est inutile d'écrire Application.ScreenUpdating = False à la fin de la macro puisque tu rends la main au système
apparemment on restitue dans la colonne A ?
proposition: on ne boucle que sur le nombre de "PB" dans la colonne L au lieu de parcourir la colonne ligne par ligne
il est inutile d'écrire Application.ScreenUpdating = False à la fin de la macro puisque tu rends la main au système
Option Explicit
'-------
Sub copier_si_pb()
Dim Ligvid As Integer, Nbre As Integer, Lig As Integer, Cptr As Integer
Application.ScreenUpdating = False
Ligvid = Sheets(2).Columns("A").Find("", Range("A1")).Row
With Sheets(1)
Nbre = Application.CountIf(.Columns("L"), "PB")
Lig = 5
For Cptr = 1 To Nbre
Lig = .Columns("L").Find("PB", .Cells(Lig, "L"), xlValues).Row
Sheets(2).Cells(Ligvid, "A") = .Cells(Lig, "B")
Ligvid = Ligvid + 1
Next
End With
Sheets(2).Activate
End Sub
awesome33
Messages postés
32
Date d'inscription
samedi 7 décembre 2013
Statut
Membre
Dernière intervention
26 juillet 2014
68
24 juil. 2014 à 00:05
24 juil. 2014 à 00:05
Salut ,
J'ai pas compris ton code .
Essaye de l'améliorer avec ce que je vais te donner .
Pour parcourir une de L6 a L510:
Pour ton autre problème Comment ? tu dis "ni a cibler la zone de collage "? sa copie avant ou après ?
J'ai pas compris ton code .
Essaye de l'améliorer avec ce que je vais te donner .
Pour parcourir une de L6 a L510:
Sub For_Each_Next_Plage()
Dim FL1 As Worksheet, Cell As Range, Plage As Range
Dim Var1
Set FL1 = Worksheets("Feuil1")
With FL1
'Détermination de la plage de cellules à lire
'Peut s'écrire en utilisant l'objet range de la plage
'For Each Cell In .Range("L6:L510")
'ou en utilisant l'objet Plage (range) de la plage
Set Plage = .Range("L6:L510")
For Each Cell In Plage
'Valeur de la cellule lue
Var1 = Cell.Value
if Var1= PB then
'Instruction pour copier
end if
Next
End With
Set FL1 = NoThing
Set Plage = NoThing
End Sub
Pour ton autre problème Comment ? tu dis "ni a cibler la zone de collage "? sa copie avant ou après ?
wallhqck
Messages postés
37
Date d'inscription
vendredi 3 mai 2013
Statut
Membre
Dernière intervention
11 février 2017
25 juil. 2014 à 11:21
25 juil. 2014 à 11:21
Merci pour vos réponses,
J'ai principalement utilisé ton code Michel_m et j'ai quelques questions :
Peux-tu m'expliquer clairement ce que fait la macro pour ma culture personnel car je n'y comprends pas grand chose. Voici ou j'en suis arrivé (la macro marche mais pas comme je veux)
Dim Ligvid As Integer, Nbre As Integer, Lig As Integer, Cptr As Integer
'?
Application.ScreenUpdating = False
'?
Ligvid = Feuil2.Columns("B").Find(Range("B65536").End(xlUp).Offset(1, 0)).Row
' Commencer en dessous de la dernière ligne non vide de la colone B
(C'est ici que ce situe mon problème, la macro commence le collage des valeurs à la ligne 1 de la colonne B car les lignes 1 à 3 sont vides. Ce que je veux c'est que les valeurs qui sont copiés viennent se coller à la suite des valeurs de la colonne B, donc en partant de la dernière cellule de la colonne B et en remontant jusqu'à temps qu'il trouve une cellule non vide
With Feuil5
' Avec la Feuil5
Nbre = Application.CountIf(.Columns("O"), "PB")
' Détermine le nombre de "PB" dans la colone "O"
Lig = 1068
' A partir de la ligne 1068
' Est-ce possible de définir un range (Jusqu'a la ligne 1578 pour alléger la macro et augmenter la rapidité) car le fichier est énorme ????
For Cptr = 1 To Nbre
' ?
Lig = .Columns("O").Find("PB", .Cells(Lig, "O"), xlValues).Row
' Dans la colone O, il cherche la valeur "PB" sur la ligne ??
Feuil2.Cells(Ligvid, "B") = .Cells(Lig, "B")
' Il copie la valeur de la ligne B et la cole dans la Feuille 2 dans la colone B ??
Ligvid = Ligvid + 1
'Il passe à la ligne en dessous et recommence la recherche ??
Next
End With
Feuil2.Activate
' Feuille 2 activée ?
Range("B65536").End(xlUp).Offset(1, 0).Select
'Selectionne la ligne en dessous de la dernière ligne remplie de la colone B
End Sub
Voila si tu pouvais m'éclairer encore une fois :)
Merci d'avance
J'ai principalement utilisé ton code Michel_m et j'ai quelques questions :
Peux-tu m'expliquer clairement ce que fait la macro pour ma culture personnel car je n'y comprends pas grand chose. Voici ou j'en suis arrivé (la macro marche mais pas comme je veux)
Dim Ligvid As Integer, Nbre As Integer, Lig As Integer, Cptr As Integer
'?
Application.ScreenUpdating = False
'?
Ligvid = Feuil2.Columns("B").Find(Range("B65536").End(xlUp).Offset(1, 0)).Row
' Commencer en dessous de la dernière ligne non vide de la colone B
(C'est ici que ce situe mon problème, la macro commence le collage des valeurs à la ligne 1 de la colonne B car les lignes 1 à 3 sont vides. Ce que je veux c'est que les valeurs qui sont copiés viennent se coller à la suite des valeurs de la colonne B, donc en partant de la dernière cellule de la colonne B et en remontant jusqu'à temps qu'il trouve une cellule non vide
With Feuil5
' Avec la Feuil5
Nbre = Application.CountIf(.Columns("O"), "PB")
' Détermine le nombre de "PB" dans la colone "O"
Lig = 1068
' A partir de la ligne 1068
' Est-ce possible de définir un range (Jusqu'a la ligne 1578 pour alléger la macro et augmenter la rapidité) car le fichier est énorme ????
For Cptr = 1 To Nbre
' ?
Lig = .Columns("O").Find("PB", .Cells(Lig, "O"), xlValues).Row
' Dans la colone O, il cherche la valeur "PB" sur la ligne ??
Feuil2.Cells(Ligvid, "B") = .Cells(Lig, "B")
' Il copie la valeur de la ligne B et la cole dans la Feuille 2 dans la colone B ??
Ligvid = Ligvid + 1
'Il passe à la ligne en dessous et recommence la recherche ??
Next
End With
Feuil2.Activate
' Feuille 2 activée ?
Range("B65536").End(xlUp).Offset(1, 0).Select
'Selectionne la ligne en dessous de la dernière ligne remplie de la colone B
End Sub
Voila si tu pouvais m'éclairer encore une fois :)
Merci d'avance
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 303
25 juil. 2014 à 14:14
25 juil. 2014 à 14:14
Bonjour
car le fichier est énorme ????
très subjectif: nombre de lignes si oui de quel ordre: 1000, 10000, 50000 ,100000... ?
pourquoi ne l'as tu pas écrit au départ?
au besoin
mettre un extrait( env 1000 lignes)du classeur et non un exemple bricolé à la va vite, sans données confidentielles en pièce jointe sur
https://www.cjoint.com/
puis copier l'adresse du lien et la coller dans le message de réponse
car le fichier est énorme ????
très subjectif: nombre de lignes si oui de quel ordre: 1000, 10000, 50000 ,100000... ?
pourquoi ne l'as tu pas écrit au départ?
au besoin
mettre un extrait( env 1000 lignes)du classeur et non un exemple bricolé à la va vite, sans données confidentielles en pièce jointe sur
https://www.cjoint.com/
puis copier l'adresse du lien et la coller dans le message de réponse