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

XL 2016 Optimiser code VBA

MickaeL_D

XLDnaute Junior
Bonjour à tous les experts,

J'aimerai simplifier la ligne ci-dessous :

VB:
Loop Until (Not .Offset(0, -4).Value = "" And Not .Offset(0, -4).Value = "FAUX" And Not .Offset(0, -4).Value = " " And Not .Offset(0, -4).Value = "  " And Not .Offset(0, -4).Value = "." And Not .Offset(0, -4).Value = "..") Or (.Value >= Range("E30").Value And .Value <= Range("G30").Value)

L'objectif étant d'empêcher les utilisateurs de laisser l'Inputbox vide ou de la contourner via un ou plusieurs "espace" et/ou "point".

Issue du code ci-dessous (créer à l'aide d'experts Excel-download).

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Cellule_en_Cours As Range
    If Not Intersect(Target, Range("F34:H999")) Is Nothing Then
        For Each Cellule_en_Cours In Intersect(Target, Range("F34:H999"))
            If Not (Range("F" & Cellule_en_Cours.Row) = "" Or Range("G" & Cellule_en_Cours.Row) = "" Or Range("H" & Cellule_en_Cours.Row) = "") Then
                With Range("AN" & Cellule_en_Cours.Row)
                    If (Not .Value = "" And (.Value < Range("E30").Value Or .Value > Range("G30").Value)) Or Not .Offset(0, -4).Value = "" Then
                        Do
                        ActiveSheet.Unprotect ("2230")
                            .Offset(0, -4).Value = InputBox(Prompt:="ATTENTION :" & Chr(13) & Chr(10) & "Valeur non-conforme" & Chr(13) & Chr(10) & "Un commentaire est requis")
                        ActiveSheet.Protect ("2230")
                        Loop Until (Not .Offset(0, -4).Value = "" And Not .Offset(0, -4).Value = "FAUX" And Not .Offset(0, -4).Value = " " And Not .Offset(0, -4).Value = "  " And Not .Offset(0, -4).Value = "." And Not .Offset(0, -4).Value = "..") Or (.Value >= Range("E30").Value And .Value <= Range("G30").Value)
                    End If
                End With
            End If
        Next Cellule_en_Cours
    End If
    If Not Intersect(Target, Range("I34:K999")) Is Nothing Then
        For Each Cellule_en_Cours In Intersect(Target, Range("I34:K999"))
            If Not (Range("I" & Cellule_en_Cours.Row) = "" Or Range("J" & Cellule_en_Cours.Row) = "" Or Range("K" & Cellule_en_Cours.Row) = "") Then
                With Range("AO" & Cellule_en_Cours.Row)
                    If (Not .Value = "" And (.Value < Range("E30").Value Or .Value > Range("G30").Value)) Or Not .Offset(0, -5).Value = "" Then
                        Do
                        ActiveSheet.Unprotect ("2230")
                            .Offset(0, -5).Value = InputBox(Prompt:="ATTENTION :" & Chr(13) & Chr(10) & "Valeur non-conforme" & Chr(13) & Chr(10) & "Un commentaire est requis")
                        ActiveSheet.Protect ("2230")
                        Loop Until (Not .Offset(0, -5).Value = "" And Not .Offset(0, -5).Value = "FAUX" And Not .Offset(0, -5).Value = " " And Not .Offset(0, -5).Value = "  " And Not .Offset(0, -5).Value = "." And Not .Offset(0, -5).Value = "..") Or (.Value >= Range("E30").Value And .Value <= Range("AC3").Value)
                    End If
                End With
            End If
        Next Cellule_en_Cours
    End If
End Sub

Merci d'avance,
 

herve62

XLDnaute Barbatruc
Supporter XLD
Bonsoir
Déjà , pourquoi ne pas affecter une variable à l'inputBox puis la traiter ?? style ( là je sais pas ) if is ( or not) numeric ...etc
deb:
Reponse= inputbox .......
If isnumeric(reponse) then
....
si faux > goto deb
Ce n'est qu'un exemple , on ne connait pas le Type de réponse attendue
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…