Comptage particulier dans chaîne de texte
Résolu/Fermé
NoviceVBA2017
Messages postés
26
Date d'inscription
dimanche 29 janvier 2017
Statut
Membre
Dernière intervention
6 mai 2019
-
Modifié le 24 janv. 2019 à 20:00
NoviceVBA2017 Messages postés 26 Date d'inscription dimanche 29 janvier 2017 Statut Membre Dernière intervention 6 mai 2019 - 25 janv. 2019 à 18:48
NoviceVBA2017 Messages postés 26 Date d'inscription dimanche 29 janvier 2017 Statut Membre Dernière intervention 6 mai 2019 - 25 janv. 2019 à 18:48
A voir également:
- Comptage particulier dans chaîne de texte
- Site de vente en ligne particulier - Guide
- Chaine tnt gratuite sur mobile - Guide
- Excel cellule couleur si condition texte - Guide
- Transcription audio en texte word gratuit - Guide
- Plus de chaine tv - Guide
3 réponses
yg_be
Messages postés
23348
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 novembre 2024
Ambassadeur
1 554
Modifié le 24 janv. 2019 à 20:02
Modifié le 24 janv. 2019 à 20:02
bonjour, peux-tu partager le code que tu as déjà réalisé, et expliquer quelle partie du problème te bloque?
pour compléter ta description, peux-tu indiquer les réponses attendues pour chacun des 4 exemples?
ne serait-ce pas plus simple de faire la différence entre le numéro de la dernière et celui de la première semaine, et d'ajouter 1?
pour compléter ta description, peux-tu indiquer les réponses attendues pour chacun des 4 exemples?
ne serait-ce pas plus simple de faire la différence entre le numéro de la dernière et celui de la première semaine, et d'ajouter 1?
eriiic
Messages postés
24601
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
25 novembre 2024
7 240
Modifié le 24 janv. 2019 à 23:55
Modifié le 24 janv. 2019 à 23:55
Bonjour,
une proposition avec une fonction personnalisée.
Je suis parti du principe que la syntaxe de la chaine est toujours correcte et ne nécessite aucun contrôle. Tu peux en ajouter dans la boucle.
https://mon-partage.fr/f/l4KbRWoF/
C'est une autre voie de résolution. Simplification de la chaine, découpage, et comptage sans doublon.
Que ça ne t'empêche de poursuivre avec yg_be ça a l'air formateur et tu en tireras des bénéfices.
Et pour comprendre la mienne : touche F1. C'est très formateur aussi et une bonne habitude à prendre ;-)
eric
une proposition avec une fonction personnalisée.
Je suis parti du principe que la syntaxe de la chaine est toujours correcte et ne nécessite aucun contrôle. Tu peux en ajouter dans la boucle.
Function nbS(ch As String) As Long Dim tmp, dict, i As Long Set dict = CreateObject("Scripting.Dictionary") If ch = "" Then Exit Function tmp = Split(Replace(Replace(Application.Trim(ch), "A", ""), "B", ""), "/") For i = 0 To UBound(tmp) dict(tmp(i)) = 1 Next i nbS = dict.Count End Function
https://mon-partage.fr/f/l4KbRWoF/
C'est une autre voie de résolution. Simplification de la chaine, découpage, et comptage sans doublon.
Que ça ne t'empêche de poursuivre avec yg_be ça a l'air formateur et tu en tireras des bénéfices.
Et pour comprendre la mienne : touche F1. C'est très formateur aussi et une bonne habitude à prendre ;-)
eric
NoviceVBA2017
Messages postés
26
Date d'inscription
dimanche 29 janvier 2017
Statut
Membre
Dernière intervention
6 mai 2019
25 janv. 2019 à 18:48
25 janv. 2019 à 18:48
Bonjour à vous deux,
Yg_be, c'est surprenamment simple et terriblement efficace comme approche!
J'étais en train de monter une usine à gaz qui par dessus le marché ne fonctionnait pas :-)
Eriiic, merci pour cette fonction ;-) Je vais prendre le temps de la décortiquer un peu :-)
Ce "tout petit" problème était un véritable blocage pour moi car il s'agit d'une donnée vitale pour d'autres procédures.
Alors une fois encore, merci pour vos lumières, et au plaisir de ré-échanger avec vous!
Bien à vous.
Yg_be, c'est surprenamment simple et terriblement efficace comme approche!
J'étais en train de monter une usine à gaz qui par dessus le marché ne fonctionnait pas :-)
Eriiic, merci pour cette fonction ;-) Je vais prendre le temps de la décortiquer un peu :-)
Ce "tout petit" problème était un véritable blocage pour moi car il s'agit d'une donnée vitale pour d'autres procédures.
Alors une fois encore, merci pour vos lumières, et au plaisir de ré-échanger avec vous!
Bien à vous.
24 janv. 2019 à 20:35
Merci pour cette réponse rapide ;-)
Concernant ta seconde et troisième questions, voici un exemple un peu plus complet (mais peut-être pas exhaustif) avec le résultat attendu :
Ex:
S1/S2/S3
S1A/S2/S3A/S3B/S4/S5/S6A
S2/S3A/S3B
S1B/S2/S3A/S3B/S4/S5/S6A/S6B/S7
S1B/S2/S3A/S3B/S4/S5/S6A/S6B/S7/S8/S9/S10A
S20B/S21/S22A/S22B/S23/S24/S25A/S25B/S26/S27/S28/S29A
S20A/S20B/S21/S22A/S22B/S23/S24/S25A/S25B/S26/S27/S28/S29A
Résultat attendu
3
6
2
7
10
10
10
J'ai ajouté les 3 dernières lignes pour illustrer ma difficulté.
Concernant le code, c'est justement là où je bloque : dans l'idée même, avant de la coder, je ne sais pas comment aborder le problème. J'ai tenté ton idée, j'ai tenté des choses en comptant le nombre de "S" ou de "/" puis en retirant 1 ou 0 en fonction de la parité du nombre de A/B, j'ai tenté en comptant des demi semaines s'il y a un A ou un B, mais ça ne fonctionne pas...
24 janv. 2019 à 21:05
explique bien pourquoi il ne convient pas: message d'erreur, résultat inattendu?
quelle est ton expérience en VBA?
24 janv. 2019 à 22:22
Voici le code de départ que j'ai :
Sub Test()
Dim i As Integer
Dim NbrSemaines As Integer
Dim CelluleDeTravail As Range
Dim Compteur As Integer
For i = 2 To 9
Compteur = 0
Set CelluleDeTravail = Cells(i, 1)
If Left(CelluleDeTravail, 3) Like "S#A" Or Left(CelluleDeTravail, 3) Like "S#B" Or Left(CelluleDeTravail, 4) Like "S##A" Or Left(CelluleDeTravail, 4) Like "S##B" Then Compteur = Compteur + 1
If Right(CelluleDeTravail, 1) Like "A" Or Right(CelluleDeTravail, 1) Like "B" Then Compteur = Compteur + 1
'Comment compter le nombre de couple S#A/S#B et de S##A/S##B dans la chaîne de caractères et l'ajouter à la variable "Compteur"?
'Comment compter aussi le nombre de semaines sans A ou B sans faire doublon avec le comptage précédent? (celui de la ligne commentaires)
Cells(i, 2) = Compteur
Next
End Sub
et le fichier excel ci-joint pour faire l'essai.
https://www.cjoint.com/c/IAyvpdGlf6T
Le fichier compte bien s'il y a une semaine A ou B en début et/ou en fin de la chaîne, mais c'est tout...et puis j'ai l'impression que c'est un peu une méthode bourrin sans beaucoup d'élégance mais bon au point ou j'en suis, je veux juste que ça fonctionne...
Concernant mon niveau, je suis un éternel débutant, je n'ai aucune formation excel ni vba je me suis formé au grès des conseils que j'ai reçu sur les forums depuis 2/3 ans. Pardon par avance pour le manque de rigueur, et je suis preneur pour tout conseil.
24 janv. 2019 à 23:14
24 janv. 2019 à 23:30
si je cherche dans S1A/S1B/S2... ça ne marche pas (resultat macro : 1 ; résultat attendu pour le bout de chaîne : 2 => il y a bien 2 semaines, la S1 à cheval sur 2 mois et la S2)
si je cherche dans S1/S2A/S2B/... ça ne marche pas (resultat macro : 1 ; résultat attendu pour le bout de chaîne : 2 => il y a bien 2 semaines, la S1 et la Sé à cheval sur 2 mois)
A moins que j'ai mal compris le sens de ton message...
Merci encore pour ton aide.