Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 copier les lignes en fonction d'un mot dans les cellules

321concept

XLDnaute Nouveau
Bonjour,

Je ne suis pas ce qu'on appelle un féru de EXCEL. Je n'y connait pas grand chose.

Mon problème:

J'ai un tableau Excel de plus de 2000 lignes, avec une 30aine de cellules pour chaque ligne.
Ce sont, entre autre, des références et des marques de produits qui sont notées assez anarchiquement dans des cellules différentes sur la ligne que je cherche à copier.

Bref, j'aimerai copier les lignes qui contiennent un mot donné de ces cellules, et les coller dans une autre feuille pour effectuer un tri plus "manuel"

exemple, je dois trier pour copie les ligne contenant "monique Ranou", "Fleury michon", etc... Elle ne sont pas forcément dans la colonne MARQUE, elles peuvent être dans Référence, Fournisseur, charcuterie, etc...
Si c'est possible, copier toutes les lignes d'un seul coup et les copier dans une autre feuille

Ca ne dois pas être vraiment compliqué, mais mon Excel est du niveau "Gaz de Schiste"
 
Solution
déjà c'est bien, tu cherches à comprendre.. pas sur que ce soit une majorité des gens qui viennent ici

du coup, je remets encore une fois le fichier, car je viens de voir qu'il y avait un bug que j'ai corrigé
et un autre problème avec le bouton qui perd le lien avec la macro.. sans doute du fait qu'elle s'appelait "extraire".. sans doute un mot reconnu par VBA comme un nom réservé??

TooFatBoy

XLDnaute Barbatruc
Du coup je dirais comme @vgendron (coucou ) :
ne serait il pas plus judicieux de traiter le problème à la source.. cad au moment de la création de l'onglet "Stock" ??
Pourquoi ne pas ajouter la colonne directement dans la feuille "Stock" et faire les modif dans cette même feuille ?
Est-ce afin que la feuille "Stock" serve de sauvegarde si jamais tu as fait trop de modif pour une marque et que tu ne sais plus où tu en es ?


OK, mais si tu comptes "concaténer" toutes tes pages de marques, il faut penser qu'elles doivent toutes avoir le même nombre de colonnes.




[edit]
Oups... Je n'avais pas vu que la question était notée comme étant résolue.
[/edit]
 

321concept

XLDnaute Nouveau
Tu verras, VBA est infiniment plus simple que HTML et ses petits copains.

Perso, actuellement je cherche plus un hébergeur gratuit d'une page web hyper basique qu'obtenir un site top moumoute, mais j'ai vu que tu fais des sites vraiment cools !

Merci de votre aide.
Pour le nombre de colonnes et la concaténation, pas de soucis. Les colonnes des fichiers sont basées sur le même modèle et s'arrêtent à la colonne "AU". Il y a beaucoup de "stats" la dedans.
Comme ces fameux fichiers sont remplis de fautes de frappes, de premiers mots dans les cellules qui commencent par des espaces, l'oeil humain est pour le coup meilleur que la technique.
Bref, mettre ces fichiers au carré visuellement et informatiquement.
Pour la modif dans le fichier stock, ça me semble une "excel" ente idée. Je regarde demain. Et pourquoi pas trouver un pdf ou autre sur le VBA pour commencer mes modifs.
 

TooFatBoy

XLDnaute Barbatruc
Pour le nombre de colonnes et la concaténation, pas de soucis. Les colonnes des fichiers sont basées sur le même modèle et s'arrêtent à la colonne "AU". Il y a beaucoup de "stats" la dedans.
Oui, mais tu disais vouloir ajouter manuellement une colonne pour la marque, et éventuellement une autre colonne pour la quantité.
C'est le "éventuellement" qui me fait un peu tiquer : si tu ajoutes une colonne pour la quantité (ou le volume) pour une marque, il faudra obligatoirement l'ajouter aussi, et au même endroit, pour toutes les autres marques.
Sinon, au moment de la concaténation, il y aura un problème au niveau des données des colonnes qui seront décalées les unes par rapport aux autres.


Pour nettoyer les espaces en trop, il y a les instructions VBA : TRIM, LTRIM et RTRIM.


