Microsoft 365 chercher un mot dans une cellule et en coller une partie dans une case

Catsnroses

XLDnaute Nouveau
Bonjour,
J'ai un tableau excel dans lequel j'ai une case avec pleins d'articles séparés par un | .
La case ressemble à ça : 1.0 BLABLA | 2.0 ZIGZIG | 1.0 BLABLA1
Dans les colonnes adjacentes en en-tete de colonne, j'ai mis mes articles. Colonne 1 : BLABLA, colonne 2 ZIGZIG, colonne 3 BLABLA1...
Je souhaiterais que les quantités de mes articles (c'est le chiffre avant le nom) se ventilent tout seuls dans les bonnes cases sans le .0
Mon tableau fait plusieurs lignes et les articles ne sont jamais dans le même sens et peuvent être différents (mais j'ai une liste prédéterminés).
Je cherche un code qui aille regarder dans la cellule si elle contient un mot de la colonne et si oui, mette le nombre correspondant
Comment dois-je m'y prendre pour faire tout cela en vba ?
je joint un exemple

merci par avance.
 

Pièces jointes

  • exemple repartition articles.xlsm
    9.8 KB · Affichages: 5

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @Catsnroses :),

Via une fonction personnalisée. Copier la formule en B5 vers la droite et vers le bas.
=QtePourDans(Pour, Dans)
  • Pour est la référence à rechercher
  • Dans est le texte dans lequel chercher
Le code dans module1:
VB:
Function QtePourDans(ByVal Pour, ByVal Dans)
Dim x, y
   QtePourDans = ""
   If Trim(Dans) = "" Then Exit Function
   For Each x In Split(Dans, "|")
      y = Split(Application.Trim(x) & " ")
      If LCase(y(1)) = LCase(Pour) Then If Left(y(0), 1) Like "#" Then QtePourDans = Val(y(0)): Exit Function
   Next x
End Function
 

Pièces jointes

  • Catsnroses- compter articles- v1.xlsm
    17.6 KB · Affichages: 3
Dernière édition:

Catsnroses

XLDnaute Nouveau
Bonjour @Catsnroses :),

Via une fonction personnalisée. Copier la formule en B5 vers la droite et vers le bas.
=QtePourDans(Pour, Dans)
  • Pour est la référence à rechercher
  • Dans est le texte dans lequel chercher
Le code dans module1:
VB:
Function QtePourDans(ByVal Pour, ByVal Dans)
Dim x, y
   QtePourDans = ""
   If Trim(Dans) = "" Then Exit Function
   For Each x In Split(Dans, "|")
      y = Split(Application.Trim(x) & " ")
      If LCase(y(1)) = LCase(Pour) Then If Left(y(0), 1) Like "#" Then QtePourDans = Val(y(0)): Exit Function
   Next x
End Function
Bonjour Mapomme, ça fonctionne nickel merci. Par contre j'ai oublié de préciser que des fois, j'ai un - avant la quantité de l'article et dans ce cas cela ne fonctionne pas 🥺. Que dois-je changer pour que cela puisse prendre en compte le negatif ?
 

Catsnroses

XLDnaute Nouveau
bonjour,

je reviens sur ce code qui fonctionne super bien, sauf que maintenant j'ai de nouveaux fichier dont les articles apparaissent différemment. Voici comme ils apparaissent :
BLABLA1=1.0#ZAGZAG=1.0
J'ai essayé de bricoler la fonction pour que cela cherche a partie de la droite cette fois mais cela ne fonctionne pas. Je penses ne pas avoir saisi toutes les subtilités de la fonction précédente.
Merci pour votre aide.
 

Discussions similaires

Statistiques des forums

Discussions
315 084
Messages
2 116 060
Membres
112 645
dernier inscrit
Acid Burn