[Résolu] Ajouter un 0

Benamou39

XLDnaute Nouveau
Bonjour à tous,

Dans le cadre d'une fonction personnalisée, qui a été crée par les acteurs d'Exceldownload, de mon travail et moi-même, je fais face à une problématique qui à l'air simple au premier abord mais qui me pose bien des difficultés....
Aujourd'hui je gère en manuel, mais je voudrais automatiser cette partie du "programme" VBA.

Mon PB :
J'ai des chaînes de caractères avec des lettres et des chiffres (représentés par lettres AAAA,BBBB,XXXX dans les exemples ci-dessous) et des symboles "." "/" "(" ")" "<".

-> Je dois ajouter un "0" (zéro) dans des chaînes de caractères à certains endroits -> Devant les trois caractères :

Petite illustration :
Au départ Cible
1 AAAA.BBB.CCCC<DDDD.EEEE/FFFF(GGGG) -> AAAA.0BBB.CCCC<DDDD.EEEE/FFFF(GGGG)

2 AAAA.BBBB<CCC.DDDD.EEEE/FFFF.GGGG -> AAAA.BBBB<0CCC.DDDD.EEEE/FFFF.GGGG

3 AAAA.BBBB<CCCC.DDD.EEEE/FFFF.GGG -> AAAA.BBBB<CCCC.0DDD.EEEE/FFFF.0GGG

4 AAAA/BBB -> AAAA/0BBB

5 AAA.BBB.CCC.DDD/EEE.FFFF.GGGG.HHH/IIII.EEE.FFFF/HHH
->
0AAA.0BBB.0CCC.0DDD/0EEE.FFFF.GGGG.0HHH/IIII.0EEE.FFFF/0HHH

Vous trouverez en pièce jointe un fichier avec ces exemples.

A noter que j'obtiens les chaînes de caractère dans une cellule et que je les intègres au cas par cas dans une variable string pour chaque application.

Ce que j'ai déjà fait à ce sujet :
Split -> tableau, pour compter le nombre de caractères (et si < a trois j'ajoute un zéro par conca) mais j'obtiens des bizarreries dans mon résultat final...
Auriez-vous une solution SVP ?

Merci par avance,

Benamou
 

Pièces jointes

  • Classeur1.xlsx
    8.3 KB · Affichages: 45
  • Classeur1.xlsx
    8.3 KB · Affichages: 44
  • Classeur1.xlsx
    8.3 KB · Affichages: 43
Dernière édition:

CISCO

XLDnaute Barbatruc
Re : Ajouter un 0

Bonjour

Pourrais-tu nous expliquer ce qui fait que dans tel cas, tu ne rajoutes qu'un 0, dans tel autre deux, dans un autre cas encore, une autre possibilité... ? A première vue, je ne vois pas de critère simple, dépend des points, <, /, parenthèses...

@ plus
 

Benamou39

XLDnaute Nouveau
Re : Ajouter un 0

Bonjour

Pourrais-tu nous expliquer ce qui fait que dans tel cas, tu ne rajoutes qu'un 0, dans tel autre deux, dans un autre cas encore, une autre possibilité... ? A première vue, je ne vois pas de critère simple, dépend des points, <, /, parenthèses...

@ plus


Cisco,
-> Devant les trois caractères !

J'ajoute autant de zéro devant les trois caractères qu'il y a de termes en trois caractères (dans la chaîne totale) séparés des
. < / parenthèses

Explications dans exemples ci-dessus et intégrés dans le classeur 1 :
exemple 1 :
uniquement BBB en trois caractères -> 0BBB

exemple 2 :
uniquement CCC en trois caractères -> 0CCC

exemple 3 :
CCC et GGG en trois caractères -> 0CCC et 0GGG

exemple 4
uniquement BBB en trois caractères -> 0BBB

Exemple 5
AAA et BBB et CCC et DDD et EEE et HHH en trois caractères -> 0AAA et 0BBB et 0CCC et 0DDD et 0EEE et 0HHH

Pe@ce
 

Benamou39

XLDnaute Nouveau
Re : Ajouter un 0

Bonjour, Benamou39, CISCO :)

Beaucoup plus compliqué qu'il n'y parait.
Je m'y suis frotté en formules sans succès.
Peut-être VBA, RegExp ???

Bonjour Victor et bienvenu dans la danse !

En phase, bien plus compliqué que je ne pensais au départ ...
Il me semble nécessaire de passer en VBA à mon sens.

Ma solution non robuste :
Avec un split, puis comparer les termes AAAA, BBBB, CCCC, DDDD, ..... dans un tableau
et effectuer une boucle pour comparer la longueur de tous les termes séparés des . < / parenthèses,
si inf à trois conca 0 avec le terme en question.

du type :

'dtab est le tableau des termes élémentaires
d = Xchaine_caractères
dtab = Split(d)
For i = 0 To UBound(dtab)
If Len(dtab(i)) = 3 Then
s = Replace(s, dtab(i), "0" & dtab(i))
End If
Next i
 

job75

XLDnaute Barbatruc
Re : Ajouter un 0

Bonsoir Benamou39, CISCO, Patrick,

Avec cette fonction VBA utilisée en F7:F11 :

