Simplification code

Bonjour à tous !

Je suis à recherche de simplification de code, le but de ce code est que si c'est une voyelle en première lettre alors la phrase commence par "D'" sinon "DE".

Ce code fonctionne mais je n'ai pas fait toute les voyelles pour le moment (avec les accents...).

Je suis encore débutant en VBA. Merci de votre indulgence....

Private Sub ServiceTxt_Change()

servicede = " DE "
ServiceTxt.Value = UCase(ServiceTxt.Value)

If InStr(1, ServiceTxt.Value, "a", vbTextCompare) = 1 Or InStr(1, ServiceTxt.Value, "o", vbTextCompare) = 1 Or InStr(1, ServiceTxt.Value, "i", vbTextCompare) = 1 Or InStr(1, ServiceTxt.Value, "u", vbTextCompare) = 1 Or InStr(1, ServiceTxt.Value, "y", vbTextCompare) = 1 Then
servicede = " D' "
End If

If ChoixAileTxt.Value = "" Then
ServiceTitre.Caption = "SERVICE" & servicede & ServiceTxt.Value
Else
ServiceTitre.Caption = "SERVICE" & servicede & ServiceTxt.Value & " - " & ChoixAileTxt.Value
End If

End Sub

Merci d'avance pour l'aide apportée.

Bonsoir,

vous pourriez prendre le problème dans l'autre sens :

Mettre un D' qui serait changé en DE si une consonne ce qui fait moins de gestion d'accent !
Une fois cela fait, une variable = aux consonnes, une boucle pour le test et voilà !

Mais ce qui me chiffonne c'est le Ucase avec une égalité sur des minuscules...

@ bientôt

LouReeD

Bonsoir,

proposition d'un code sans l'avoir essayé :

Private Sub ServiceTxt_Change()
    Dim I, Consonne, Préfixe
    Préfixe = " D' "
    Consonne = Array("B", "C", "D", "F", "G", "H", "J", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "V", "W", "X", "Z")

    For I = 0 To UBound(Consonne)
        If UCase(Left(ServiceTxt.Value, 1)) = Consonne(I) Then
            Préfixe = " DE "
            Exit For
        End If
    Next I

    If ChoixAileTxt.Value = "" Then
        ServiceTitre.Caption = "SERVICE" & Préfixe & UCase(ServiceTxt.Value)
    Else
        ServiceTitre.Caption = "SERVICE" & Préfixe & UCase(ServiceTxt.Value) & " - " & ChoixAileTxt.Value
    End If
End Sub

@ bientôt

LouReeD

Bonjour à tous,

Voici un essai en utilisant l'opérateur Like :

Private Sub ServiceTxt_Change()
ServiceTxt.Value = UCase(ServiceTxt.Value)
If ServiceTxt.Value like "[AEÉÈIOUY]*" Then servicede = " D' " else servicede = " DE "
ServiceTitre.Caption = "SERVICE" & servicede & ServiceTxt.Value & iif(ChoixAileTxt.Value = "", "", " - ") & ChoixAileTxt.Value
End Sub

Cdlt,

Bonjour,

Je préfère vérifier si une lettre est une consonne, il y a moins de déclinaisons possibles.

Voici mon code

Private Sub ServiceTxt_Change()
Dim servicede As String
    ServiceTxt.Value = UCase(ServiceTxt.Value)
    servicede = IIf(InStr(1, "BCÇDFGHJKLMNPQRSTVWXZ", ServiceTxt.Value, vbTextCompare) > 0, " DE ", " D' ")
    ServiceTitre.Caption = "SERVICE" & servicede & ServiceTxt.Value & IIf(ChoixAileTxt.Value = "", "", " - " & ChoixAileTxt.Value)
End Sub

Bonne journée,

Merci à vous !

@3GB Votre solution marche nickel, grâce à vous, j'ai regardé la doc pour le IIF que je ne connaissais pas, et qui va grandement me simplifier mes codes dans l'avenir. Le like j'avais regardé la doc aujourd'hui mais je n'avais pas compris son fonctionnement, il va falloir que je m'y penche un peu plus.

@LouReeD Merci pour votre réponse, un code, par mon niveau de VBA que je ne comprend pas encore pour le moment. Le Ucase sur la formule, j'avais oublié de l'enlever car j'avais pas forcé la textbox à avoir que des majuscules intinialement.

@Rino702 Je vais tester ! Merci oui ca pourrait être plus logique ! Merci à vous (ne marche pas chez moi)

Merci encore pour votre aide :)

Le iif est l'équivalent du SI d'Excel, souvent utilisé lorsqu'une partie seulement du résultat est soumise à condition.

Le Like est très important, ça facilite beaucoup la vie ! Ici, on cherche un correspondance partielle avec "[AEIOUY]*" qui est un motif signifiant : commence par une des lettres entre les crochets (A, E, .. ou Y).

Le "*" est un caractère spécial qui signifie un nombre quelconque de caractères quelconques.

Si ce n'est pas clair, n'hésitez pas. Sinon, il y a la documentation de Microsoft Docs qui est très claire à ce sujet.

Cdlt,

Merci 3GB,

Oui j'ai regardé directement la doc dès que j'ai vue le code pour essayer de le comprendre.

Le IIF est bien expliqué dans la doc, le LIKE par contre... bien qu'avec votre explication c'est bien plus claire l'exemple qu'il donne dans la doc !

Code finale qui fonctionne nickel (vérification consonne plutôt que voyelle) :

If ServiceTxt.Value Like "[BCDFGHJKLMNPQRSTVWXZ]*" Then servicede = " DE " Else servicede = " D'"

ServiceTitre.Caption = "SERVICE" & servicede & ServiceTxt.Value & IIf(ChoixAileTxt.Value = "", "", " - ") & ChoixAileTxt.Value

J'ai opté pour cette version car moins difficile de bug sachant que le but est le nom du service (à l'hopital).

Je sais pas si on parle de la même doc . Au cas où, voici le lien dont je parle : https://docs.microsoft.com/fr-fr/office/vba/language/reference/user-interface-help/like-operator

C'est vrai que le début peut faire un peu charabia mais je trouve qu'il y a plusieurs exemples parlants et c'est rare que Microsoft donne autant de précisions...

Bonne soirée,

Bonjour,

juste pour info : ICI

Après pour le LIKE il est vrai qu'il n'est pas intégré dans ma tête et c'est une erreur, je tâcherais d'y penser la prochaine fois !

@ bientôt

LouReeD

@3GB Oui on parlait de la même doc, pour un débutant en VBA ça reste moins parlant.

Merci encore !

Rechercher des sujets similaires à "simplification code"