Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    mai 2019
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2019
    Messages : 113
    Points : 43
    Points
    43

    Par défaut Ou mettre "On error Resume next"

    Bonjour,
    Je viens vers vous parce que j'ai un petit soucis, j'ai quelque fois des bugs à cause de mon code VBA , ce qui est normal (je connais l'origine de l'erreur mais je voulais savoir comment faire pour l négligé)
    je voulais donc savoir où ecrire le fameux On error resume next:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    Sub ENT_BET_Traitement()
    Application.ScreenUpdating = False
    Dim TabYes
    Set Ent = Worksheets(fEnt)
    Set Ret = Worksheets(fRetenue)
    Set Amt = Worksheets(fAmt)
    Set Spa = Worksheets(fSuiviPA)
    Set Aor = Worksheets(fAor)
     
    Ent.Activate
    Range("F3").Select
     
    ReDim TabYes(Application.WorksheetFunction.CountIf(Columns("F"), "Oui"), 6)
     
    While Not IsEmpty(ActiveCell.Value)
        Select Case ActiveCell.Value
        Case "Oui"
            n = n + 1
            TabYes(n, 1) = Cells(ActiveCell.Row, 1)
            TabYes(n, 2) = Cells(ActiveCell.Row, 2)
            TabYes(n, 3) = Cells(ActiveCell.Row, 3)
            TabYes(n, 4) = Cells(ActiveCell.Row, 4)
            TabYes(n, 5) = Cells(ActiveCell.Row, 5)
            TabYes(n, 6) = Cells(ActiveCell.Row, 7)
        End Select
        ActiveCell.Offset(1, 0).Select
    Wend
     
    Ret.Activate
    Range("A1").End(xlDown).Offset(1, 0).Select
    For n = 1 To UBound(TabYes, 1)
        Select Case Application.WorksheetFunction.CountIf(Columns("A"), TabYes(n, 1))
        Case Is = 0
            ActiveCell.Value = TabYes(n, 1)
            ActiveCell.Offset(0, 1).Value = TabYes(n, 2)
            ActiveCell.Offset(0, 2).Value = TabYes(n, 3)
            ActiveCell.Offset(0, 3).Value = TabYes(n, 6)
            ActiveCell.Offset(1, 0).Select
        End Select
    Next n
    Cells.Borders.LineStyle = xlNone
    With Range("A1").CurrentRegion
        With .Borders
            .LineStyle = xlContinuous
            .Weight = xlThin
        End With
        .HorizontalAlignment = xlHAlignCenter
        .VerticalAlignment = xlVAlignCenter
    End With
     
    Amt.Activate
    Range("A1").End(xlDown).Offset(1, 0).Select
    For n = 1 To UBound(TabYes, 1)
        Select Case Application.WorksheetFunction.CountIf(Columns("A"), TabYes(n, 1))
        Case Is = 0
            ActiveCell.Value = TabYes(n, 1)
            ActiveCell.Offset(0, 1).Value = TabYes(n, 2)
            ActiveCell.Offset(0, 2).Value = TabYes(n, 3)
            ActiveCell.Offset(1, 0).Select
        End Select
    Next n
    Cells.Borders.LineStyle = xlNone
    With Range("A1").CurrentRegion
        With .Borders
            .LineStyle = xlContinuous
            .Weight = xlThin
        End With
        .HorizontalAlignment = xlHAlignCenter
        .VerticalAlignment = xlVAlignCenter
    End With
     
    End Sub

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    février 2019
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : février 2019
    Messages : 54
    Points : 62
    Points
    62

    Par défaut

    Bonjour

    Cette phrase doit être bannie d'un programme, il faut gérer l'erreur et non la shunté.

    Je faisais cela au début, et un ami m'a montré que c'était une aberration, car tu vas shunté toutes les erreurs et entre autre des nouvelles qui pourraient arriver.

  3. #3
    Expert confirmé Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juillet 2009
    Messages
    2 509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2009
    Messages : 2 509
    Points : 5 115
    Points
    5 115

    Par défaut

    Saut,

    D'accord avec Phiphi .
    Comme dans d'autres domaines, il est dangereux de jouer les autruches.

    Et ce d'autant que le code est loin d'être rigoureux avec ses Select et Activecell.

    La question à se poser est de bien savoir le résultat à obtenir puis d'étudier le processus pour y aboutir.
    Ceci en se penchant au préalable sur le tableur.
    Au vu de ma modeste expérience, 30% des problématiques verraient, avec ce préalable, leur résolution.

    Bien Cordialement.

    Marcel

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.



  4. #4
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    juin 2007
    Messages
    13 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2007
    Messages : 13 053
    Points : 26 695
    Points
    26 695

    Par défaut

    Citation Envoyé par walido78 Voir le message
    j'ai quelque fois des bugs à cause de mon code VBA , ce qui est normal
    C'est un avis que je ne partage pas.

    je connais l'origine de l'erreur
    Si tu nous faisais part de cette information, peut-être serait-il plus facile de te guider.

    je voulais savoir comment faire pour l négligé
    je voulais donc savoir où ecrire le fameux On error resume next:
    D'accord à 100% avec ce qui a été dit : on ne rédige pas un code en mettant la poussière sous le tapis (d'autant plus qu'elle finit toujours par ressortir un jour).

    Donc une anomalie, ça se gère.

    Au pire, dans les cas, extrêmes et s'il n'est vraiment pas possible de faire autrement (personnellement, je n'en ai jamais rencontré), tu mets le On Error Resume Next juste avant la ligne qui va générer le bug et tu mets juste après un On Error Goto 0 pour le désactiver.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  5. #5
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    mai 2019
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2019
    Messages : 113
    Points : 43
    Points
    43

    Par défaut

    Je vous remercie de vos réponses et de vos réactivités !

    L'idée c'est qu'en fait ce code permet de créer une validation de données (liste dans la colonne D) a partir du de la colonne A qui est remplies de cette facon : LOT 1, LOT 2, LOT 3 etc,
    La liste comporte 50 éléements : FTM & Numero du lot & 01....... FTM& numéro du lot &50, donc pour lot 15, on aura FTM1501 ..... FTM1550 .

    Le problème c'est que si on met LOT (un lot sans nombre devant), celui-ci génère une erreur.

  6. #6
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    juin 2007
    Messages
    13 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2007
    Messages : 13 053
    Points : 26 695
    Points
    26 695

    Par défaut

    Citation Envoyé par walido78 Voir le message
    L'idée c'est qu'en fait ce code permet de créer une validation de données (liste dans la colonne D) a partir du de la colonne A qui est remplies de cette facon : LOT 1, LOT 2, LOT 3 etc,
    La liste comporte 50 éléements : FTM & Numero du lot & 01....... FTM& numéro du lot &50, donc pour lot 15, on aura FTM1501 ..... FTM1550 .
    Je ne vois pas le rapport entre cette explication et ton code qui ne contient ni validation de données, ni concaténation, ni aucun des termes que tu cites.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  7. #7
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    mai 2019
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2019
    Messages : 113
    Points : 43
    Points
    43

    Par défaut

    Oups en effet Menhir tu as raison,
    Quelle erreur bête de ma part !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim O As Worksheet 'déclare la variable O (Onglet)
    Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
    Dim I As Integer 'déclare la variable I (Incrément)
    Dim L As String 'déclare la variable L (Liste)
     
    If Target.Column > 1 And Target.Row < 3 Then Exit Sub 'si le changement a lieu
    Set O = Worksheets("AMT")
    TV = Range("A2").CurrentRegion
    For I = 3 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeur TV (en partant de la seconde)
        L = "Acte d'engagement" 'initialise la liste L
        For J = 1 To 50 'boucle de 2 à 50
            L = L & "," & "FTM" & Split(TV(I, 1), " ")(1) & CStr(Format(J, "00")) 'redéfinit la liste L
        Next J 'prochaine valeur de la boucle
        With O.Cells(I, "D").Validation 'prend en compte la validation de donnée dans la cellule ligne I colonne D
            .Delete 'supprime une éventuelle ancienne validation de donnée
            .Add xlValidateList, Formula1:=L 'définit la liste L comme liste de validation de donnée
        End With 'fin de la prose en compte dela validation de donnée dans la cellule ligne I colonne D
    Next I 'prochaine ligne de la boucle
    O.Activate 'Active l'onglet O
    End Sub
    C'est celui-ci

  8. #8
    Membre chevronné Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    août 2014
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : août 2014
    Messages : 1 048
    Points : 1 959
    Points
    1 959

    Par défaut

    Bonjour le fil, bonjour le forum,

    Je fais comme ça d'habitude. Mais je crains que les éminents membre de ce forum qui t'ont déjà répondu, ne trouvent pas ça très bon comme solution. Aussi, j'aimerais beaucoup s'ils repassent, qu'ils corrigent ma proposition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim O As Worksheet 'déclare la variable O (Onglet)
    Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
    Dim I As Integer 'déclare la variable I (Incrément)
    Dim L As String 'déclare la variable L (Liste)
    Dim NL As String 'déclare la variable NL (Numéro de Lot)
    If Target.Column > 1 And Target.Row < 3 Then Exit Sub 'si le changement a lieu
    Set O = Worksheets("AMT")
    TV = Range("A2").CurrentRegion
    For I = 3 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeur TV (en partant de la seconde)
        L = "Acte d'engagement" 'initialise la liste L
        On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
        NL = Split(TV(I, 1), " ")(1) 'définit le numéro de lot NL (génere une erreur s'il n'existe pas)
        If Err <> 0 Then 'condition : si une erreur a été générée
            Err.Clear 'annule l'erreur
            L = "" 'efface la liste L
            GoTo suite 'va a l'étiquette "suite"
        End If 'fin de la condition
        On Error GoTo 0 'annule la gestion des erreurs
        For J = 1 To 50 'boucle de 2 à 50
            L = L & "," & "FTM" & NL & CStr(Format(J, "00")) 'redéfinit la liste L
        Next J 'prochaine valeur de la boucle
        With O.Cells(I, "D").Validation 'prend en compte la validation de donnée dans la cellule ligne I colonne D
            .Delete 'supprime une éventuelle ancienne validation de donnée
            .Add xlValidateList, Formula1:=L 'définit la liste L comme liste de validation de donnée
        End With 'fin de la prose en compte dela validation de donnée dans la cellule ligne I colonne D
    suite: 'étiquette
    Next I 'prochaine ligne de la boucle
    O.Activate 'Active l'onglet O
    End Sub
    À plus,

    Thauthème

    Je suis Charlie

  9. #9
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    mai 2019
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2019
    Messages : 113
    Points : 43
    Points
    43

    Par défaut

    Parfait ça fonctionne, mais j'ai une question, comment fais-ton pour pouvoir avoir la possibilité de remplir autre chose sans avoir d'erreur.
    (Juste générer une alerte avec oui non mais en ayant la possibilité de remplir autre chose que la validation de données

  10. #10
    Membre chevronné Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    août 2014
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : août 2014
    Messages : 1 048
    Points : 1 959
    Points
    1 959

    Par défaut

    Re,

    La validation de données n'accepte que ce qu'on lui a indiqué. Mais comme, dans ton cas, on la crée à la volée on devrait pourvoir la remplacer. Le problème est que tu n'expliques rien. Donne-nous un exemple concret de ce que tu voudrais faire...
    À plus,

    Thauthème

    Je suis Charlie

  11. #11
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    mai 2019
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2019
    Messages : 113
    Points : 43
    Points
    43

    Par défaut

    En gros là j'ai une liste qui commence par acte d'engagement jusqu'a FTM 50, mais je veux eventuellement mettre TSE 13 par exemple, et là du coup on me met erreur restriction validation de données,
    tu vois ce que je veux dire ?

  12. #12
    Membre chevronné Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    août 2014
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : août 2014
    Messages : 1 048
    Points : 1 959
    Points
    1 959

    Par défaut

    Re,

    Oui je vois mais c'est paradoxal !... Tu veux une liste de validation de données (LVD) pour éviter que l'utilisateur n'écrive n'importe quoi puis, tu voudrais pouvoir éditer un texte ne faisant pas partie de la liste... Tu peux toujours en supprimant d'abord la LVD (Sélection puis Effacer / Tout)...
    À plus,

    Thauthème

    Je suis Charlie

  13. #13
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    juin 2007
    Messages
    13 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2007
    Messages : 13 053
    Points : 26 695
    Points
    26 695

    Par défaut

    Citation Envoyé par walido78 Voir le message
    En gros là j'ai une liste qui commence par acte d'engagement jusqu'a FTM 50, mais je veux eventuellement mettre TSE 13 par exemple, et là du coup on me met erreur restriction validation de données,
    tu vois ce que je veux dire ?
    Pas vraiment : quand on met une validation de données, c'est pour empêcher de saisir autre chose que ce qui est permis.
    Si tu veux mettre autre chose, il faut supprimer la validation de données dans la cellule.

    Si tu veux tester ta validation de données avant la saisie du contenant, tu peux utiliser sa propriété Value.
    https://docs.microsoft.com/fr-fr/off...lidation.value
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  14. #14
    Responsable
    Office & Excel

    Avatar de Pierre Fauconnier
    Homme Profil pro
    Formateur et développeur informatique indépendant
    Inscrit en
    novembre 2003
    Messages
    13 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur informatique indépendant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 13 713
    Points : 36 634
    Points
    36 634
    Billets dans le blog
    41

    Par défaut

    Salut.

    Je suis assez d'accord avec Thautheme sur son code gérant l'erreur possible avec On Error Resume Next, dans sa présentation générique. Et il y a bien des cas où il est nécessaire de gérer non pas l'erreur, mais l'exception. Voici l'articulation d'un On Error Resume Next bien construit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    On Error resume next
    ... ' UNE ligne de code
    If Err<>0 then
      ... ' Gestion de l'erreur
      On Error goto 0
    Else ' Eventuellement
      ...
    End If
    ... ' Suite du code éventuelle
    Cette façon de procéder permet d'implémenter le Try/Catch/Finally présent dans d'autres langages. Pour imager ce code, je dirais que tu roules en voiture et le témoin de surchauffe s'allume. Sans On Error, c'est le bug et la voiture s'arrête. Le On Error va permettre de t'arrêter, tu regardes ce qui se passe et tu remets de l'eau (If err <>0 then) puis tu continues ou tu t'arrêtes, en parfaite conscience de ce que tu fais. Tu gères, quoi.

    Tu peux aussi avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      On Error Goto Catch
      ...
      ...
      ...
    Catch:
      If err<>0 then
        ... ' Gestion de l'erreur
      Endif
      ...
      ...

    Il ne faut surtout pas utiliser le code suivant qui ne gère pas l'exception mais qui laisse aller.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    on error resume next
    ... ' une ou plusieurs lignes de code
    On Error Goto 0
    Pour imager le code qui précède, le témoin de surchauffe s'allume, tu t'en fous (on error resume next permet de ne pas buguer). S'il le On Error surfe sur plusieurs lignes, c'est qu'un deuxième témoin s'allume (panne de freins) puis un troisième (témoin d'huile) puis un quatr... BOUM...

    Pour ma part, le code suivant n'entre pas dans les bonnes pratiques car tu as deux sorties de Sub et donc, à moins de redondance de code, tu risques de sortir sans bien nettoyer avant... (Enable Events par remis à True, par exemple, ou un calcul passé en manuel qui n'est pas remis en automatique, ...). Donc pour moi, à proscrire absolument.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub ...()
      On Error Goto Catch
      ...
      ...
      Exit Sub
    Catch:
      ...
      ...
    End Sub

    Attention avec Err.Clear. Cette ligne remet l'erreur à 0 mais ne stoppe pas la gestion des exceptions. Le code suivant affichera "Terminé"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Test()
      Dim a As Long
     
      On Error Resume Next
     
      a = 5 / 0
      Err.Clear
      a = 5 / 0
      MsgBox "Terminé"
    End Sub
    Alors que le code suivant boguera sur la seconde division car On Error Goto 0 stoppe la gestion d'erreurs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Test()
      Dim a As Long
     
      On Error Resume Next
     
      a = 5 / 0
      On Error GoTo 0
      a = 5 / 0
      MsgBox "Terminé"
    End Sub

    Attention également qu'avec On Error Resume Next, si à un moment donné on teste l'erreur, ce sera la dernière survenue qui pourra être gérée, alors qu'il est probablement plus intéressant que ce soit la première...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Test2()
      Dim f As Long
      Dim a As Long
     
      On Error Resume Next
      f = FreeFile
      Open "..." For Input Lock Read As #f ' Erreur 76
      Close f
      a = 5 / 0 ' Erreur 11
      Debug.Print Err.Number ' => 11 car dernière erreur levée dans le bloc Try
    End Sub


    Je rappelle encore une fois que, pour un code non protégé par mot de passe, l'option "Arrêt sur toutes les erreurs" stoppe le code lorsqu'une exception survient, malgré les On Error. On peut donc laisser sans soucis les On Error même en phase de test, et il n'est pas nécessaire de commenter les gestions d'erreurs comme je l'ai déjà lu sur le forum.


    Cela dit, il ne faut pas "programmer par l'erreur", c'est-à-dire qu'il faut prévenir l'exception autant que possible. Par exemple, pour moi, une erreur 11 Division par 0 est une aberration puisque l'on peut tester le diviseur avant la division et gérer proprement le code.

    Par contre, si tu dois ouvrir une connexion, la seule façon de tester si tu peux l'ouvrir, c'est de l'ouvrir et de voir si une exception est levée. Tu dois donc obligatoirement utiliser un On Error... Idem pour ouvrir un fichier, ou le supprimer. Tu peux tester qu'il existe, mais la seule façon de tester si tu peux l'ouvrir ou le supprimer, c'est de l'ouvrir ou de le supprimer et de voir si une erreur survient.

    Je pense que On Error... aurait dû s'appeler On Exception, car il s'agit bien de gérer les exceptions, c'est-à-dire le code que le processeur ne sait pas gérer. Cela ne sert en rien à gérer les erreurs de programmation, de saisie, de traitement. Et cette gestion des exceptions n'est pas banale car elle impose que le processeur interrompe le thread pour passer la patate chaude au gestionnaire d'erreur, qui va remonter la pile des appels jusqu'à trouver une gestion des exceptions. C'est seulement s'il n'en trouve pas que le code s'arrête et qu'on "entre en débogage". C'est donc bien un processus exceptionnel qui n'est pas à manier à la légère, à mon avis.


    En conclusion, il ne s'agit pas de ne jamais mettre une gestion d'erreurs et Il ne faut donc pas la bannir à tout jamais de son code comme j'ai pu le lire, loin de là. Il faut comprendre comment fonctionne la gestion des exceptions pour coder proprement et efficacement. La gestion d'erreur a parfaitement sa place dans un code bien construit, dans des circonstances où elle est justifiée.






    Cela dit, dans ton cas, la gestion de l'erreur n'est pas pertinente. Tu dois coder pour tester ce que tu vas manipuler est correctement formé, existant, ....

    Si tu dois gérer que le lot existe dans la ligne suivante dans un des codes que j'ai vu passer NL = Split(TV(I, 1), " ")(1), teste que ubound(NL) est au moins égal à 1 (Note que Split commence toujours à 0, même avec un Option Base 1). A toi de bien gérer tes lbound et ubound, mais sans passer par une gestion des exceptions => If ubound(nl)>0 then....
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Vous souhaitez rédiger pour DVP? Contactez-moi
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  15. #15
    Responsable
    Office & Excel

    Avatar de Pierre Fauconnier
    Homme Profil pro
    Formateur et développeur informatique indépendant
    Inscrit en
    novembre 2003
    Messages
    13 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur informatique indépendant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 13 713
    Points : 36 634
    Points
    36 634
    Billets dans le blog
    41

    Par défaut

    Pour ce qui est de la validation de données, je rappelle qu'il existe trois niveaux de protection:
    • Stop: Blocage de ce qui ne convient pas;
    • Avertissement: Blocage mais possibilité de passer si on lit bien le message (le focus est sur NON);
    • Information: Blocage mais on passe facilement (le focus est sur OUI).
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Vous souhaitez rédiger pour DVP? Contactez-moi
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  16. #16
    Membre chevronné Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    août 2014
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : août 2014
    Messages : 1 048
    Points : 1 959
    Points
    1 959

    Par défaut

    Bonjour le fil, bonjour le forum,

    Cliquer sur le pouce levé signifie en gros : "j'aime". Mais là, j'aime pas ! Je dis d'abord merci Monsieur Fauconnier et je kiffe grave... (ouais ça fait djeun... Que je ne suis pas d'ailleurs).
    À plus,

    Thauthème

    Je suis Charlie

  17. #17
    Membre émérite
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA
    Inscrit en
    septembre 2005
    Messages
    1 512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA
    Secteur : Industrie

    Informations forums :
    Inscription : septembre 2005
    Messages : 1 512
    Points : 2 750
    Points
    2 750
    Billets dans le blog
    1

    Par défaut

    Citation Envoyé par Pierre Fauconnier Voir le message
    Pour ce qui est de la validation de données, je rappelle qu'il existe trois niveaux de protection:
    • Stop: Blocage de ce qui ne convient pas;
    • Avertissement: Blocage mais possibilité de passer si on lit bien le message (le focus est sur NON);
    • Information: Blocage mais on passe facilement (le focus est sur OUI).
    Et il est aussi possible de passer outre sans blocage ou message quelconque ....

    je pensais pas que c'était possible jusqu'à ce que je le vois au boulot.

    dans liste de validation aller dans l'onglet "alerte erreur" et décocher "Quand les données non valides sont tapées"

    perso j'aime pas mais c'est pour avoir un certain nombre de suggestions sous forme de liste déroulante en ayant la possibilité de taper ce qu'ils veulent

    j'ai bien essayé de leur dire que c'était pas bien (surtout de derrière il y a des graphiques et TCD) mais j'ai failli me faire lyncher du coup je les laisse avec leur truc bizarre
    Ils ne savaient pas que c'était impossible ... du coup ils l'ont fait (Mark Twain)

    n'oubliez pas de si les messages vous aide ou sont pertinents et de mettre quand cela est !

  18. #18
    Responsable
    Office & Excel

    Avatar de Pierre Fauconnier
    Homme Profil pro
    Formateur et développeur informatique indépendant
    Inscrit en
    novembre 2003
    Messages
    13 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur informatique indépendant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 13 713
    Points : 36 634
    Points
    36 634
    Billets dans le blog
    41

    Par défaut

    Salut Igloobel,

    Oui, tu as raison. J'ai oublié de mentionner cette possibilité. Probablement pour les mêmes raisons que celles que tu évoques... Peu d'intérêt à mon avis, et surtout extrêmement casse-gueule dans le cas que tu évoques de graphiques et surtout de TCD en aval de la saisie...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Vous souhaitez rédiger pour DVP? Contactez-moi
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  19. #19
    Responsable
    Office & Excel

    Avatar de Pierre Fauconnier
    Homme Profil pro
    Formateur et développeur informatique indépendant
    Inscrit en
    novembre 2003
    Messages
    13 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur informatique indépendant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 13 713
    Points : 36 634
    Points
    36 634
    Billets dans le blog
    41

    Par défaut

    Citation Envoyé par Thautheme Voir le message
    [...]
    Pas certain d'avoir tout compris de tes propos...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Vous souhaitez rédiger pour DVP? Contactez-moi
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  20. #20
    Membre chevronné Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    août 2014
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : août 2014
    Messages : 1 048
    Points : 1 959
    Points
    1 959

    Par défaut

    Re,

    Je voulais juste dire merci pour la leçon. C'est grâce à des réponses comme les tiennes qu'on progresse. Un simple "j'aime" me paraissait dérisoire...
    À plus,

    Thauthème

    Je suis Charlie

Discussions similaires

  1. On error resume next
    Par nephhh dans le forum C#
    Réponses: 2
    Dernier message: 26/04/2007, 14h00
  2. [VBA Excel] On error resume next
    Par alex_95 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 02/03/2007, 19h20
  3. [VBA-E] On error resum next
    Par Phenx dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/09/2006, 17h27
  4. On Error Resume Next existe il en java??
    Par the_zurg dans le forum Général Java
    Réponses: 9
    Dernier message: 01/06/2006, 22h38
  5. Réponses: 2
    Dernier message: 28/04/2006, 14h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo