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

15naissance-1808.xlsm (36.00 Ko)

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 Range

Quand 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 Function

N'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.

image

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 Sub

Bonne 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

Rechercher des sujets similaires à "debuguer expliquer fichier vba"