[Résolu][Base] Contrôler le contenu d'un champ courriel

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Eric99
Membre hOOnoraire
Membre hOOnoraire
Messages : 123
Inscription : 17 janv. 2020 10:22

[Résolu][Base] Contrôler le contenu d'un champ courriel

Message par Eric99 »

Bonjour,

Je cherche une solution pour un champ texte (adresse mail) afin que si une virgule ou un point-virgule est saisi il soit modifié en point avant l'actualisation du champ

ou, si solution plus simple, interdire l'utilisation de certains caractères dans ce champ.

j'utilise déjà le code minuscule ci-dessous pour ce champ.

Code : Tout sélectionner

sub PysMinusculeTout(oEvent) 'tout en minuscule lié à 1 champ texte dans "Proriétés : Zone de texte" "Evenements" "Avant l'actualisation"
    oEvent.Source.text = Lcase(oEvent.Source.text)
    end sub 


Je continue à chercher ici si je trouve une solution.

Merci de votre aide.
Eric99
Dernière modification par Eric99 le 12 mars 2020 12:04, modifié 1 fois.
LibO 24.2.1 UbuntuMATE 22.04
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25145
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base] remplacer un caractère par un autre caractère

Message par Dude »

Salut,

S'il s'agit d'analyser un courriel, la question est bien sûr déjà passée :
https://forum.openoffice.org/fr/forum/v ... tr%C3%B4le
joel275
InconditiOOnnel
InconditiOOnnel
Messages : 839
Inscription : 10 janv. 2009 08:05

Re: [Base] remplacer un caractère par un autre caractère

Message par joel275 »

Bonjour,

en moins complet(mais mieux adapté à ta question) que la solution de Dude, teste:

Code : Tout sélectionner

sub JDVirgueleMinusculet(oEvent) 'tout en minuscule lié à 1 champ texte dans "Proriétés : Zone de texte" "Evenements" "Avant l'actualisation"
   txt = oEvent.Source.text
   for i = 1 to len(txt)
    	a = mid(txt,i,1)
    	if a = "," or a = ";" then mid(txt,i,1) = "."
   next
   oEvent.Source.text = LCase(txt)
end sub
A plus
Dernière modification par joel275 le 10 mars 2020 20:19, modifié 1 fois.
A jour de LibreOffice et de Ubuntu
Eric99
Membre hOOnoraire
Membre hOOnoraire
Messages : 123
Inscription : 17 janv. 2020 10:22

Re: [Base] remplacer un caractère par un autre caractère

Message par Eric99 »

Bonjour et merci pour l'aide
joel275 a écrit :Bonjour,
en moins complet(mais mieux adapté à ta question) que la solution de Dude, teste:

Code : Tout sélectionner

sub JDVirgueleMinusculet(oEvent) 'tout en minuscule lié à 1 champ texte dans "Proriétés : Zone de texte" "Evenements" "Avant l'actualisation"
   txt = oEvent.Source.text
   txt = ",azerty;ghjk,"
   for i = 1 to len(txt)
    	a = mid(txt,i,1)
    	if a = "," or a = ";" then mid(txt,i,1) = "."
   next
   oEvent.Source.text = LCase(txt)
