Problème à exécuter worksheet change

avrel38 -  
pilas31 Messages postés 1878 Statut Contributeur -
Bonjour,
je suis actuellement en stage et je dois effectuer un programme sous visual basic.
j'explique mon problème:
j'ai une base de données sous excel certain champs doivent s'écrire en automatique, d'autre doivent être vérouillés...
j'ai écris un mini programme et je veux l'apliquer à l'ensemble de mes lignes d'enregistrement à partir de la ligne 6
je veux que quand je modifie quelque chose dans une case ça exécute le reste du programme simultanément.
par exemple j'ai vérouillé la premier case pour que la saisie qu'on ni fait soit de longeur 6 avec pour commencer 4 chiffres et pour finir 2 lettres si c'est le cas il m'inscrira la date du jour de la saisie dans une autre case sinon il m'informera par un point d'intérogation que ma saisie est mauvaise...
pour que mon petit programme s'execute quelque soit la ligne j'ai fait une boucle avec un tant que mais rien ne marche!!!j'ai même essayé d'imbriquer des si selon la colonne où on se trouve mais rien n'y fait!
je veux que mon programme permette que quand je saisisse le contrôle se fait automatiquement et très rapidement quelque soit la ligne traité.
voici mon programme si quelqu'un peut m'aider merci:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Myvar As String 'sous chaine1: partie numérique de la chaine XS
Dim Mycheck As Boolean 'vérification que la sous chaine1 est bien numérique
Dim Mycharacter As String 'sous chaine2: partie charactrere de la chaine XS
Dim Mycheckc As Boolean 'vérivication que la sous chaine2 ne contien que des characteres
Dim C1 As String 'sous chaine2: partie charactrere de la chaine XS
Dim PC1 As Boolean 'vérivication que la sous chaine2 ne contien que des characteres
Dim E As String 'charactere espace
Dim XS1 As String 'chaine de characteres dans la cellule 1
Dim XS As String 'chaine de characteres dans la cellule 1 en majuscule
Dim XS2 As String 'chaine de caracteres dans la cellule 3
Dim XS3 As String 'chaine de characteres dans la cellule 3 en majuscule
Dim XP As Integer 'position du charactere
Dim XL As Integer 'longueur à extraire
Dim ILIG As Integer 'N° de la ligne
Dim ICOL As Integer 'N° de la colonne

ILIG = 6
ICOL = 1
While Cells(ILIG, 1) <> ""

If ICOL = 1 Then
XS1 = Cells(ILIG, 1)
XS = UCase(XS1)
XP = 1
Myvar = Mid(XS, XP, 4)
Mycheck = IsNumeric(Myvar)
Mycharacter = Mid(XS, 5, 2)
Mycheckc = IsNumeric(Mycharacter)
XS2 = Cells(ILIG, 3)
XS3 = UCase(XS2)
C1 = Mid(XS3, 1, 1)
PC1 = IsNumeric(C1)
E = Mid(XS3, 7, 1)

If (Len(XS) = 6 And (Mycheck = True And Mycheckc = False)) Then

Cells(ILIG, 1) = XS
Cells(ILIG, 5) = Now
If (Mycharacter = "BT" Or Mycharacter = "RB") Then
Cells(ILIG, 2) = "C/C"
End If
Else
Cells(ILIG, 1) = "??"
Cells(ILIG, 5) = "??"
End If
Else
If ICOL = 3 Then
If (Len(XS3) = 9 And E = " " And PC1 = False) Or XS2 = "divers" Then
Cells(ILIG, 3) = XS3
Else
Cells(ILIG, 3) = "?"
End If
Else
If Cells(ILIG, 17) <> "?" And Cells(ILIG, 17) <> "" Then
Cells(ILIG, 18) = Now
End If
End If
End If

ILIG = ILIG + 1
Wend
End Sub
A voir également:

1 réponse

pilas31 Messages postés 1878 Statut Contributeur 647
 
Bonjour,

J'ai essayé de remettre le programme dans l'ordre. Selon moi il y avait 3 problèmes :
1/ il faut utiliser le numéro de ligne et le numéro de colonne de la cellule qui vient d'être modifiée, il ne me semble pas utile de boucler sur toutes les lignes à chaque fois.
2/ J'ai remis des morceaux de code dans l'ordre
3/ Ne pas oublier que dés que l'on modifie une cellule dans la macro elle-même elle se ré-exécute. Par exemple dés qu'on met la valeur "DIVERS" la macro est rappelée et la deuxième fois elle mettait "?"

Voilà le cœur de la macro modifiée :

ILIG = Target.Row
ICOL = Target.Column
If Cells(ILIG, 1) <> "" Then
    If ICOL = 1 Then
        XS1 = Cells(ILIG, 1)
        XS = UCase(XS1)
        XP = 1
        Myvar = Mid(XS, XP, 4)
        Mycheck = IsNumeric(Myvar)
        Mycharacter = Mid(XS, 5, 2)
        Mycheckc = IsNumeric(Mycharacter)
        If (Len(XS) = 6 And (Mycheck = True And Mycheckc = False)) Then
            Cells(ILIG, 1) = XS
            Cells(ILIG, 5) = Now
            If (Mycharacter = "BT" Or Mycharacter = "RB") Then
                Cells(ILIG, 2) = "C/C"
            End If
        Else
            Cells(ILIG, 1) = "??"
            Cells(ILIG, 5) = "??"
        End If
    Else
        If ICOL = 3 Then
            XS2 = Cells(ILIG, 3)
            XS3 = UCase(XS2)
            C1 = Mid(XS3, 1, 1)
            PC1 = IsNumeric(C1)
            E = Mid(XS3, 7, 1)
            If (Len(XS3) = 9 And E = " " And PC1 = False) Or XS2 = "divers" Or XS2 = "DIVERS" Then
                Cells(ILIG, 3) = XS3
            Else
                Cells(ILIG, 3) = "?"
            End If
        Else
            If Cells(ILIG, 17) <> "?" And Cells(ILIG, 17) <> "" Then
                Cells(ILIG, 18) = Now
            End If
        End If
    End If
    ILIG = ILIG + 1
End If


A+
0