IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Macros et VBA Excel Discussion :

Depassement de capacité (val())


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 8
    Par défaut Depassement de capacité (val())
    Bonjour
    Voila j'essaye de faire un programme permettant (entre autre) de verifier pour chaque cellule qu'aucun chiffre ne soit "seul" cad qu'il y ait toujours une lettre collé avant ou apres. J'ai fait ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    For i = 3 To n - 1
    j = 6
    c = Cells(i, j).value
    m = Len(c)
        For l = 1 To m
            d = Mid(c, l, 1)        
            If IsNumeric(d) = True Then
            e = Val(Mid(c, l))
                If c Like "* " & e & " *" = True Or c Like e & " *" = True Or c Like "* " & e = True Or c Like "* 0" & e = True Then
                Cells(i, j).Select
    (Le code n'est pas complet j'ai mis que le passage qui plante)
    Le probleme c'est quand j'arrive a la cellule contenant "ETG6E 1265" a ce moment la j'ai le message "erreur 6 depassement de capacité" (sur la ligne e = Val(Mid(c, l)) )
    Je pense que ca vient du fait qu'il interprete "6E 1265" comme "6^1265" ou quelque chose comme ca mais je n'ai aucune idée de comment regler ce probleme...
    Si vous avez une idée je bloque completement...
    Merci d'avance

  2. #2
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    sans données et le code complet...

    Si c'est le cas, tu peux simplement y rémedier par un if

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub tototototot()
    x = "6E    5"
    MsgBox (Val(x))
    End Sub
    Depassement capa..

    En effet si tu as un chiffre suivi d'un "E" ou "e" il met un exposant 10

    Donc val("6E 1265") = 6 x 10^1265 = 6 et 1265 zéros....

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 8
    Par défaut
    voici le code
    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
    73
    74
    75
     
    Private Sub verif_err_Click()
     
    Dim i As Integer
    Dim j As Integer
    Dim k As Integer
    Dim l As Integer
    Dim m As Integer
    Dim n As Integer
    Dim c As String
    Dim d As String
    Dim e As String
     
    k = 1
    n = 2
    Do
    n = n + 1
    Loop Until Cells(n, 1) = ""
     
     
    For i = 3 To n - 1
    j = 6
     
    c = Cells(i, j).Value
     
        If UCase(c) Like UCase("*bat *") = True Or UCase(c) Like UCase("* etg *") = True Or UCase(c) Like UCase("*appt *") = True _
        Or UCase(c) Like UCase("* bis *") = True Or UCase(c) Like UCase("* ter *") = True Then
                Cells(i, j).Select
            With Selection.Interior
                .Pattern = xlSolid
                .PatternColorIndex = xlAutomatic
                .Color = 255
                .TintAndShade = 0
                .PatternTintAndShade = 0
            End With
                Rows(i & ":" & i).Select
                Selection.Copy
                Sheets("Feuil2").Activate
                Sheets("Feuil2").Rows(k & ":" & k).Select
                ActiveSheet.Paste
                k = k + 1
                Sheets("Feuil1").Activate
        End If
     
    m = Len(c)
        For l = 1 To m
            d = Mid(c, l, 1)
     
            If IsNumeric(d) = True Then
            e = Val(Mid(c, l))
                If c Like "* " & e & " *" = True Or c Like e & " *" = True Or c Like "* " & e = True Or c Like "* 0" & e = True Then
     
                Cells(i, j).Select
            With Selection.Interior
                .Pattern = xlSolid
                .PatternColorIndex = xlAutomatic
                .Color = 255
                .TintAndShade = 0
                .PatternTintAndShade = 0
            End With
                Rows(i & ":" & i).Select
                Selection.Copy
                Sheets("Feuil2").Activate
                Sheets("Feuil2").Rows(k & ":" & k).Select
                ActiveSheet.Paste
                k = k + 1
                Sheets("Feuil1").Activate
                End If
            End If
        Next
    Next
     
    MsgBox ("Verification terminée")
     
    End Sub
    oui c'est bien ce qu'il me semblait !
    Comment je pourrait regler ca avec un if ?

  4. #4
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Je ne sais pas le but de ton programme mais tu dois traiter l'exception à cet endroit en virant le e par exemple ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If IsNumeric(d) = True Then
    If UCase(Mid(Mid(c, l), 2, 1)) = "E" Then

  5. #5
    Membre émérite Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Par défaut
    Bonjour,

    Voila j'essaye de faire un programme permettant (entre autre) de verifier pour chaque cellule qu'aucun chiffre ne soit "seul" cad qu'il y ait toujours une lettre collé avant ou apres
    C'est typiquement le genre de choses qui se traite très bien avec des expressions rationelles. Si tu ne connais pas, voici un tuto très bien. Tu pourras ainsi alléger et clarifier ton code.

    Sinon pour ton problème particulier sur le "e" tu peux faire un très moche mais néanmoins très efficace "replace" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    e = Val(Replace(Mid(c, l),"e","x",compare:=1))

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 8
    Par défaut
    Le probleme c'est que je dois juste verifier ces cellules et pas les modifier...
    Mais la solution de EngueEngue est tres bien sur le principe je vais juste la modifier un peu pour etre sur d'avoir un chiffre apres le E (si c'est une lettre c'est un autre cas...)
    Quant aux expressions regulieres j'ai pas le temps de me plonger dedans ce soir mais merci pour le lien du tuto j'irais y jeter un oeil des que possible Merci beaucoup en tout cas ! Je vous tiens au courant au plus vite

  7. #7
    Membre émérite Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Par défaut
    Pour info le Replace ne modifie pas ta chaine de départ:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Test()
        a = "6E 588"
        v = Val(Replace(a, "e", "x", compare:=1))
        Debug.Print a, v
    End Sub

Discussions similaires

  1. [VBA-E]Depassement de capacité
    Par Elstak dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 16/05/2006, 15h13
  2. probleme de depassement de capacité
    Par el_quincho dans le forum Access
    Réponses: 3
    Dernier message: 19/04/2006, 13h38
  3. probleme de depassement de capacités
    Par el_quincho dans le forum Access
    Réponses: 2
    Dernier message: 07/04/2006, 10h02
  4. [VB6] Hex(Double) - depassement de capacite
    Par SErhio dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 18/05/2005, 17h09
  5. depassement de capacité
    Par jpg dans le forum ASP
    Réponses: 2
    Dernier message: 19/08/2004, 18h26

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