Recherche et copie de ligne

Owrow

XLDnaute Nouveau
Bonjour à tous, il y a beaucoup de discussion à propos de recherche par VBA mais aucune ne correspond à ce que je recherche, ce n'est pas faute d'avoir chercher, et même d'avoir essayer moi même, mais mes connaissances restes insuffisantes.
Je voudrais dans un tableau de ce type :
Code | Produit | U. factu. | Prix | stock sorti | stock rentré | stock total |
0001 |banane | kg | 0.70 | 10 | 20 | 10 |
0002 |tomate | kg | 1 | 5 | 30 | 25 |


Je voudrais faire une recherche permettant de copier les lignes dans lesquelles se trouvent un nombre différent de 0 dans la colonne "stock sorti" et que ces lignes soient copiées dans une autre feuille

Jusqu'à présent je me contentais d'une macro dans laquelle je faisais un tri décroissant de la colonne stock ce qui me permettais de copier les premières lignes (avec une marge de sécurité de plus ou moins 20 lignes) et d'ensuite supprimer les lignes vides.
Les codes de la première colonne me permettent d'afficher dans un autre tableau le nom des produits et les stocks correspondant grâce à une recherche verticale.


Mon seul test pour le moment est le suivant :



Sub test()
Sheets("Liste produits").Select
For rwIndex = 4 To 942
For i = 1 To 200
If Cells(rwIndex, 8).Value <> 0 Then
Sheets("Liste produits").Cells(i, 4).Select
Selection.Copy (Sheets("BOF").Range("A1"))
End If

Next
Next

End Sub


Quelqu'un a t il une solution?

Par avance merci


PS:dsl je n'arrive pas a rendre mon tableau clair et lisible ...
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Recherche et copie de ligne

bonjour Owrow

Et bienvenue sur XLD

Vois si tu peux t'inspirer de ceci

Code:
Sub report()
ligne = 2
tableau = Sheets("Feuil1").Range("A2:G" & Sheets("Feuil1").Range("A65536").End(xlUp).Row)
For n = LBound(tableau, 1) To UBound(tableau, 1)
  If tableau(n, 5) <> 0 Then
    Sheets("Feuil1").Rows(n + 1).Copy Destination:=Sheets("Feuil2").Rows(ligne)
    ligne = ligne + 1
  End If
Next n
End Sub
 

Pièces jointes

  • Owrow.zip
    10.2 KB · Affichages: 36

Owrow

XLDnaute Nouveau
Re : Recherche et copie de ligne

Petite question, peux tu m'expliquer cette partie de ligne ?

Range("A2:K" & Sheets("Liste produits").Range("A65536").End(xlUp).Row)​


Pourquoi ce "&"? Je voudrais lui dire de n'effectuer la recherche, non pas jusque la ligne 65536, mais dans une plage déjà nommée, or, si je remplace par le nom de ma liste, cela produit une erreur.
Je suis obligé de passer par un nom de liste et non pas par un numéro de ligne puisque le nombre de ligne risque de varier et je ne veux pas avoir a modifier a chaque fois les lignes de macro.
Je continu d'essayer en esperant une réponse.
Merci d'avance
 

pierrejean

XLDnaute Barbatruc
Re : Recherche et copie de ligne

Re

Explication

Sheets("Feuil1").Range("A2:G" & Sheets("Feuil1").Range("A65536").End(xlup).row)

Sheets("Feuil1").Range("A65536").End(xlup).row est le numero de la derniere ligne non vide de la colonne A
supposons qu'il s'agisse de 15
dans ce cas la traduction est:
tableau=Sheets("Feuil1").Range("A2:G15")
Quant à la recherche elle se fait sur la colonne 5 de ce tableau (stock sorti) qu'il n'est pas utile de nommer
 

Owrow

XLDnaute Nouveau
Re : Recherche et copie de ligne

Merci pour ces explications. Cependant, un problème persiste. Mon tableau fait 928 lignes, et je veux créer plusieurs macro, chacune pour un nombre de ligne différent, cependant ce nombre de ligne peut changer puisque des insertions peuvent être faites. Comment faire alors pour ne plus chercher du type "A2:H15" mais du type "liste1" ?
 

Owrow

XLDnaute Nouveau
Re : Recherche et copie de ligne

Merci beaucoup, je n'y arrivait pas puisque je gardait le "End(xlup).row"
Cependant, même si cela fonctionne, des erreurs persistent.
En effet des lignes vides sont copiées tandis que certaines qui devraient l'être ne le sont pas.
Voici à quoi ressemble actuellement ma macro
ligne = 2
tableau = Sheets("Liste Produits").Range("listeBOF")
For n = LBound(tableau, 1) To UBound(tableau, 1)
If tableau(n, 11) <> 0 Then
Sheets("Liste produits").Rows(n + 1).Copy Destination:=Sheets("BOF").Rows(ligne)
ligne = ligne + 1
End If
Next n
End Sub
 

pierrejean

XLDnaute Barbatruc
Re : Recherche et copie de ligne

Re
Le probleme est certainement du au fait que ton tableau ne commence pas en ligne 2 comme je l'avais supposé

Modifie comme ceci

Code:
ligne = 2
tableau = Sheets("Liste Produits").Range("listeBOF")
decal = Sheets("Liste Produits").Range("listeBOF").Row - 1
For n = LBound(tableau, 1) To UBound(tableau, 1)
If tableau(n, 11) <> 0 Then
Sheets("Liste produits").Rows(n + decal).Copy Destination:=Sheets("BOF").Rows(ligne)
ligne = ligne + 1
End If
Next n

Attention ta listeBOF ne doit pas inclure le titre
 

Owrow

XLDnaute Nouveau
Re : Recherche et copie de ligne

je test ça de suite.
Ma liste ne commence pas par le titre, donc celà devrait allé.


Tout fonctionne à merveille, encore merci !!!
Je dirai bien à charge de revanche, mais a mon avis ... ^^
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 331
Messages
2 087 353
Membres
103 528
dernier inscrit
hplus