Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

[Résolu] Savoir si un nom est masculin ou féminin

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 !

Lone-wolf

XLDnaute Barbatruc
Bonsoir à tous,

dans la pièce jointe, j'essaie d'afficher dans une cellule "Nom masculin" ou féminin par rapport aux nom inscrits en feuille 2.

Au départ, j'ai codé comme ceci:

Code:
Private Sub Worksheet_Change(ByVal c As Range)
If Intersect(c, Range("b4")) Is Nothing Then Exit Sub

On Error Resume Next

If Left(c.Value, 2) = "un" Or Left(c.Value, 2) = "le" Then Range("b2") = "Nom masculin"
If Left(c.Value, 3) = "une" Or Left(c.Value, 2) = "la" Then Range("b2") = "Nom féminin"

With Range("b2")
.Font.Size = 13
.Font.FontStyle = "Bold Italic"
.HorizontalAlignment = xlCenter
End With
If Range("b4") = "" Then Range("b2").ClearContents
End Sub

Private Sub Worksheet_SelectionChange(ByVal c As Range)
Application.Goto Range("b4")
End Sub

Le problème était que si j'inscrivais "une tigre" par exemple, bien entendu j'avais tout faux. Maintenant, j'y ai inclu FIND et je narrive pas à trouver la syintaxte exacte.


Merci pour votre aide.



A+ 😎
 

Pièces jointes

Dernière édition:
Re : Savoir si un nom est masculin ou féminin

bonsoir,
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
If Target.Address <> "$B$4" And Target = "" Then Exit Sub
With Sheets(2).Range("b2:b101")
    Set c = .Find(Target)
    If Not c Is Nothing Then
        Select Case c.Offset(0, -1)
            Case "féminin"
            Target = "une " & Target
            Case "masculin"
            Target = "un " & Target
        End Select
    End If
End With
End Sub
A+
kjin
 
Re : Savoir si un nom est masculin ou féminin

Bonsoir kjin et merci d'avoir répondu.

J'ai du mal à saisir le code. Dans Sheets(2).Range("b2:b101") on a les noms; ensuite on recherche le nom, là je comprends. C'est après avec Case que je ne suis plus. Le résultat: "Nom masculin" ou "Nom Féminin" en cellule B2 n'est pas inscrit.

Il faut aussi que " le et la " soient pris en compte et en cas d'erreur (une tigre ou la tigre) ajouter ceci: "Ortographe érroné".




A+ 😎
 
Dernière édition:
Re : Savoir si un nom est masculin ou féminin

Re kjin,

une autre façon de faire, mais toujours le même problème de distinction.

Code:
Private Sub Worksheet_Change(ByVal c As Range)
Dim commun As String

If Intersect(c, Range("b4")) Is Nothing Then Exit Sub

   commun = Range("b4").Value
   
   If NOM_COMMUN(commun) <> "" Then
     Range("b2").Value = "Nom masculin"
  Else
     Range("b2").Value = "Nom féminin"
  End If
  
With Range("b2")
.Font.Size = 13
.Font.FontStyle = "Bold Italic"
.HorizontalAlignment = xlCenter
End With

If Range("b4") = "" Then Range("b2").ClearContents
End Sub

Private Sub Worksheet_SelectionChange(ByVal c As Range)
Application.Goto Range("b4")
End Sub

Private Function NOM_COMMUN(plage As String) As String
     If Int((2 * Rnd) + 1) > 1 Then Exit Function
      NOM_COMMUN = Range("b4").Value
End Function


A+ 😎
 
Dernière édition:
Re : Savoir si un nom est masculin ou féminin

salut

