combiner formule pour éviter la répétition du code !

ronanm

XLDnaute Nouveau
Bonjour à tous,

Je souhaitais que les données soit toujours forcée pour etre en majuscule. J'ai ainsi utilisé le code suivant :

Code:
If Range("K" & Target.Row) = "x" Then Target.Value = UCase(CStr(Target.Value))
If Range("K" & Target.Row) = "X" Then

Et ensuite cela exécute autre chose. Mon souci est que la suite est exécutée deux fois, une fois quand le "x" est mis en majuscule et une seconde fois car mon "X" est en majuscule ?

Je ne sais pas si je suis assez clair mais je souhaiterais combiné ces formules afin d'éviter la redondance.

Merci beaucoup
 

Papou-net

XLDnaute Barbatruc
Re : combiner formule pour éviter la répétition du code !

Bonjour ronanm, PascalXLD,

Pourquoi ne pas écrire tout simplement :

Code:
Target.Value = UCase(Target.Value)

Cette ligne se suffit à elle-même, quelle que soit la casse du texte.

Espérant avoir répondu.

Cordialement.
 

ronanm

XLDnaute Nouveau
Re : combiner formule pour éviter la répétition du code !

Voici comment cela se présente :

Regarde la pièce jointe Classeur1.xls

Le souci est le fait que je doit acquitter deux fois la msgbox qui s'ouvre !!

Pourquoi ne pas écrire tout simplement :

Code:
Target.Value = UCase(Target.Value)

Cette ligne se suffit à elle-même, quelle que soit la casse du texte.

Car je veux mettre en majuscule uniquement ces deux colonnes. Si je met cela dans l'ensemble de mon code, il me met une erreur. (Et en soit mes connaissances sont limitées et je colle des bouts de code des forums pour faire au mieux)

Bien à vous.
 

Pièces jointes

  • Classeur1.xls
    23.5 KB · Affichages: 61
  • Classeur1.xls
    23.5 KB · Affichages: 65

Papou-net

XLDnaute Barbatruc
Re : combiner formule pour éviter la répétition du code !

Bonsoir ronanm,

Avec un fichier, c'est plus facile de comprendre et d'aider.

J'ai donc entièrement revu ton code, et j'ai vérifié qu'il fonctionne parfaitement :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Msg As String, Style As String, Title As String, Answer As String
Dim Msg2 As String, Style2 As String, Title2 As String, Answer2 As String

On Error Resume Next

If Range("A" & Target.Row) = "x" Or Range("B" & Target.Row) = "x" Then
  Target.Value = UCase(Target.Value)
  Exit Sub
End If
If Target.Value = "X" Then
  Select Case Target.Column
    Case 1
      Msg = "colonne A" ' Définit le message.
      Style = vbYesNo + vbQuestion
      Title = "aaa"    ' Définit les titres.
      Answer = MsgBox(Msg, Style, Title)
      If Answer = vbYes Then Exit Sub ' bouton Oui.(copie une trame dans programme)
      If Answer = vbNo Then Exit Sub ' bouton No
    Case 2
      Msg2 = "colonne A ?" ' Définit le message.
      Style2 = vbYesNo + vbQuestion
      Title2 = "bbb"    ' Définit les titres.
      Answer2 = MsgBox(Msg2, Style2, Title2)
      If Answer2 = vbYes Then Exit Sub ' bouton Oui. (copie une trame dans programme)
      If Answer2 = vbNo Then Exit Sub ' bouton No
  End Select
End If
End Sub

Je joins également ton fichier modifié.

Espérant avoir résolu.

Cordialement.
 

Pièces jointes

  • ronanm.xls
    23.5 KB · Affichages: 68

ronanm

XLDnaute Nouveau
Re : combiner formule pour éviter la répétition du code !

Bonsoir ronanm,

Avec un fichier, c'est plus facile de comprendre et d'aider.

J'ai donc entièrement revu ton code, et j'ai vérifié qu'il fonctionne parfaitement :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Msg As String, Style As String, Title As String, Answer As String
Dim Msg2 As String, Style2 As String, Title2 As String, Answer2 As String

On Error Resume Next

If Range("A" & Target.Row) = "x" Or Range("B" & Target.Row) = "x" Then
  Target.Value = UCase(Target.Value)
  Exit Sub
End If
If Target.Value = "X" Then
  Select Case Target.Column
    Case 1
      Msg = "colonne A" ' Définit le message.
      Style = vbYesNo + vbQuestion
      Title = "aaa"    ' Définit les titres.
      Answer = MsgBox(Msg, Style, Title)
      If Answer = vbYes Then Exit Sub ' bouton Oui.(copie une trame dans programme)
      If Answer = vbNo Then Exit Sub ' bouton No
    Case 2
      Msg2 = "colonne A ?" ' Définit le message.
      Style2 = vbYesNo + vbQuestion
      Title2 = "bbb"    ' Définit les titres.
      Answer2 = MsgBox(Msg2, Style2, Title2)
      If Answer2 = vbYes Then Exit Sub ' bouton Oui. (copie une trame dans programme)
      If Answer2 = vbNo Then Exit Sub ' bouton No
  End Select
