eriic
voila ce que j'obtiens avec ta fonction
eriic
voila ce que j'obtiens avec ta fonction
C'est ce que je recherche... je viens de tester sur mes 40000 lignes et c'est à peux de choses près nickel !!
Merci à vous tous...
Si vous aimez ce genre de défis, on peut perfectionner la chose... sinon c'est bon pour moi....
Cordialement et merci encore une fois à vous !!
Re,
Quelle est la finalité/but final ?
En gros,
J'ai un libellé... auquel s'aditionne un conditionnement... pour créer un libellé marketing..
ex. filet saumon ..... 4x200g ....... filet saumon 4x200g
Mais pendant un nettoyage.... certaine valeur sont restées dans le premier libellé...
ex filet saumon 4x20 ...... 4x200g ..... filet de saumon 4x20 4x200g
Voilà en gros...
Pour éviter de faire du ligne a ligne et détecter directement les lignes à modifier manuellement...
Cordialement.
re
on est loin donc de la demande initiale de 2 caracteres max differents en debut/ fin
bref je ne suis pas sur que cela soit perenne
tu imagine le nombre de possibilité a traité pour une seule !! chaine
toto titi riri fifi loulou
toto titi iri fifi loulou
toto iti riri fifi loulou
tot titi riri fifi loulou
toto titi riri fifi oulou
toto titi riri fifi loul
etc... etc.....
ca marchera pas longtemps ton truc ca c'est sur
ca donne l'impression que quen tu parle de doublons c'est des mots quasi similaires dans une meme chaine et non de chaine similaires dans plusieurs cellules
le jour ou tu va tomber sur une eventualité qui n'a pas été prévue ben le resultat sera faux ,va chercher l'erreur toi hein
perso un truc comme ca sur comme tu a dis + de 40000 lignes je tenterais meme pas !!!!
il n'y a qu'a regarder cette capture
dis moi un peu : la ligne 15 c'est vrai de quoi !!!????????????????????????
ca veut dire quoi vra pour cette ligne
bon courage
à tester :
eric
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 Function DoublCellVraiFaux(c As String) Dim a, tmp, i As Long, j As Long a = Split(Application.Trim(c), " ") On Error GoTo fin For i = UBound(a) - 1 To UBound(a) tmp = "" For j = 1 To Len(a(i)) If Mid(a(i), j, 1) Like "[-,.0-9]" Then tmp = tmp & Mid(a(i), j, 1) Next j If InStr(tmp, "-") = 0 Then a(i) = CDbl(tmp) Else tmp = Split(tmp, "-") If UBound(tmp) > 0 Then For j = 0 To UBound(tmp): tmp(j) = CDbl(Val(tmp(j))): Next j If tmp(1) = "0" Then tmp(1) = "" a(i) = Join(tmp, "-") End If End If Next i DoublCellVraiFaux = Left(a(UBound(a) - 1), Len(a(UBound(a)))) = a(UBound(a)) Exit Function fin: DoublCellVraiFaux = False End Function
Edit : ajout traitement d'erreur
@eriic
meme resultat que la précedente tout est vrai
vrai de quoi ca.... (that the question)
@patrick
Remarque très pertinente que je comprends bien mais rien que le fait de pouvoir enlever 38000 lignes sur 40000 me fait déjà gagner un temps de fou...
Même si quelques une renvoie "Vrai" mais ne le sont pas vraiment, je le remarquerais lors de mon traitement manuel...
@eriiic
c'est encore mieux !!
Merci.
Patrick,
"... 20g 2blablabla" est VRAI car les 2 derniers mots contiennent au moins un nombre, le 2nd étant le début du premier.
g et blablabla sont éliminés car sont considérés comme étant les unités.
Par contre "tyy tdyrtyrty rftty 50" et "tyy tdyrtyrty rftty" seront FAUX car il manque au moins un nombre dans les 2 derniers mots. Difficile de dire si c'est dû à la troncature et normal ou non.
Un oeil d'expert doit décider.
Si besoin on pourrait mettre VRAI si 0 nombre, mais comme le demandeur n'a pas signalé ce cas comme possible et qu'il y voudrait VRAI, inutile d'ajouter une ligne de code pour l'instant
eric
re
oui eriic j'ai fini par comprendre ce que voulais le demandeur
il aurait parler de segment de chaine répétés j'aurais pigé tout de suite doublons pour moi c'est entre 2 cellules
si la premiere fourchette de grammage de chaque produit termine par un "g" je dis bien la premiere
Libellé long M
Pavé de dindonneau précuit 120-130g 120-130g
Petit beurre 20g 20g
Filets de flétan 700-1000g 700-1000g
vé de dindonneau précuit 120-130g 120-130g
Filet de saint-pierre 170-220g 170-22
Filet de plie pané 180-200g 180-200g
Petit beurre 20g 2
Pavé de dindonneau précuit 120-130g 120-13
Burger de poisson pané 150g 150
vé de dindonneau précuit 120-130g 120-130g
Fish stick pané 100g g100
Persil en feuille 120g 12
Planchette de colin d'alaska sans arêtes 100g 0100g
Petit beurre 20g 20g
2 ou 3 lignes de code suffise a repérer la répetition de la chaine de grammage
parti de la il peut meme remasteuriser sa colonne avec la chaine netoyée
et combien meme il n'y aurais pas le "g"
on repere la premiere portion comportant un numerique avec split et on garde la zero et 1 et c'est tout on ragjoute le "g" si il est absent a la fin
c'est son principe meme du true/false dans la colonne "B" qui me perturbe a quoi ca sert ?
un futur traitement ??: autant le faire tout de suite puisque l'on a la chaine valide dans son integralité (split(c,"g")(0) & split(c,"g")(1))
split(c,"g")(0) & split(c,"g")(1) ?
Au delà du fait qu'avec un seul g on récupère c (?), il ne faut pas d'anguille aux rutabagas et ses petits légumes au menu ;-)
Je pense qu'il veut comparer justement les 2 fourchettes de nombres. 25g 50g sera FAUX
Mais c'est vrai qu'il n'a pas fourni d'exemples faux pour bien appréhender
je sais pas mais il parle de pouvoir supprimer 38000 ligne sur 40000
ok
perso je ferait un netoyage de la chaine et un removeduplicate de la colonne "B"
formule
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Function correction_code(c) Dim tbl, num As Long, codchar$, it tbl = Split(c, " ") For i = LBound(tbl) To UBound(tbl) it = Replace(Replace(tbl(i), "g", ""), "-", "") If it Like "*[0-9]*" Then num = num + 1 If num > 1 And Not tbl(i) Like "*[0-9]*" Then num = 0 If num < 2 Then codchar = codchar & tbl(i) & IIf(IsNumeric(it) And Right(tbl(i), 1) <> "g", "g ", " ") Next correction_code = codchar End Function
c'est propre net=correction_code(A2)
Bonjour
et dans la foulée totalement rassurant pour les amoureux de régimes "light" puisque "sachet de 5 fonds d'artichaut 120g 140g" deviendrait ainsi "sachet de 5g fonds d'artichaut"c'est propre net
Pour moi il ne parle pas de supprimer, mais d'en avoir moins à contrôler.
Et il a g ou gr, d'où les 1 ou 2 caractères demandés au début.
tu biaise la unparia
d'apres ce que j'ai compris la fourchette de grammage est separé par un tiret la tu a mis nom pas une fourchette mais 2 grammages differents
sachet de 5 fonds d'artichaut 120g 140g
mais ca fait rien ca montre bien ce que je disais il y a tellement de possibilité qu'avant qu'on les prennent toutes en compte et bien il va y revenir souvent vu le nombre de lignes
tiret ou pas tiret -->> serait traduit par "sachet de 5g fonds d'artichaut" avec ton codela fourchette de grammage est separé par un tiret
Pour le reste, à savoir :
-->> totalement d'accord. Aucune solution totalement fiable avec un tel contexte.ca montre bien ce que je disais il y a tellement de possibilité qu'avant qu'on les prennent toutes en compte et bien il va y revenir souvent vu le nombre de lignes
re
voila pour ta potée de artichaut
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Function correction_code(c) Dim tbl, num As Long, codchar$, it, gram$ tbl = Split(c, " ") For i = LBound(tbl) To UBound(tbl) If tbl(i) Like "*[0-9]*" And Right(Trim(tbl(i)), 1) = "g" Then gram = tbl(i) it = Replace(Replace(tbl(i), "g", ""), "-", "") If it Like "*[0-9]*" And gram <> "" Then num = num + 1 If num > 1 And Not tbl(i) Like "*[0-9]*" Then num = 0 If num < 2 Then codchar = codchar & tbl(i) & " " Next correction_code = codchar End Function
Re,
Je suis qd même bien content d’avoir posé la question du but final !!!
On en revient toujours à la même chose lors d’une ouverture de discussion, à savoir le manque de précisions,
et donc avoir en début de discussions tous les tenants et aboutissants, ainsi que le but final.
Surtout, et malheureusement pour moi, j’ai moins de temps, et depuis aussi je préfère coder sur des explications claires, sinon je fais préciser; en tout cas, j’essaie de me tenir à cette façon de faire …
En tou cas vu la tournure, je pense qu’un tri au préalable est obligatoire afin de faciliter la suite du travail …
Sauf que ce n'est pas ce qui est demandé.
Peut-être veut-il traiter manuellement les anomalies de ce type :
Persil en feuille 120g 150g
ou
Persil en feuille 120g
eric
Re,
@kev6540
A voir si par formule cela peut t'intéresser (Formule à étendre - si on veut garder l'ordre au final, prendre une colonne supp. pour indiquer la ligne ou se trouve le texte) :
Possibilité de tri ou de concaténation ou d'une formule supp en colonne de droite(F), voir peut être si c'est possible un filtre élaboré ou simplement un petit code VBA sur les colonnes qui intéressent …
DONNEES DE DEPART PRODUIT POIDS GLOBAL POIDS 1 POIDS 2 Pavé de dindonneau précuit 120-130g 120-130g Pavé de dindonneau précuit 120-130g 120-130g 120-130g 120-130g Petit beurre 20g 20g Petit beurre 20g 20g 20g 20g Filets de flétan 700-1000g 700-1000g Filets de flétan 700-1000g 700-1000g 700-1000g 700-1000g Filet de saint-pierre 170-220g 170-22 Filet de saint-pierre 170-220g 170-22 170-220g 170-22 Filet de plie pané 180-200g 180-200g Filet de plie pané 180-200g 180-200g 180-200g 180-200g Burger de poisson pané 150g 150 Burger de poisson pané 150g 150 150g 150 Fish stick pané 100g g100 Fish stick pané 100g g100 100g g100 Persil en feuille 120g 12 Persil en feuille 120g 12 120g 12 Planchette de colin d'alaska sans arêtes 100g 1100g Planchette de colin d'alaska sans arêtes 100g 1100g 100g 1100g Persil en feuille 120g Persil en feuille 120g A VERIFIER ou OK ou LAISSER VIDE ?? A VERIFIER ou OK ou LAISSER VIDE ??
DONNEES DE DEPART PRODUIT POIDS GLOBAL POIDS 1 POIDS 2 Pavé de dindonneau précuit 120-130g 120-130g =GAUCHE(A2;MIN(TROUVE({0.1.2.3.4.5.6.7.8.9};A2&"0123456789"))-1) =DROITE(A2;NBCAR(A2)-MIN(TROUVE({0.1.2.3.4.5.6.7.8.9};A2&"0123456789"))+1) =SIERREUR(GAUCHE(C2;TROUVE(" ";C2;1)-1);"A VERIFIER ou OK ou LAISSER VIDE ??") =SI(ESTERREUR(GAUCHE(C2;TROUVE(" ";C2;1)-1));"A VERIFIER ou OK ou LAISSER VIDE ??";STXT(C2;NBCAR(D2)+2;NBCAR(C2)))
Wait and see …
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager