Debuguer ou m'expliquer un Fichier avec VBA
Bonjour à tous
j'ai trouvé une formule que j'ai intégrer dans un fichier Execel2007 qui me permet d'effectuer des saisies et de modifier certaine règle mais voilà je ne sais pas pourquoi cela ne fonctionne plus. C'est peut être du au moment ou j'ai supprimé certaine lignes.
Pouvez-vous regarder ce fichier et peut-être corriger des erreurs ou me dire ce que je ne dois faire pour bloquer le Vba inclus
Cordialement
Bonjour
Peux tu nous dire ce qui ne fonctionne plus
Crdlt
je dois partir travailler je te donne les réponses demain
cordialement et merci
Bonjour
Je n'y comprends plus rien car au départ quand je rentrais une saisie en colonne D14 et que je validais le curseur se déplaçait en D15. Hors je viens de tester et ça remarche
Mille excuses, je ne comprends pas
Cordialement
Bonjour Jag8308
Je pense juste que le VBA à beugué ou qu'il était bloqué à l'ouverture, ce qui empêchait le fonctionnement normal du fichier.
Vous avez un évènement
Private Sub Worksheet_Change(ByVal Target As RangeQuand vous avez ce genre de souci, quittez complètement Excel et relancez votre fichier
Le principal, c'est que ça fonctionne de nouveau
Bonjour le fil,
jag8308, Quand vous travaillez avec la propriété Application.EnableEvents, vous devez impérativement mettre une gestion d'erreur qui rebascule la propriété sur 'True' en cas de problème. Sinon Excel reste sur son état 'False' par exemple jusqu’à que vous le basculiez manuellement, ou que vous redémarriez le PC.
Voici votre code avec la gestion d'erreur.
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Catch
Application.EnableEvents = False
Dim lig As Long
Dim col As Long
lig = Target.Row
col = Target.Column
'--- Ne rien faire sur ligne 1 ---
If lig < 2 Then
Application.EnableEvents = True
Exit Sub
End If
'==============================================
' BLOC 1 : Majuscules automatiques
' Se déclenche sur toutes les lignes
' pour les corrections aussi
'==============================================
Select Case col
Case 4, 8, 9, 10, 11, 15, 17
If Target.Value <> "" Then
Target.Value = UCase$(Target.Value)
End If
Case 12, 16, 18
If Target.Value <> "" Then
Target.Value = CapitalizeEachWord(CStr(Target.Value))
End If
End Select
'==============================================
' BLOC 2 : Navigation guidée
' UNIQUEMENT si on saisit en colonne D
' et que la ligne est vide (nouvelle saisie)
'==============================================
Dim typeD As String
typeD = UCase$(Trim$(Me.Cells(lig, 4).Value))
'--- Vérifier si la ligne est nouvelle ---
'--- On regarde si E J K L sont vides ---
Dim ligneVide As Boolean
ligneVide = (Me.Cells(lig, 5).Value = "" And _
Me.Cells(lig, 10).Value = "" And _
Me.Cells(lig, 11).Value = "")
'--- Navigation uniquement si ---
'--- colonne D + ligne vide + valeur L ou N ---
If col = 4 And ligneVide Then
If typeD = "L" Or typeD = "N" Then
Me.Cells(lig, 5).Select
End If
GoTo Finally
End If
'--- Si on est en colonne D mais ligne non vide ---
'--- on laisse le curseur libre ---
If col = 4 And Not ligneVide Then
GoTo Finally
End If
'--- Navigation sur nouvelle ligne uniquement ---
If ligneVide Then
Select Case col
Case 5
Me.Cells(lig, 10).Select
Case 10
Me.Cells(lig, 11).Select
Case 11
If typeD = "L" Then
Me.Cells(lig, 15).Value = UCase$(Target.Value)
End If
Me.Cells(lig, 12).Select
Case 12
Me.Cells(lig, 13).Select
Case 13
If typeD = "L" Then
Me.Cells(lig, 15).Select
ElseIf typeD = "N" Then
Me.Cells(lig, 15).Value = "INCONNU"
Me.Cells(lig, 17).Select
End If
Case 15
If typeD = "L" Then
Me.Cells(lig, 16).Select
End If
Case 16
Me.Cells(lig, 17).Select
Case 17
Me.Cells(lig, 18).Select
Case 18
Me.Cells(lig, 19).Select
Case 19
Me.Cells(lig + 1, 4).Select
End Select
End If
Finally:
Application.EnableEvents = True
Exit Sub
Catch:
If Err.Number > 0 Then
' // Do something.
MsgBox "Oupss... Nous avons rencontré une erreur : " & Err.Number & _
" (" & Err.Description & ") dans la procédure Worksheet_Change du Document VBA Feuil1"
Resume Finally
End If
End Sub
'==============================================
' Fonction majuscule 1ère lettre
' Gère Jean-Paul, Jean-Jacques etc...
'==============================================
Function CapitalizeEachWord(texte As String) As String
Dim mots() As String
Dim i As Long
texte = LCase$(texte)
mots = Split(texte, " ")
For i = 0 To UBound(mots)
Dim mot As String
mot = mots(i)
If InStr(mot, "-") > 0 Then
Dim parties() As String
parties = Split(mot, "-")
Dim j As Long
For j = 0 To UBound(parties)
If Len(parties(j)) > 0 Then
parties(j) = UCase$(Left$(parties(j), 1)) & Mid$(parties(j), 2)
End If
Next j
mots(i) = Join(parties, "-")
Else
If Len(mot) > 0 Then
mots(i) = UCase$(Left$(mot, 1)) & Mid$(mot, 2)
End If
End If
Next i
CapitalizeEachWord = Join(mots, " ")
End FunctionN'oubliez pas non plus de mettre 'Option Explicit' en tête de module, pour être obligé de déclarer vos variables, cela vous évitera quelques déboires supplémentaires.
Concernant la procédure InitialiserFeuille :
Sub InitialiserFeuille()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets(1)Avec ce code si vous déplacez la feuille dans le classeur cela aura des conséquences...Prenez l'habitude de nommer vos feuilles et travaillez plutôt avec leur 'Codename' plus difficile à changer que leurs noms.
Le code pourrait alors devenir :
Option Explicit
Sub InitialiserFeuille()
'--- Activer la feuille ---
If Not ActiveSheet Is sh_Data Then sh_Data.Activate
With sh_Data
'--- Figer les volets sur ligne 1 ---
Application.GoTo .Range("A2"), True
ActiveWindow.FreezePanes = False
ActiveWindow.FreezePanes = True
'--- Préparer la plage colonne F ---
Dim rngF As Range
Set rngF = .Range("F2:F10000")
'--- Supprimer toute validation existante ---
On Error Resume Next
rngF.Validation.Delete
On Error GoTo 0
'--- Ajouter info-bulle colonne F ---
rngF.Validation.Add Type:=xlValidateInputOnly
rngF.Validation.ShowInput = True
rngF.Validation.ShowError = False
rngF.Validation.InputTitle = "Mois"
rngF.Validation.InputMessage = "Gregorien: 1 a 12" & Chr$(10) & _
"VEND BRUM FRIM NIVO" & Chr$(10) & _
"PLUV VENT GERM FLOR" & Chr$(10) & _
"PRAI MESS THER FRUC" & Chr$(10) & _
"COMP"
MsgBox "Initialisation reussie !" & Chr$(10) & _
"- Volets figes sur la ligne 1" & Chr$(10) & _
"- Info-bulle active sur colonne F", vbInformation
End With
End SubBonne programmation.
merci pour la formule Vba mais ce n'est pas moi qu'il la construit je n'y comprend rien.
j'ai un problème dans les déroulement du déplacent du curseur
j'ai saisi L en D le curceur a été en E mais je saisi 21 le curseur ne va pas en J. en principe le chemin est le suivant pour L :
Si D=L alors chemin suivant D / E /J / K / L / M / P / Q / R / S la cellule en O est complété par la saisie K
si D=N alors chemin suivant D / E /J / K / L / M / Q / R / S en effet si D= N inscrit INCONNU dans O et P reste vide
j'espère avoir été simple et que ce soit compréhensible
cordialement
Bonjour jag8308
merci pour la formule Vba mais ce n'est pas moi qu'il la construit je n'y comprend rien.
j'ai un problème dans les déroulement du déplacent du curseur
j'ai saisi L en D le curceur a été en E mais je saisi 21 le curseur ne va pas en J. en principe le chemin est le suivant pour L :
Si D=L alors chemin suivant D / E /J / K / L / M / P / Q / R / S la cellule en O est complété par la saisie K
si D=N alors chemin suivant D / E /J / K / L / M / Q / R / S en effet si D= N inscrit INCONNU dans O et P reste vide
j'espère avoir été simple et que ce soit compréhensible
cordialement
Je pense personnellement que plutôt de dire "je n'y comprends rien", essayez d'apprendre
Si je ne me trompe pas, vous êtes à la retraite, vous avez donc 7jours/7 pour être encore plus sachant
Vous avez des tutos et learning partout aujourd'hui
https://learn.microsoft.com/fr-fr/office/vba/api/excel.worksheet.change
Bonne étude ;-)
Pensez-vous que la programmation en Vba s'apprend facilement. Pour corriger la Vba jointe il va me falloir combien de temps pour corriger les erreurs même si je suis à la retraite. Pour des macros simples cela passe mais du Vba je ne suis pas d'accord avec votre solution.
Cordialement
Bonjour le fil,
jag8308, Pour utiliser le tableau comme cité dans mon exemple vous devez changer le nom de la feuille et le nom du tableau, pour faire cela sélectionnez une cellule du tableau puis sélectionnez l'onglet "Création de tableau" et changez son nom en "vt_Data".
J'ai ajouté une fonction qui vérifie si une des colonnes après jour est remplie (pour les nouvelles lignes) Je pense que l'on doit être bon là (Si j'ai tout compris)