InStrRev et caractère "-"

  • Initiateur de la discussion Initiateur de la discussion guil182
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

G

guil182

Guest
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.
 
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+
 
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 ...🙄 (fil avec une PJ ce qui peut aider à voir de quoi il retourne)
 
Dernière édition:
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 modification par un modérateur:
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

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
 
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

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

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...😱
 
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+
 
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 ...)
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Retour