InStrRev et caractère "-"

guil182

XLDnaute Nouveau
Bonjour au forum

Voici mon problème, lors de l'utilisation de la fonction :

Code:
lg = InStrRev(celb.Value, cela.Value, -1, vbTextCompare)

je compare cette chaîne :
Paul Jaboulet Aîné Crozes-Hermitage White Domaine de Roure

Avec Hermitage et Crozes-Hermitage .

Le problème est qu'il trouve Hermitage et sort....alors que je voudrais qu'il ne sélectionne que Crozes-Hermitage, le caractère d'espacement étant l'espace.

Merci de votre aide.
 
G

Guest

Guest
Re : InStrRev et caractère "-"

Bonjour,

Code:
Chaine= "Paul Jaboulet Aîné Crozes-Hermitage"
 lg = InStrRev(Chaine " ")
Resutlat= Mid(Chaine, lg+1)

Je ne vois pas ce que viens faire '-' là-dedans.

A+
 

Staple1600

XLDnaute Barbatruc
Re : InStrRev et caractère "-"

Bonjour guil182, le fil, le forum

Je passe ici (histoire de saluer les sieurs Hasco et pierrejean ;))


Une autre façon avec Split

Code:
Sub a()
Dim chaine$, Resultat$
chaine = "Paul Jaboulet Aîné Crozes-Hermitage"
t_str = Split(chaine)
Resultat = t_str(UBound(t_str))
MsgBox Resultat
End Sub
PS: il existe ce fil qui est le fil initial ...:rolleyes: (fil avec une PJ ce qui peut aider à voir de quoi il retourne)
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : InStrRev et caractère "-"

Re

Salut Staple

Le fichier avec une petite verrue pour resoudre ce cas particulier
Et avec mes excuses a Robert pour avoir trafiqué son excellente macro
 

Pièces jointes

  • guil182_Exemple.zip
    18.1 KB · Affichages: 28

pierrejean

XLDnaute Barbatruc
Re : InStrRev et caractère "-"

Re

Une autre version , respectueuse de la macro de Robert:
Inserer un espace devant l'appellation (ce qu'a fait la macro modif de ce fichier)
 

Pièces jointes

  • guil182_Exemple_b.zip
    19.4 KB · Affichages: 31
  • guil182_Exemple_b.zip
    19.4 KB · Affichages: 35
  • guil182_Exemple_b.zip
    19.4 KB · Affichages: 24

guil182

XLDnaute Nouveau
Re : InStrRev et caractère "-"

Merci beaucoup pour votre gentillesse et votre réactivité.

Ça marche bien. Par contre, avez vous remarquez que le dernier caractère du Producer a disparu ?

remplacer :
celb.Offset(0, 1).Value = Mid(celb.Value, 2, lg - 3) 'place en colonne B le producteur

par :

celb.Offset(0, 1).Value = Mid(celb.Value, 2, lg - 2) 'place en colonne B le producteur

Suffit il ?

Merci encore de de votre aide
 
Dernière édition:

guil182

XLDnaute Nouveau
Re : InStrRev et caractère "-"

Excusez moi, mais je bloque sur l'amélioration.

En effet, il comprend toutes les appellations composées sauf ce cas :"beaujolais-villages".

Je vous joins le fichier exemple.

Un grand merci encore une fois
 

Pièces jointes

  • guil182_Exemple_b.xls
    37.5 KB · Affichages: 46
  • guil182_Exemple_b.xls
    37.5 KB · Affichages: 47
  • guil182_Exemple_b.xls
    37.5 KB · Affichages: 50

guil182

XLDnaute Nouveau
Re : InStrRev et caractère "-"

J'ai trouvé. Cela était dut au fait que certain description du vin se terminait par le nom de l'appellation. Faut donc surcharger le champ d'un espace.

Voici le code :

Code:
Sub Macro1()
Dim celb As Range 'déclare la variable celb (CELlule de la Base)
Dim cela As Range 'déclare la variable cela (CELlule des Appelations)
Dim a As Worksheet 'déclare la variable a (onglet des Appellations)
Dim b As Worksheet 'déclare la variable b (onglet de la Base de données)
Dim lg As Byte 'déclare la variable lg (LonGueur)
 
Set a = Sheets("Feuil2") 'définit l'onglet a
Set b = Sheets("Feuil1") 'définit l'onglet b
 