Code:
Function AjoutZero(t$)
Dim nombre%, i%, n%, j%
nombre = 3 'modifiable
t = "." & t
For i = Len(t) To 1 Step -1
  n = 0
  For j = i To 1 Step -1
    If Mid(t, i, 1) = Mid(t, j, 1) Then n = n + 1 Else Exit For
  Next
  If n = nombre Then t = Application.Replace(t, j + 1, 0, 0)
  i = j + 1
Next
AjoutZero = Mid(t, 2)
End Function
Fichier joint.

A+
 

Pièces jointes

  • Classeur(1).xlsm
    13.8 KB · Affichages: 36
  • Classeur(1).xlsm
    13.8 KB · Affichages: 44
  • Classeur(1).xlsm
    13.8 KB · Affichages: 46

Benamou39

XLDnaute Nouveau
Re : Ajouter un 0

Re, CISCO, Patrick, Job 75,

Job 75 j'ai bien cru que tu avait fait mouche !
Mille excuses mais je me suis sûrement un peu précipité dans l'exhaustivité de mon besoin....
Les termes AAAA, BBBB, CCCC, peuvent s'écrire ABCD, ACDE, GHIJ, voire AB01, AC07,....
Pour plus de réalisme par rapport à mon problème le fichier prend en compte des cas concrets.

On the road again... Thanks
 

Pièces jointes

  • Classeur(1).xlsm
    15.3 KB · Affichages: 52
  • Classeur(1).xlsm
    15.3 KB · Affichages: 51
  • Classeur(1).xlsm
    15.3 KB · Affichages: 40

CISCO

XLDnaute Barbatruc
Re : Ajouter un 0

Bonsoir

Cisco,
-> Devant les trois caractères !

J'ajoute autant de zéro devant les trois caractères qu'il y a de termes en trois caractères (dans la chaîne totale) séparés des
. < / ...

J'avais commencé à réfléchir par rapport aux groupes de 4 caractères, mais je ne voyais pas le lien avec les résultats que tu proposais... Normal...

@ plus
 

job75

XLDnaute Barbatruc
Re : Ajouter un 0

Re,

Ma fonction précédente recherchait des séries de lettres identiques.

C'est la même méthode si l'on recherche les séparateurs .</() :

Code:
Function AjoutZeroSep(t$)
Dim nombre%, sep$, i%, n%, j%
nombre = 3 'modifiable
sep = ".</()" 'séparateurs
t = "." & t
For i = Len(t) To 1 Step -1
  n = 0
  For j = i To 1 Step -1
    If InStr(sep, Mid(t, j, 1)) Then Exit For Else n = n + 1
  Next
  If n = nombre Then t = Application.Replace(t, j + 1, 0, 0)
  i = j
Next
AjoutZeroSep = Mid(t, 2)
End Function
Edit : le nouveau fichier (2).

A+
 

Pièces jointes

  • Classeur(2).xlsm
    16 KB · Affichages: 31
  • Classeur(2).xlsm
    16 KB · Affichages: 47
  • Classeur(2).xlsm
    16 KB · Affichages: 48
Dernière édition:

Benamou39

XLDnaute Nouveau
Re : Ajouter un 0

Job75,

Ta méthode marche du feu !
J'ai essayé avec les cas concret et j'ai bien les bons résultats
(petite erreur uniquement sur le <, traduit par > dans ton code mais sans incidence après correction)

J'intègre ça dans mon programme direct.

Vraiment super grand merci Job75 !

A+
 

job75

XLDnaute Barbatruc
Re : Ajouter un 0

Re,

Noter qu'on peut mettre les séparateurs et le nombre en arguments de la fonction :

Code:
Function AjoutZeroSep(t$, sep$, nombre%)
Dim i%, n%, j%
t = sep & t
For i = Len(t) To 1 Step -1
  n = 0
  For j = i To 1 Step -1
    If InStr(sep, Mid(t, j, 1)) Then Exit For Else n = n + 1
  Next
  If n = nombre Then t = Application.Replace(t, j + 1, 0, 0)
  i = j
Next
AjoutZeroSep = Mid(t, Len(sep) + 1)
End Function
Fichier (3).

A+
 

Pièces jointes

  • Classeur(3).xlsm
    16 KB · Affichages: 38
  • Classeur(3).xlsm
    16 KB · Affichages: 50
  • Classeur(3).xlsm
    16 KB · Affichages: 45

Benamou39

XLDnaute Nouveau
Re : Ajouter un 0

Job 75,

Après avoir intégré cela à mon programme, je peux dire "well done"
-> Très belle prestation en ci peu de temps,merci à toi Job75, à CISCO, et Victor, sans oublier le site Exceldownload !

Il me reste une problématique à gérer sur mon programme mais la ça risque d'être plus compliqué à mon sens !

Je mets cette discussion en Résolue !

Très bonne soirée à tous,

Benamou
 

Yaloo

XLDnaute Barbatruc
Re : [Résolu] Ajouter un 0

Bonsoir à tous,

Désolé pour l'incursion, mais petite question à Job, que je félicite pour sa belle fonction (comme d'hab ;))
Pourquoi mettre en début de macro
puis
AjoutZeroSep = Mid(t, Len(sep) + 1)
au lieu de
AjoutZeroSep = t
J'ai testé, j'ai l'impression d'avoir le même résultat.

A+

Martial
 

Statistiques des forums

Discussions
312 220
Messages
2 086 381
Membres
103 199
dernier inscrit
ATS1