Problème à exécuter worksheet change
avrel38
-
pilas31 Messages postés 1878 Statut Contributeur -
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
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:
- Problème à exécuter worksheet change
- Change dns - Guide
- Change qwerty to azerty - Guide
- Facebook piraté et adresse email changé - Guide
- Heure de connexion whatsapp qui ne changé pas - Accueil - WhatsApp
- La recette du nutella a t elle changé - Guide
1 réponse
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 :
A+
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+