copier coller suivant un critère

  • Initiateur de la discussion ma
  • Date de début
M

ma

Guest
j'ai besoin d'aide sous vba

Voilà j'ai un classeur 1 qui contient une feuil1. De cette feuil1 j'aimerais que copier les lignes ayant code X dans la colonne A dans un autre classeur (classeur 2) feuil 2 (pour faire plus simple)

Je précise que ce fichier contient énormément de ligne et plus de 30 colonnes

Ce que J'aimerais, c'est que vous me donniez des pistes de formules, car j'aimerais chercher un peu par moi même
(faut bien apprendre...)

Merci
 
D

DSA

Guest
Bonjour,

quelques pistes pour t'aider (enfin, c'est comme cela que je ferais et dc ce n'est peut-être pas l'idéal):
* création d'une sub dédiée
* une variable ou tu renseigne le nom du classeur 2 (ou via une dialogbox, le chemin complet puis tu l'ouvre)
* deux variables objets de type Workbook: une pour chaque classeur
* une variable ou tu mets la valeur que tu dois comparer à ta colonne A
* deux à trois variables integer
* Différentes boucles imbriquer:
1: une while......Wend qui te permettra de screener ta colonne A (Attention à incrementer ta ligne de test avant le wend sinon => Echap pour arrêter la boucle). En français, la formule serait du style: Tant que la cellule de la ligne X et de la colonne 1 n'est pas vide, faire les instructions suivantes.......
2: un if then......End If ou tu mets ton test:
3: si test OK: un For j=1 TO ? .....Next soit une boucle de ta colonne 1 à ta dernière colonne
4: dans le for une instruction de type:
la valeur de la cellule en ligne k colonne j du classeur2 est égal à la cellule de la ligne i colonne j du classeur 1
avec k une variable à incrementer quand tu écrit une ligne ds ton classeurB

J'espère que ce n'est pas trop confus, mais comme tu préfère trouver toi-même les lignes de code c'est un peu plus compliquer à expliquer ... Cependant tu as une très bonne initiative car c'est comme cela qu'on apprend le plus....

A+

DSA
 

2passage

XLDnaute Impliqué
Bonjour,

comme j'ai fait un code de selection multiple hier, ça n'a pas été trop long, là .. donc, voici une chti bout de code à coller sur un bouton et qui balaye la selection en cours pour copier les lignes ayant un X en colonne A et les coller en classeur2, Feuille 2, A1 (attention, ca remplace) :

Code:
Private Sub CommandButton1_Click()
Dim selstr As String
For Each ligne In ActiveWindow.RangeSelection.Rows
If Cells(ligne.Row, 1).Text = 'X' Then
    If selstr <> '' Then
        selstr = selstr & ',' & ligne.Row & ':' & ligne.Row
    Else
        selstr = ligne.Row & ':' & ligne.Row
    End If
End If
Next
Range(selstr).Select
ActiveWindow.RangeSelection.Copy Destination:=Workbooks('Classeur2').Worksheets('Feuil2').Range('A1')
End Sub

Enjoy
 
M

ma

Guest
j'avoue je suis un peu paumé

J'ai un fichier qui s'appelle controle ou je met ma macro j'ai indiqué le mois de controle en B1 de la feuil2
J'ai un autre fichier 'FF' ou est ma base (feuil 'détail')

Ce que je voudrais c'est si la colonne A = X et que le colonne C = au mois donné, alors copier les colonnes & lignes (D:C , E, H:I) de cette feuil détail et les coller dans le fichier controle dans la feuil 1

Je sais pas si je suis super claire

Merci

[file name=FF.zip size=2090]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/FF.zip[/file]
 

Pièces jointes

  • FF.zip
    2 KB · Affichages: 39

2passage

XLDnaute Impliqué
Bonjour

voila, si j'ai bien compris un fichier 'controle.xls' qui devrait fonctionner selon tes souhaits
(il faut que FF.xls soit ouvert)

enjoy [file name=controle.zip size=11354]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/controle.zip[/file]
 

Pièces jointes

  • controle.zip
    1.6 KB · Affichages: 47
  • controle.zip
    1.6 KB · Affichages: 45
  • controle.zip
    1.6 KB · Affichages: 46
M

ma

Guest
j'ai essayé de rapplisué ton code à mon fichier et ça marche pas :angry:

Voici le code :
Private Sub CommandButton1_Click()
Dim selstr As String
Dim TestMois As Date
TestMois = Workbooks('TNT3.xls').Worksheets('Feuil2').Range('B1').Value
Debug.Print TestMois
Workbooks('Détail factures TNT 2005.xls').Activate
Worksheets('détail').Activate
For Each ligne In Workbooks('Détail factures TNT 2005.xls').Worksheets('détail').Range('A1', 'A20000').Rows
Worksheets('détail').Range('A' & ligne.Row).Select
Debug.Print
If ActiveCell.Text = '29905' And ActiveCell.Offset(0, 2).Value = TestMois Then
If selstr <> '' Then
selstr = selstr & ',' & ligne.Row & ':' & ligne.Row
Else
selstr = ligne.Row & ':' & ligne.Row
End If
End If
Next
ActiveSheet.Range(selstr).Select
ActiveWindow.RangeSelection.Copy Destination:=Workbooks('TNT3.xls').Worksheets('Feuil1').Range('A65535').End(xlUp).Offset(1, 0)
Workbooks('TNT3.xls').Activate
Worksheets('feuil2').Activate
End Sub

il me dit erreur d'execution 1004

Donc si tu vois une erreur dans le code...
Le fichier détail factures (...) contient plus de 30 colonnes et plus de 10000 lignes
Et l'indication du mois est bien en colonne C (2 colonnes apres le code 29905

Est ce que cela peut etre du au format date ?
 

2passage

XLDnaute Impliqué
Bonjour,

Je pense que la ligne se plante parce que le code ne trouve pas de ligne correspondant aux critères [et qu'il n'y a pas de gestion d'erreur (bouh ! c'est mal !)]
Je pense que selstr doit etre = '' et que du coup ca plante... si selstr est vide c'est qu'il n'a trouvé aucune ligne ou le code est '29905' et que la date de la colonne C est EGALE à celle de TNT3/Feuil2:B1... Je pense que le problème est que je teste la date exacte (en fait uniquement le 1er du mois) alors que tu dois avoir plussieurs dates différentes.. donc... essaye de remplacer :