voir Si... cela peut te servir (manque des tests)
Code:
Private Sub Worksheet_Change(ByVal C As Range)
    Dim R As Range, Nom$, Genre$
    If C.Address <> "$B$4" Then Exit Sub
    Application.EnableEvents = False
    Nom = Right(C, Len(C) - InStrRev(C, " ")): Genre = Left(C, InStrRev(C, " "))
    Set R = Feuil2.Columns(2).Find(Nom)
    If Not R Is Nothing Then
        If R.Offset(, -1) = "un" Then
            If Genre <> "un " And Genre <> "le " Then
                [B2] = "mauvais genre": GoTo 1
            End If
        Else
            If Genre <> "une" And Genre <> "la " Then
                [B2] = "mauvais genre": GoTo 1
            End If
        End If
        With [B2]
            .Value = Nom & " est du genre " & IIf(R.Offset(, -1) = "un", "masculin", "féminin")
            .Font.Size = 13
            .Font.FontStyle = "Bold Italic"
            .HorizontalAlignment = xlCenter
        End With
    End If
1   Application.EnableEvents = True
    If [B4] = "" Then [B2].Clear
End Sub
 

Pièces jointes

Re : Savoir si un nom est masculin ou féminin

Bonjour à tous,

Un autre essai, pour le fun. Le fichier est un peu lourd car j'ai récupéré une longue liste de noms français avec leur genre sur le site www.lexique.org. La taille de liste explique la durée d'exécution de la fonction.

Le code de la fonction dans module1: GenreMot(Mot As String)
VB:
Option Explicit
'Liste des articles : triée du plus long au plus court avec espace final
Const LesArticles = "de la /de l' /aux /des /des /les /une /au /du /la /le /un /d' /l' "
Const LesGenresArticles = "f/?/?/?/?/?/f/m/m/f/m/m/?/?"

Public Function GenreMot(Mot As String)

'  "f/m" ==> genre indéterminé (ex: la mousse ou le mousse)
'  "f"   ==> féminin       "m" ==> masculin
'  "(Art. saisi erroné)"  ==> erreur par rapport au genre saisi

Dim T_art, T_genre_art, xart, xmot, i
Dim GenreArticle, VraiGenre, xTrouve As Range

' mot vide
If Trim(Mot) = "" Then
   GenreMot = ""
   Exit Function
End If

' Initialisation
GenreMot = ""
T_art = Split(LesArticles, "/")
T_genre_art = Split(LesGenresArticles, "/")
xmot = LCase(Replace(Trim(Mot), "'", "' "))

'Boucle élimination article
For i = 0 To UBound(T_art)
   If xmot Like T_art(i) & "*" Then
      xmot = Trim(Mid(xmot, Len(T_art(i)) + 1))
      GenreArticle = T_genre_art(i)
      Exit For
   End If
Next i
If xmot = "" Then Exit Function

'chercher le mot
Set xTrouve = Sheets("Lexique3.80").Range("A1:A50000").Find(What:=xmot, _
   LookIn:=xlValues, LookAt:=xlWhole)

If xTrouve Is Nothing Then
   'Mot non trouvé => Erreur
   GenreMot = "mot inconnu"
   Exit Function
Else
   'le mot a été trouvé - vérif du genre trouvé et du genre saisi
   VraiGenre = xTrouve.Offset(, 1).Value
   Select Case GenreArticle
      Case ""           'l'utilisateur n'avait rentré aucun article
         GenreMot = IIf(VraiGenre = "", "f/m", VraiGenre)
      Case "f", "m"     'l'utilisateur avait rentré un article sexué
         If GenreArticle = VraiGenre Or VraiGenre = "" Then
            GenreMot = IIf(VraiGenre = "", "f/m", VraiGenre)
         Else
            GenreMot = VraiGenre & vbLf & " (Art. saisi erroné)"
         End If
      Case "?"          'l'utilisateur avait rentré un article assexué
         GenreMot = IIf(VraiGenre = "", "f/m", VraiGenre)
   End Select
End If
         
End Function
 

Pièces jointes

Re : Savoir si un nom est masculin ou féminin

Bonjour Si, gbinforme

Merci à tous les deux pour l'aide apportée.


@ gbinforme: il faudrait modifier la ligne

Code:
Set cel = .Find(Mid(c, InStr(1, c & " ", " ") + 1), , xlValues, xlPart)

Pour la saisie de l', ex: l'ail et non un ail (Bon, d'accord j'ai pas u mal 😉)


@ Si: à plus pour le feedback 😉


A+ 😎
 
Re : Savoir si un nom est masculin ou féminin

Re Si, bonjour mapomme

@Si: j'ai inclut dans la liste le mot "aigle" et bizarrement il ne le trouve pas. J'ai aussi modifier un peu le code, voir PJ.

@ mapomme: on c'est croisé. Je regarde le fichier et je te redis.


A+ 😎
 

Pièces jointes

Re : [Résolu] Savoir si un nom est masculin ou féminin

Bonjour à tous,

j'arrive après la bataille, mais perso si je devais résoudre ce problème, je m'appuierais sur Internet. Du coup inutile d'avoir une liste lourde à trimbaler dans le fichier.

A tester, ce simple code devrait faire à lui seul l'affaire (je postule que le mot à analyser est en B4 toujours) :

VB:
Private Declare Function OuvreInternet Lib "wininet" _
     Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, _
     ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Private Declare Function fermeInternet Lib "wininet" _
     Alias "InternetCloseHandle" (ByVal hInet As Long) As Integer
Private Declare Function code_page Lib "wininet" _
     Alias "InternetReadFile" (ByVal hFile As Long, ByVal sBuffer As String, _
     ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
Private Declare Function Ouvrepage Lib "wininet" _
     Alias "InternetOpenUrlA" (ByVal hInternetSession As Long, ByVal lpszUrl As String, _
     ByVal lpszHeaders As String, ByVal dwHeadersLength As Long, ByVal dwFlags As Long, _
     ByVal dwContext As Long) As Long

Sub lit_code_page_Web()
Dim texte_code As String * 1024
Dim t#, Mot$

Const L = "la ,le ,l',un ,une"
Const L2 = "&~#'{([-|`_\ç^@)]=}$¤£+°^¨*µ%!§:/;.,?<>0123456789"

Mot = LCase(Range("B4"))
'on isole le mot uniquement, sans son article
For t = LBound(Split(L, ",")) To UBound(Split(L, ","))
  Mot = Replace(Mot, Split(L, ",")(t), "")
Next t

'on vire les caractères parasites
For t = 1 To Len(L2)
  Mot = Replace(Mot, Mid(L2, t, 1), "")
Next t

'Recherche sur le web
page_Web_à_lire = "http://dictionnaire.reverso.net/francais-definition/" & Mot
internet = OuvreInternet("toto", 0, vbNullString, vbNullString, 0) 'ouvre Internet
URL = Ouvrepage(internet, page_Web_à_lire, vbNullString, _
    0, &H400000 Or &H4000000 Or &H80000000, 0) 'ouvre la page Web
'lecture du code de la page par paquet de 1024 caractères
txt = ""
nb_caractères_lus = 1
'Récupération du code source
Do While nb_caractères_lus > 0
'lit 1024 caractères et les copie dans texte_code
 code_page URL, texte_code, 1024, nb_caractères_lus
 txt = txt & Left(texte_code, nb_caractères_lus)
Loop
fermeInternet URL 'ferme la page
fermeInternet internet 'ferme Internet

'détermination du genre
genre = "Non déterminé"
If InStr(txt, ">nm") > 0 Then genre = "Nom Masculin"
If InStr(txt, ">nf") > 0 Then genre = "Nom féminin"

Range("C4") = genre
End Sub
 
Dernière édition:
Re : [Résolu] Savoir si un nom est masculin ou féminin

Bonsoir Si,

le premier code (à la bataille) de Softmama est plus interéssant, vus qu'il évite d'allourdir le classeur. Il maque juste les lignes de code pour afficher "Nom masculin-féminin" comme "un voile - une voile" et les noms au pluriel comme "un escabot - des escabots".

A+ 😎
 
Dernière édition:
- 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

Discussions similaires

Réponses
15
Affichages
468
Réponses
5
Affichages
779
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…