Pour la modif dans le fichier stock, ça me semble une "excel" ente idée. Je regarde demain. Et pourquoi pas trouver un pdf ou autre sur le VBA pour commencer mes modifs.
Ah zut... je venais juste de pondre un truc qui fonctionnait, je crois, comme tu l'avais demandé au départ :
- recherche du mot dans plusieurs colonnes (j'ai colorié leurs en-têtes en rouges) du tableau de stock,
- création d'une nouvelle feuille si mot trouvé,
- copie, vers la nouvelle feuille, des lignes trouvées dans le tableau de stock,
- insertion d'une colonne pour la marque dans le tableau de la nouvelle feuille,
- inscription de la marque dans toute cette colonne.
 
Dernière édition:

321concept

XLDnaute Nouveau
Eventuellement veux dire simplement "si nécessaire" pour tout mes fichiers. Il y a déjà une cellule "présentation" qui donne la quantité de produit dans une boite. Par exemple, 60 comprimés de Sauge...
Je me pose la question de mettre par exemple pour le dentifrice: quantité 1 ou 50 ml. Dans le premier cas, je ne change rien, la quantité de produit dans le tube reste dans la référence, dans le second cas, cela deviendrait un produit variable . Il faudrait a ce moment là une cellule supplémentaire. Ca n'est pas très grave, il suffira d'ajouter une colonne sur chaque fichiers. Les cellules irons jusqu'à AV.

Bon, sinon j'ai réussi à inscrire une suite de caractères dans une cellule en VBA, il faut bien commencer par quelque chose.
Ca n'a pas l'air très compliqué, ça ressemble au Basic

Mais pour l'instant... End Sub dodo
 

job75

XLDnaute Barbatruc
Bonjour à tous,

Je ne comprends pas trop ce qu'on fait sur ce fil.

Il a été dit que le mot recherché pouvait se trouver dans n'importe quelle colonne.

Mais @321concept semble se contenter d'une recherche dans une seule colonne (la 2ème).

Si l'on veut donc rechercher dans toutes les colonnes on peut utiliser le filtre avancé :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [B1]) Is Nothing Then Exit Sub
If [B1] = "" Then If FilterMode Then ShowAllData: Exit Sub 'si la feuille est filytée
With [A1].CurrentRegion.Offset(1)
    .Cells(2, .Columns.Count + 2) = "=COUNTIF(" & .Rows(2).Address(0, 0) & ",""*""&B$1&""*"")" 'critère avec NB.SI
    .AdvancedFilter xlFilterInPlace, .Cells(1, .Columns.Count + 2).Resize(2) 'filtre avancé
    .Cells(2, .Columns.Count + 2) = ""
End With
End Sub
Je ne vois pas l'intérêt de copier la zone filtrée dans une autre feuille.

A+
 

Pièces jointes

  • stock expport(1).xlsm
    150.6 KB · Affichages: 6

321concept

XLDnaute Nouveau
Bonjour,
Merci de vous intéresser à mon sujet.
Pour la copie dans une autre feuille, c'est qu'au niveau marques, les fichiers vont évoluer. Il est plus simple pour moi de travailler sur des parties de fichiers que je vais pouvoir imprimer sur papier pour la gestion des stocks physique.
Je comprends bien qu'avec la recherche en VBA créer par @Marcel32, @vgendron ainsi que la votre, ça irait plus vite à trier, mais je ne suis pas tout seul a décider.
En tout cas, le VBA m'intéresse énormément et je me penche dessus très sérieusement.
Merci pour votre aide précieuse.

Jérôme
 

TooFatBoy

XLDnaute Barbatruc
Il a été dit que le mot recherché pouvait se trouver dans n'importe quelle colonne.
Moi je n'ai pas tout à fait compris que ça pouvait être dans "n'importe quelle colonne".
Mais c'est sûr que qui peut le plus peut le moins, donc une recherche dans toutes les colonnes donnera le même résultat qu'une recherche uniquement dans les colonnes susceptibles de contenir le mot recherché.


Je ne vois pas l'intérêt de copier la zone filtrée dans une autre feuille.
Si on ne devait répondre qu'aux questions auxquelles on voit un intérêt, on ne répondrait pas souvent...



ps : t'as vu mon oeuf @321concept ???
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Oui, pas forcément dans la même colonne (mais ça on le savait déjà puisqu'il avait donné quelques noms, mais il disait aussi pas dans n'importe quelle colonne puisqu'il y a des colonnes avec des prix par exemple) et n'importe où dans la cellule.
 

job75

XLDnaute Barbatruc
Si l'on veut aussi pouvoir rechercher des nombres (ou des portions de nombres) il faut utiliser les fonctions CHERCHE et SOMMEPROD dans la formule du critère, fichier (2) :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [B1]) Is Nothing Then Exit Sub
If [B1] = "" Then If FilterMode Then ShowAllData: Exit Sub 'si la feuille est filytée
With [A1].CurrentRegion.Offset(1)
    .Cells(2, .Columns.Count + 2) = "=SUMPRODUCT(-ISNUMBER(SEARCH(B$1," & .Rows(2).Address(0, 0) & ")))" 'critère avec CHERCHE
    .AdvancedFilter xlFilterInPlace, .Cells(1, .Columns.Count + 2).Resize(2) 'filtre avancé
    .Cells(2, .Columns.Count + 2) = ""
End With
End Sub
 

Pièces jointes

  • stock expport(2).xlsm
    150.7 KB · Affichages: 7

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…