end sub
A plus
J'ai essayé ta solution et celle de Dune (intéressante car elle permettrait de modifier plusieurs caractères en dehors de la virgule et du point-virgule) https://forum.openoffice.org/fr/forum/v ... 598#p85598
mais il me manque vraiment des compétences pour les adapter dans mon formulaire "FormAdherentSaisieModif" et le champ "Mail" (Courriel pour l'étiquette). J'ai essayé d'assigner ces macros à différents types d'évènements, de modifier les variables... rien à faire je bloque
Capture%20du%202020-03-10%2015-10-43.png
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Oukcha le 11 mars 2020 06:47, modifié 1 fois.
Raison : L'insertion d'image dans le message ne nécessite pas les balises [img]
LibO 24.2.1 UbuntuMATE 22.04
joel275
InconditiOOnnel
InconditiOOnnel
Messages : 839
Inscription : 10 janv. 2009 08:05

Re: [Base] remplacer un caractère par un autre caractère

Message par joel275 »

Bonsoir,

j'avais rajouté une ligne pour tester et j'ai oublié de la retirer... :oops:
J'ai corrigé dans mon message précédent.
Désolé et à plus.
A jour de LibreOffice et de Ubuntu
Eric99
Membre hOOnoraire
Membre hOOnoraire
Messages : 123
Inscription : 17 janv. 2020 10:22

Re: [Base] remplacer un caractère par un autre caractère

Message par Eric99 »

joel275 a écrit :Bonsoir,

j'avais rajouté une ligne pour tester et j'ai oublié de la retirer... :oops:
J'ai corrigé dans mon message précédent.
Désolé et à plus.
Cela ne fonctionnait toujours pas. J'avais toujours une info comme quoi txt = oEvent.Source.text était une variable non définie

Voici comment j'ai dû modifier ta macro pour quelle fonctionne avec ma base

Code : Tout sélectionner

sub JDVirgueleMinusculet(oEvent) 'tout en minuscule lié à 1 champ texte dans "Proriétés : Zone de texte" "Evenements" "Avant l'actualisation"
   Dim txt As string
   Dim i, a As string
   txt = oEvent.Source.text
   for i = 1 to len(txt)
       a = mid(txt,i,1)
       if a = "," or a = ";" then mid(txt,i,1) = "."
   next
   oEvent.Source.text = LCase(txt)  
end sub
Je vais essayer de m'attaquer à celle de Dude
LibO 24.2.1 UbuntuMATE 22.04
Avatar de l’utilisateur
DLE
SuppOOrter
SuppOOrter
Messages : 1477
Inscription : 30 déc. 2007 18:56
Localisation : Lille

Re: [Base] remplacer un caractère par un autre caractère

Message par DLE »

Bonjour,
Au début du module1 vous avez l'instruction "Option Explicit", ce qui implique de définir toutes les variables utilisées dans vos codes, pour la macro concernée :

Code : Tout sélectionner

Dim txt As String  
Dim i As Integer
Dim a As String
Vous pouvez la mettre en commentaire, si vous ne souhaitez pas avoir d'autres erreurs ailleurs.
Cdlt.
MacOS Sonoma 14.4.1 (iMac-Intel) : AOO 4.1.15 , LibreOffice 7.6.5.2, Adoptium-temurinJDK_1.8.0_402 -
Windows 10 64 bits :
AOO 4.1.15, Libreoffice 7.1.8.1 - FireFox, Thunderbird, ORB 1.2.1
Eric99
Membre hOOnoraire
Membre hOOnoraire
Messages : 123
Inscription : 17 janv. 2020 10:22

Re: [Base] remplacer un caractère par un autre caractère

Message par Eric99 »

Dude a écrit :Salut,

S'il s'agit d'analyser un courriel, la question est bien sûr déjà passée :
https://forum.openoffice.org/fr/forum/v ... tr%C3%B4le
Un grand merci pour ton aide car je n'avais pas réussi à trouver ce message sur le forum.

Cela m'a pris un peu de temps pour comprendre cette macro mais finalement j'ai pu légèrement l'adapter, comme suit, afin que le texte analysé soit remplacé par celui proposé et ainsi l'insérer dans ma table :

Code : Tout sélectionner

Sub ModifierOrthographeCourriel(oEvent)
Dim txt As String
txt = oEvent.Source.text
msgbox ((AnalyseCourriel(txt)) & Chr(10) & "La bonne écriture devrait être celle ci-dessus." & Chr(10) & "Merci de vérifier après avoir cliqué sur OK")
oEvent.source.text = txt
End Sub

Function AnalyseCourriel(txt As String)
  Dim substCarac(1, 8) As String
  Dim i, j, n As Integer

  ' Convertir déjà en minuscule avec la fonction anglaise MINUSCULE de Calc.
  Dim arg(0) As String : arg(0) = txt
  txt = CreateUnoService("com.sun.star.sheet.FunctionAccess").callFunction("LOWER", arg)

  ' Liste des 8 chaînes de caractères interdites à substituer
  substCarac(0, 0) = "áàäâã"  : substCarac(1, 0) = "a"
  substCarac(0, 1) = "éèëê"   : substCarac(1, 1) = "e"
  substCarac(0, 2) = "íìïî"   : substCarac(1, 2) = "i"
  substCarac(0, 3) = "óòöôõ"  : substCarac(1, 3) = "o"
  substCarac(0, 4) = "úùüû%"   : substCarac(1, 4) = "u"
  substCarac(0, 5) = "ç"      : substCarac(1, 5) = "c"
  substCarac(0, 6) = "ñ"      : substCarac(1, 6) = "n"
  substCarac(0, 7) = "\' " : substCarac(1, 7) = ""
  substCarac(0, 8) = "?,;/:§!" : substCarac(1, 8) = "."

  ' Boucle pour les remplacements
  For i = 0 to 8
   For j = 0 to (Len(substCarac(0, i)) - 1)
    While InStr(txt, mid(substCarac(0, i), (j + 1), 1)) <> 0
     n = InStr(txt, mid(substCarac(0, i), (j + 1), 1))
     txt = Left(txt, (n - 1)) & substCarac(1, i) & Right(txt, (Len(txt) - n))
    Wend
   Next j
  Next i

  AnalyseCourriel = txt
End function
Je voudrais l'améliorer sur 1 point :
- si la chaîne de caractère est OK que la msgbox ne se déclenche pas

Dois-je faire 1 message pour cela ou aurais-tu la solution ?
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Eric99 le 11 mars 2020 16:53, modifié 2 fois.
LibO 24.2.1 UbuntuMATE 22.04
Eric99
Membre hOOnoraire
Membre hOOnoraire
Messages : 123
Inscription : 17 janv. 2020 10:22

Re: [Base] remplacer un caractère par un autre caractère

Message par Eric99 »

DLE a écrit :Bonjour,
Au début du module1 vous avez l'instruction "Option Explicit", ce qui implique de définir toutes les variables utilisées dans vos codes, pour la macro concernée :

Code : Tout sélectionner

Dim txt As String  
Dim i As Integer
Dim a As String
Vous pouvez la mettre en commentaire, si vous ne souhaitez pas avoir d'autres erreurs ailleurs.
Cdlt.
Merci pour cette précision. Je suis vraiment un néophyte. J'ai débuté mon apprentissage pour mettre en place ma base fin décembre 2019. Il y a donc des notions que je ne maîtrise pas complètement et beaucoup des macros que j'ai dans ma base sont des macros trouvées ici sans en comprendre toutes les nuances. Pour info j'ai réussi à adapter la macro de Dude que j'ai insérée dans ce post.
LibO 24.2.1 UbuntuMATE 22.04
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25145
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base] remplacer un caractère par un autre caractère

