XL 2010 comment extraire des mots

STEPH63000

XLDnaute Nouveau
bonjour je cherche une solution pour extraire est compter des groupes de mots en feuille 1 colonne b.
je m'explique: je voudrais savoir combien j'ai de fois 1 baguette ou 2 baguettes ou 3 baguettes ou 1 baguette ancienne ou 2 baguettes ancienne etc........
réponse du calcul en onglet baguette.
merci d'avance je vous joint mon fichier
 

Pièces jointes

  • essai commande.xlsx
    12.6 KB · Affichages: 48

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir Steph
Je ne sais pas si tu souhaites une solution VBA , ou par formules, pour les formules je laisse la place à nos spécialites.
En VBA je pense que quelque chose est possible, mais celà demanderait une petite réorganisation de ta liste de commandes car je suppose que l'exemple des baguettes n'est pas exhaustif (tu auras d'autres articles à compter, n'est-ce pas ?)

PS J'ai l'impression que ta demande concerne des commandes à livrer pendant ce confinement et je suppose que tu fais celà bénévolement, donc si je peux t'aider ce sera volontier.

Bien à toi, à vous
@+Thierry
 

patricktoulon

XLDnaute Barbatruc
Bonjour
il faudrait déjà commencer par corriger les fautes d’orthographe
2 baguettes ancienne
2 baguette ancienne
mais bon
si on laisse tel quel par exemple

=NB.SI(B2:B50;"*2 baguette* ancienne*")

exemple 2 tu a 7 baguettes anciennes
=(NB.SI(B2:B50;"*2 baguette* ancienne*")*2)+NB.SI(B2:B50;"1 baguette* ancienne*")
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir @STEPH63000 :), @_Thierry :), @patricktoulon ;),

Une version avec une fonction personnalisée écrite en VBA.
La fonction s'appelle : Quantite(Plage , Quoi) où :
  • Plage est la plage de cellules où on recherche le texte
  • Quoi est le texte qu'on recherche
Exemple: =Quantite(Feuil1!$B$2:$B$199;A1). On recherche dans la plage $B$2:$B$199 de la feuille Feuil1 le texte de la cellule A1.

Il est indispensable que les différents produits au sein d'une même ligne de commande soient séparés par le signe +.

nota : Une amélioration serait de remplacer les caractères accentués par les mêmes caractères mais non accentués. Je compte le faire mais je ne retrouve pas la fonction... Si quelqu'un en a une sous le code, ça m'éviterait de la réécrire.

=> voir la version la dernière version v2 incluant la non prise en compte des accents ICI
 

Pièces jointes

  • STEPH63000- commande- v1.xlsm
    23.3 KB · Affichages: 10
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @Staple1600 :)

Si quelqu'un en a une sous le code, ça m'éviterait de la réécrire.
Je me réponds (ça distrait le confinement) ;).

Voici la v2 avec la suppression des accents et des lettres liées.

le code dans module1:
Code:
Function Quantite(Plage As Range, ByVal Quoi As String)
Dim x, i&, s, n&
   Quoi = SansAccent(Quoi)
   For Each x In Plage: n = n + Combien(SansAccent(x), Quoi): Next x
   If n > 0 Then Quantite = n Else Quantite = vbNullString
End Function

Function Combien(ByVal Dans As String, ByVal Quoi As String) As Long
Dim i&, s, n&
   Quoi = LCase(Application.Trim(SansPlurielenS(Quoi)))
   s = EclaterCmde(Dans)
   For i = LBound(s) To UBound(s)
      s(i) = LCase(Application.Trim(SansPlurielenS(s(i))))
      If Not (Left(s(i), 1) >= "1" And Left(s(i), 1) <= "9") Then s(i) = "1 " & s(i)
      If s(i) = Quoi Then n = n + 1
   Next i
   Combien = n
End Function

Function EclaterCmde(ByVal x As String)
   EclaterCmde = Split("0+ " & Application.Trim(LCase(x)), "+")
End Function

Function SansPlurielenS(ByVal x As String)
Dim i&, s
      s = Split(x)
      For i = LBound(s) To UBound(s)
         If LCase(Right(s(i), 1)) = "s" Then s(i) = Left(s(i), Len(s(i)) - 1)
      Next i
   SansPlurielenS = Join(s)
End Function