End If
End Sub

Je joins également ton fichier modifié.

Espérant avoir résolu.

Cordialement.

Je test tout àa sur mon fichier d'origine et je te redis !! mais cela me semble parfait !! merci encore
 

ronanm

XLDnaute Nouveau
Re : combiner formule pour éviter la répétition du code !

Youhouuuuuu énormissime !!! merci beaucoup @Papou-net!! C'est parfait !! (Jai juste mis quelques minutes à comprendre que je devais changer le numéro de "case" pour l'adapter) ;-)

Une dernière tite chose si possible, j'ai essayer de rajouter un bouton Annuler avec Application.Undo mais il ne veut pas fonctionner ? Voila ce que j'ai ajouté
Code:
Style = vbYesNoCancel + vbQuestion
et
Code:
If Answer = vbCancel Then Application.Undo

Cordialement
Ronan
 
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : combiner formule pour éviter la répétition du code !

Une dernière tite chose si possible, j'ai essayer de rajouter un bouton Annuler avec Application.Undo mais il ne veut pas fonctionner ?

Bonsoir Ronanm,

Je ne comprends pas bien ce que tu cherches à obtenir avec ton bouton Annuler : veux-tu simplement fermer le formulaire sans enregistrer les données ou bien veux-tu supprimer les précédentes lignes saisies ?

A te lire.

Cordialement.
 

Pierrot93

XLDnaute Barbatruc
Re : combiner formule pour éviter la répétition du code !

Bonjour à tous

petite info au passage, "Application.Undo" annule la dernière action effectuée par l'utilisateur, en aucun cas annulera une action effectuée par vba...

bonne journée
@+
 

Papou-net

XLDnaute Barbatruc
Re : combiner formule pour éviter la répétition du code !

petite info au passage, "Application.Undo" annule la dernière action effectuée par l'utilisateur, en aucun cas annulera une action effectuée par vba...

Bonjour Pierrot,

Merci à toi pour cette précision.

Je ne connaissais pas cette instruction, tu m'évites ainsi une recherche.

Bonne journée à toi également.

Cordialement.
 

ronanm

XLDnaute Nouveau
Re : combiner formule pour éviter la répétition du code !

Bonjour, ce que je souhaite c'est annulé la saisie du texte dans mon tableau. mais lorsque je combine application.Undo a ca par exemple :

Code:
Dim msg As String, Style As String, Title As String, Answer As String
 msg = "test ?" ' Définit le message.
      Style = vbYesNoCancel + vbQuestion
      Title = "test"    ' Définit les titres.
      Answer = MsgBox(msg, Style, Title)
      If Answer = vbYes Then ' bouton Oui.(copie une trame dans programme)
      If Answer = vbNo Then Exit Sub
      If Answer = vbCancel Then application.Undo

Application.undo n'efface pas la dernière donnée que je viens de saisir !! il quitte simplement la userform !!

Au complet ça donne cela et je voulais y intégrer application.undo mais ca ne fonctionne pas

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim msg As String, Style As String, Title As String, Answer As String
Dim msg2 As String, Style2 As String, Title2 As String, Answer2 As String

On Error Resume Next

If Range("L" & Target.Row) = "x" Or Range("M" & Target.Row) = "x" Or Range("K" & Target.Row) = "x" Or Range("N" & Target.Row) = "x" Or Range("O" & Target.Row) = "x" Or Range("P" & Target.Row) = "x" Then
 Target.Value = UCase(Target.Value)
  Exit Sub
End If
If Target.Value = "X" Then
  Select Case Target.Column
    Case 12
      msg = "Voulez-vous créer une fiche de constat 'A AMELIORER' ?" ' Définit le message.
      Style = vbYesNo + vbQuestion
      Title = "A Améliorer"    ' Définit les titres.
      Answer = MsgBox(msg, Style, Title)
      If Answer = vbYes Then AA ' bouton Oui.(copie une trame dans programme)
      If Answer = vbNo Then MsgBox "ATTENTION ! Case cochée sans feuille crée ! Cela peut créer des erreurs" ' bouton No

    Case 13
      msg2 = "Voulez-vous créer une fiche de constat 'NON-CONFORME' ?" ' Définit le message.
      Style2 = vbYesNo + vbQuestion
      Title2 = "Non-Conforme"    ' Définit les titres.
      Answer2 = MsgBox(msg2, Style2, Title2)
      If Answer2 = vbYes Then trameNC ' bouton Oui. (copie une trame dans programme)
      If Answer2 = vbNo Then Exit Sub ' bouton No
  End Select
End If
End Sub

Bien à vous
 

Discussions similaires

Réponses
2
Affichages
834

Statistiques des forums

Discussions
312 559
Messages
2 089 602
Membres
104 224
dernier inscrit
Brilma