Message par Dude »

Code : Tout sélectionner

txt = CreateUnoService("com.sun.star.sheet.FunctionAccess").callFunction("LOWER", arg)
Nul besoin d'appeler ce service puisque Basic dispose de la fonction LCase :
Capture.PNG
Eric99 a écrit :Dois-je faire 1 message pour cela ou aurais-tu la solution ?
Enième redite : fournir un document exhaustif et limité à la seule problématique.
Accompagné bien sûr d'un mode d'emploi pour arriver à reproduire.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Avatar de l’utilisateur
DLE
SuppOOrter
SuppOOrter
Messages : 1477
Inscription : 30 déc. 2007 18:56
Localisation : Lille

Re: [Base] remplacer un caractère par un autre caractère

Message par DLE »

Une suggestion :

Code : Tout sélectionner

Sub ModifierOrthographeCourriel(oEvent)
Dim txt As String
Dim Resultat As String
txt = oEvent.Source.text
Resultat = AnalyseCourriel(txt)
if Resultat <> 0 then
msgbox (txt & Chr(10) & "La bonne écriture devrait être celle ci-dessus." & Chr(10) & "Merci de vérifier après avoir cliqué sur OK")
end if
oEvent.source.text = txt
End Sub

Function AnalyseCourriel(txt As String) As Variant
  Dim substCarac(1, 8) As String
  Dim i, j, n As Integer
  Dim iTopModif As Integer
  
	iTopModif = 0
  ' Convertir déjà en minuscule avec la fonction anglaise MINUSCULE de Calc.
  Dim arg(0) As String : arg(0) = txt
  txt = CreateUnoService("com.sun.star.sheet.FunctionAccess").callFunction("LOWER", arg)

  ' Liste des 8 chaînes de caractères interdites à substituer
  substCarac(0, 0) = "áàäâã"  : substCarac(1, 0) = "a"
  substCarac(0, 1) = "éèëê"   : substCarac(1, 1) = "e"
  substCarac(0, 2) = "íìïî"   : substCarac(1, 2) = "i"
  substCarac(0, 3) = "óòöôõ"  : substCarac(1, 3) = "o"
  substCarac(0, 4) = "úùüû%"   : substCarac(1, 4) = "u"
  substCarac(0, 5) = "ç"      : substCarac(1, 5) = "c"
  substCarac(0, 6) = "ñ"      : substCarac(1, 6) = "n"
  substCarac(0, 7) = "\' " : substCarac(1, 7) = ""
  substCarac(0, 8) = "?,;/:§!" : substCarac(1, 8) = "."

  ' Boucle pour les remplacements
  For i = 0 to 8
   For j = 0 to (Len(substCarac(0, i)) - 1)
    While InStr(txt, mid(substCarac(0, i), (j + 1), 1)) <> 0
     n = InStr(txt, mid(substCarac(0, i), (j + 1), 1))
     txt = Left(txt, (n - 1)) & substCarac(1, i) & Right(txt, (Len(txt) - n))
     iTopModif = 9
    Wend
   Next j
  Next i
	if iTopModif = 0 then 
		AnalyseCourriel = 0 
	else
		AnalyseCourriel = txt
	end if