Function SansAccent(ByVal x)
Const lettresAvec = "Ÿ,À,Á,Â,Ã,Ä,Å,Ç,È,É,Ê,Ë,Ì,Í,Î,Ï,Ñ,Ò,Ó,Ô,Õ,Ö,Ù,Ú,Û,Ü,Ý,à,á,â,ã,ä,å,ç,è,é,ê,ë,ì,í,î,ï,ñ,ò,ó,ô,õ,ö,ù,ú,û,ü,ý,ÿ"
Const lettresSans = "Y,A,A,A,A,A,A,C,E,E,E,E,I,I,I,I,N,O,O,O,O,O,U,U,U,U,Y,a,a,a,a,a,a,c,e,e,e,e,i,i,i,i,n,o,o,o,o,o,u,u,u,u,y,y"
Dim i&, j&
   For i = 1 To Len(x)
      j = InStr(lettresAvec, Mid(x, i, 1))
      If j > 0 Then x = Replace(x, Mid(x, i, 1), Mid(lettresSans, j, 1))
   Next i
   x = Replace(x, UCase("œ"), "OE"): x = Replace(x, "œ", "oe")
   x = Replace(x, UCase("æ"), "AE"): x = Replace(x, "æ", "ae")
   SansAccent = x
End Function
 

Pièces jointes

  • STEPH63000- commande- v2.xlsm
    25.2 KB · Affichages: 18
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
e vois que tu n'as pas compris mon appel du pied

J'étais déjà parti dans l'écriture du code :(.Donc, j'ai continué.

Concernant , le lien que tu as mis à ma disposition. Cela fait deux fois en très peu de temps que tu m'indiques deux productions à moi que j'avais complètement oublié. Il suffit. J'ai l'impression qu'un autre s'est approprié ma mémoire :p. Sans rire je commence à m'inquiéter pour moi o_O.
J'ai téléchargé mon vieux fichier. Il fonctionne encore. Au moins un truc qui ne se déglingue pas avec le temps.

Beau dommage. Ça me rappelle quelque souvenirs surtout la complainte du...

Quand à soulever son coude, ça m'a fait penser à descendre pour en décapsuler une (p'tite blonde) (sans rire une 1664 - sans alcool)
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

•>mapomme
La pelle, le pied, une faveur ;)
Y a pas un mot qui fait tilt dans ces trois mots ;) ?
(Rapport au message caché dans le message#6)
;)
Il est vrai qu'il est des appels du pied qui parfois aboutissent encore au 22 à Asnières...;)

EDITION: du dimanche matin (à l'heure des croissants)
Juste pour mapomme
Merci.
Signé: Tonton qui tousse ;)
 
Dernière édition:

sambouc

XLDnaute Nouveau
Bonjour,
Avez-vous trouvé votre solution ?
Dans le cas contraire, je vous conseille déjà de mettre vos libellés baguettes dans une liste déroulante, ce qui vous permettra d éviter les erreurs de libellés et donc de détection du nombre de baguettes par la suite.
Ensuite, normalement la formule précédemment indiquée (nb.si) devrait totalement fonctionner.
De fait, afin de détecter les anomalies, effectuer cette formule (nb.si ou un simple un si(A1=« 1 baguette (...) »; 1;0) sur chaque cellule, ce qui vous permettra de détecter l erreur déjà. Bien souvent un espace supplémentaire, en debut, milieu ou fin de phrase peut provoquer cela... D où l utilité des listes déroulantes...
Enfin, j’ai une autre solution, mais essayez déjà celle là. Utilisez la formule substitute pour supprimer les espaces !

n’hesitez pas à me faire savoir si vous vous en êtes sorti et n hesitez pas à partager le fichier excel sur le forum.
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil

Une suggestion en passant
(qui impliquerai un petit remaniement)
01baguette.gif

Ce mode saisie permettrait à terme ne pas seulement dénombrer les baguettes mais de compter aussi le nombre de produits par nom
Et si tu rajoutes une colonne Date Commande, tu pourrais aussi sommer par jour/semaine/mois ou année.

Voila c'était la suggestion du matin (avec une bonne odeur de café chaud et de croissants en prime ;))

Bonnes fêtes de pâques à tous.
 

STEPH63000

XLDnaute Nouveau
merci mapomme pour la version v2. mais maintenant j'ai un autre problème dans mon fichier onglet boulangerie ça me comptabilise bien les 1 baguette, ou 2 baguettes etc.........
mais je voudrais pouvoir additionner le nombre total de baguettes par exemple, et ca ne marche pas car dans certaine cellule il apparais #valeur!
ci joint mon fichier
 

Pièces jointes

  • TABLEAU DE COMMANDE.xlsm
    32 KB · Affichages: 3

Discussions similaires

Réponses
2
Affichages
191

Statistiques des forums

Discussions
312 196
Messages
2 086 098
Membres
103 116
dernier inscrit
kutobi87