TestMois = Workbooks('TNT3.xls').Worksheets('Feuil2').Range('B1').Value

par :
TestMois = month(Workbooks('TNT3.xls').Worksheets('Feuil2').Range('B1').Value) & year(Workbooks('TNT3.xls').Worksheets('Feuil2').Range('B1').Value)

Et
If ActiveCell.Text = '29905' And ActiveCell.Offset(0, 2).Value = TestMois Then

par :
If ActiveCell.Text = '29905' And month(ActiveCell.Offset(0, 2).Value )& year(ActiveCell.Offset(0, 2).Value )= TestMois Then

Normallement ca testera réellement sur le mois et plus seulement sur le jour

A+
 
M

ma

Guest
salut

Ben ça veut pas...

Dans le fichier détail la date pour chaque mois est identique càd janvier/05 c'est 01/01/05...

ci joint le fichier TNT3 [file name=TNT3.zip size=10494]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/TNT3.zip[/file]
 

Pièces jointes

  • TNT3.zip
    10.2 KB · Affichages: 34

2passage

XLDnaute Impliqué
Bonjour,

Revoila le fichier.. (ca ne risquait pas de marcher : tu avait fait un seul remplacement, plus une tite faute de frappe, et une erreur pour moi en plus...) Normallement c'est bon

A+

Edit : au fait, j'ai amélioré un peu la détermination de la zone a parcourir et la gestion du cas ou il n'y a pas de ligne ok)
[file name=TNT3_20050624114427.zip size=11395]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/TNT3_20050624114427.zip[/file]

Message édité par: 2passage, à: 24/06/2005 11:45
 

Pièces jointes

  • TNT3_20050624114427.zip
    11.1 KB · Affichages: 40

Discussions similaires

Réponses
56
Affichages
1 K

Statistiques des forums

Discussions
312 492
Messages
2 088 899
Membres
103 982
dernier inscrit
krakencolas