End function
je n'ai pas intégré la réponse de Dude.
A+
MacOS Sonoma 14.4.1 (iMac-Intel) : AOO 4.1.15 , LibreOffice 7.6.5.2, Adoptium-temurinJDK_1.8.0_402 -
Windows 10 64 bits :
AOO 4.1.15, Libreoffice 7.1.8.1 - FireFox, Thunderbird, ORB 1.2.1
Avatar de l’utilisateur
Noonours
PassiOOnné
PassiOOnné
Messages : 501
Inscription : 11 mai 2013 00:11
Localisation : Aix en Provence

Re: [Base] remplacer un caractère par un autre caractère

Message par Noonours »

Bonjour,

J'y vais aussi de ma petite suggestion :D

Code : Tout sélectionner

Sub ModifierOrthographeCourriel(oEvent)

 Dim txt As String
 Dim Resultat As String

 'txt = oEvent.Source.text
 txt = "Ch'sais pô bîen écrire ça @ fõùrñïsseur.COM"
 oldText = txt

 Resultat = BienEcrit(txt)

 msgbox ( "avant : " & oldText & chr(10) & "après : " & Resultat)

End Sub

'----------------------------------------------------

Function BienEcrit(sText As String) As String

  CaracInterdits = Array("á","à","ä","â","ã","é","è","ë","ê","í","ì","ï","î","ó","ò","ö","ô","õ","ú","ù","ü","û","%","ç","ñ","\","'"," ","?",";",",","/",":","§","!") 
  CaracRemplace = Array	("a","a","a","a","a","e","e","e","e","i","i","i","i","o","o","o","o","o","u","u","u","u","u","c","n","" ,"" ,"" ,".",".",".",".",".",".",".")
  
  Dim i As Long
  
  sText = LCase(sText)
  
  For i = 0 to UBound(CaracInterdits())
  	sText = join(split(sText, CaracInterdits(i)), CaracRemplace(i))
  Next i
  
  BienEcrit = sText
End function
En fait, ce code ne demande pas à l'utilisateur de modifier son erreur de saisie (donc pas de msgbox, hormis celui pour l'exemple ci-dessus), mais effectue "d'autorité" les modifications.

Cordialement,
Noonours procrastinateur perfectionniste: "Je fais rien, mais demain je l'ferai mieux"

Pour obtenir la réponse la plus précise possible, VEUILLEZ JOINDRE UN FICHIER