'boucle 1 : sur toutes les cellules de la base (onglet "Feuil1"), colonne A)
For Each celb In b.Range("A2:A" & b.Range("A65536").End(xlUp).Row)

    celb = celb & " "
    
    'boucle 2 : sur toutes les cellules des apellations (onglet "Feuil2"), colonne B)
    For Each cela In a.Range("B2:B" & a.Range("B65536").End(xlUp).Row)
        'définit la variable lg (position, en nombre de caractères, du texte de cela dans celb)
        lg = InStrRev(celb.Value, cela.Value, -1, vbTextCompare)
        
        
        If lg > 0 Then ' condition 1 : si lg est positif (donc si le texte de cela existe dans celb)
            celb.Offset(0, 1).Value = Trim(Mid(celb.Value, 2, lg - 2)) 'place en colonne B le producteur
            
            'condition 2 : si le nom du vin est précédé de "Rosé"
            If Left(Mid(celb.Value, lg + Len(cela.Value)), 4) = "Rosé" Then
                'place le nom du vin en supprimant "Rosé" en colonne C
                celb.Offset(0, 2).Value = Trim(Mid(celb.Value, lg + Len(cela.Value) + 5))
            Else ' sinon (condition 2)
                'place le nom du vin en colonne C
                celb.Offset(0, 2).Value = Trim(Mid(celb.Value, lg + Len(cela.Value)))
            End If ' fin de la condition 2
              celb.Offset(0, 3).Value = Trim(cela.Value) 'place l'appelation en colonne C
       
            Exit For ' sort de la boucle 2
        End If ' fin de la condition 1
    Next cela 'prochaine cellule cela de la boucle 2
 
Next celb 'prochaine cellule celb de la boucle 1
End Sub

Merci encore a tout le forum
 

guil182

XLDnaute Nouveau
Re : InStrRev et caractère "-"

Bonjour à tout le forum.
Toujours sur cette macro, je bloque sur un cas qui est très impactant.
En effet, certains appellations sont des noms composés mais sans "-", ex :
" Bordeaux Supérieur ", et là la macro n'arrive plus à faire la distinction.

Je me permets de joindre le fichier exemple.

Merci encore de votre aide.
 

Pièces jointes

  • guil182_Exemple_b.xls
    38.5 KB · Affichages: 46
  • guil182_Exemple_b.xls
    38.5 KB · Affichages: 48
  • guil182_Exemple_b.xls
    38.5 KB · Affichages: 50

pierrejean

XLDnaute Barbatruc
Re : InStrRev et caractère "-"

Re

Petite verrue pour traiter le problème du Bordeaux Supérieur
Mais uniquement pour l'Appellation
Pour verifier si aucune incidence sur les autres cas et voir ce qu'il est possible de faire pour les blancs ,rouges ,rosés et autres il serait bon d'avoir une plus grande diversité de vins a traiter
A noter que je suis aussi disponible pour les degustations lol !!
 

Pièces jointes

  • guil182_Exemple_c.zip
    12.1 KB · Affichages: 25

guil182

XLDnaute Nouveau
Re : InStrRev et caractère "-"

Merci beaucoup, par contre la solution impacte le fait de retravailler le "coupage" de la chaine pour le producteur et le wine....mais j'ai trouvé....
En fait, il suffit de trier la liste des appellations par nom, donc Bordeaux sera toujours avant bordeaux supérieur et cela est valable pour toutes les appellations composées. Ensuite, c'est peut être pas très bon en terme de programmation, plus long mais efficace.....au lieu de sortir quand la chaine est trouvée, quoi qu'il arrive je boucle sur toutes les appellations....et ca marche

Merci encore.

PS : pour la dégustation, cela ne pose pas de problème...mais je suis de Bordeaux...:eek:
 
G

Guest

Guest
Re : InStrRev et caractère "-"

Bonjour Tous,
Staple:)
Pierre-Jean:)

Je suis ce fil depuis le début et me dis de plus en plus que notre ami Guil182 aurait peut-être interêt à se trouver une liste de toutes les appellations ou liste de producteurs. Ces listes doivent bien exister quelque part.

Ensuite il suffirait d'extraire le connu, pour examiner l'inconnu.

A+
 

pierrejean

XLDnaute Barbatruc
Re : InStrRev et caractère "-"

Re

tout a fait Ok avec toi Hasco
Guil182
Si tu as une liste des subtilités type Bordeaux Supérieur /Bordeaux ,Chassagne montrachet/ montrachet on peut generaliser ma verrue
Pour les Appellations j'ai une liste d'environ 330 appellations (dans laquelle le Chassagne-montrachet s'ecrit avec un tiret , par contre j'ai des Bourgogne , Bourgogne clairet , Bourgogne grand ordinaire , Bourgogne mousseux , Bourgogne ordinaire ,Bourgogne passe-tout-grain ...)
 

Statistiques des forums

Discussions
312 489
Messages
2 088 853
Membres
103 975
dernier inscrit
denry