LibO 7.6.5.2 Stable et OpenOffice 4.1.15 sous Windows 10
Eric99
Membre hOOnoraire
Membre hOOnoraire
Messages : 123
Inscription : 17 janv. 2020 10:22

Re: [Base] remplacer un caractère par un autre caractère

Message par Eric99 »

DLE a écrit :Une suggestion :

je n'ai pas intégré la réponse de Dude.
A+
Merci de votre suggestion qui fonctionne parfaitement.
J'y ai intégré la réponse de Dude

Code : Tout sélectionner

Sub ModifierEcritureAdresseCourriel(oEvent)
oEvent.Source.text = Lcase(oEvent.Source.text) 'modifie le texte en minuscule
Dim txt As String
Dim Resultat As String
txt = oEvent.Source.text
Resultat = AnalyseCourriel(txt)
if Resultat <> 0 then
msgbox ("La bonne écriture devrait être celle ci-dessous." & Chr(10) & Chr(10) & txt & Chr(10) & Chr(10) & "Revérifier l'adresse Courriel" & Chr(10) & "après avoir cliqué sur OK")
end if
oEvent.source.text = txt
End Sub

Function AnalyseCourriel(txt As String) As Variant
  Dim substCarac(1, 8) As String
  Dim i, j, n As Integer
  Dim iTopModif As Integer
 
   iTopModif = 0
  ' Liste des 8 chaînes de caractères interdites à substituer
  substCarac(0, 0) = "áàäâã"  : substCarac(1, 0) = "a"
  substCarac(0, 1) = "éèëê"   : substCarac(1, 1) = "e"
  substCarac(0, 2) = "íìïî"   : substCarac(1, 2) = "i"
  substCarac(0, 3) = "óòöôõ"  : substCarac(1, 3) = "o"
  substCarac(0, 4) = "úùüû%"   : substCarac(1, 4) = "u"
  substCarac(0, 5) = "ç"      : substCarac(1, 5) = "c"
  substCarac(0, 6) = "ñ"      : substCarac(1, 6) = "n"
  substCarac(0, 7) = "\' " : substCarac(1, 7) = ""
  substCarac(0, 8) = "?,;/:§!" : substCarac(1, 8) = "."

  ' Boucle pour les remplacements
  For i = 0 to 8
   For j = 0 to (Len(substCarac(0, i)) - 1)
    While InStr(txt, mid(substCarac(0, i), (j + 1), 1)) <> 0
     n = InStr(txt, mid(substCarac(0, i), (j + 1), 1))
     txt = Left(txt, (n - 1)) & substCarac(1, i) & Right(txt, (Len(txt) - n))
     iTopModif = 9
    Wend
   Next j
  Next i
   if iTopModif = 0 then
      AnalyseCourriel = 0
   else
      AnalyseCourriel = txt
   end if

End function
Cette macro, assignée à un champ texte avant actualisation, permet pour, par exemple une adresse Courriel, de remplacer les majuscules par des minuscules, de remplacer certains caractères par d'autres (comme une virgule par un point), d'ouvrir une MsgBox, si le texte d'origine a été modifié, prévenant de la modification et de vérifier que cette dernière correspond à l'attente.

Merci à tous de votre aide
Eric99
Dernière modification par Eric99 le 12 mars 2020 12:33, modifié 3 fois.
LibO 24.2.1 UbuntuMATE 22.04
Eric99
Membre hOOnoraire
Membre hOOnoraire
Messages : 123
Inscription : 17 janv. 2020 10:22

Re: [Base] remplacer un caractère par un autre caractère

Message par Eric99 »

Noonours a écrit :Bonjour,

J'y vais aussi de ma petite suggestion :D


En fait, ce code ne demande pas à l'utilisateur de modifier son erreur de saisie (donc pas de msgbox, hormis celui pour l'exemple ci-dessus), mais effectue "d'autorité" les modifications.

Cordialement,
Merci de votre intérêt à ma demande.

La réponse de DLE me convenant (la MsgBox me permet de demander à la personne saisissant les infos de vérifier que les corrections proposées et modifiées automatiquement sont les bonnes)

J'ai enregistré le code avec la remarque de Dude dans mon message de conclusion.
LibO 24.2.1 UbuntuMATE 22.04