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 :

Erreur 6 overflow pour une variable de type long à 40000 [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 680
    Par défaut Erreur 6 overflow pour une variable de type long à 40000
    Bonjour,

    J'ai un soucis d'overflow que je n'explique pas étant donné que je suis bien loin de limite max théorique du long, surtout que cette partie du code est utilisée sur un ppt et qu'elle y fonctionne parfaitement.

    Je fais une macro pour mettre a jour les liens de mes classeurs excel qui changent tous les mois, ce qui c'est par exemple 042016 -> 052016
    Donc pour ce faire je calcule mois *10000 + année et là erreur overflow ??

    J'ai vérifié au moment de l'erreur mes variables sont bien des long (même avec des variant j'ai le problème), les variables année et mois ont bien les bonnes valeurs.
    Bref je ne vois vraiment pas d'où viens le problème.

    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
    Sub ChgtLiaison()
    Dim strLink As String
    Dim i As Integer
    Dim varLinks As Variant
    Dim strAncien As String
    Dim strNouveau As String
    Dim annee_a As Integer
    Dim mois_a As Integer
    Dim annee_n As Integer
    Dim mois_n As Integer
    Dim val2_a As String
    Dim val2_n As String
    Dim val_a As Long
    Dim val_n As Long
    
    Select Case Month(Date)
    Case 1
        annee_a = Year(Date) - 1
        mois_a = 11
        annee_n = Year(Date) - 1
        mois_n = 12
    Case 2
        annee_a = Year(Date) - 1
        mois_a = 12
        annee_n = Year(Date)
        mois_n = Month(Date) - 1
    Case Else
        annee_a = Year(Date)
        mois_a = Month(Date) - 2
        annee_n = Year(Date)
        mois_n = Month(Date) - 1
    End Select
    val_a = mois_a * 10000 + annee_a
    val_n = mois_n * 10000 + annee_n
    val2_a = mois_a & "_" & annee_a
    val2_n = mois_n & "_" & annee_n
    ' Charge la liste des liaisons dans varLinks
    varLinks = ThisWorkbook.LinkSources
    
     If Not IsEmpty(varLinks) Then
    
         ' Boucle sur la liste des liaisons
    
         For i = 1 To UBound(varLinks)
    
             ' Met le lien à jour.
                    strAncien = varLinks(i)
                    strNouveau = Replace(strAncien, val_a, val_n)
                    strNouveau = Replace(strAncien, val2_a, val2_n)
                    strNouveau = Replace(strNouveau, annee_a, annee_n)
                    MsgBox "ancien: " & varLinks(i) & Chr(10) & "nouveau: " & strNouveau
                    'ThisWorkbook.ChangeLink varLinks(i), strNouveau
    
         Next i
    
     End If
    End Sub
    Merci d'avance pour toute aide que vous pourriez m'aporter

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour,

    • soit vraiment définir toutes les variables en type Long : Dim annee_a&, annee_n&, mois_a&, mois_n&, val_a&, val_n&

    • soit forcer le format Long de la constante au sein du calcul :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    val_a = mois_a * 10000& + annee_a
    val_n = mois_n * 10000& + annee_n
    _________________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

    _________________________________________________________________________________________________________
    Je suis Paris, Charlie, Bruxelles, …

  3. #3
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 680
    Par défaut
    Merci, ça fonctionne.
    Si j'ai bien compris peu importe ce que je met comme type a gauche du =, il calcule int*int dépasse la valeur max de int et donc plante.
    Par contre ce que je ne comprends pas c'est que le même code fonctionne dans une macro vba pour powerpoint.
    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
    Public Sub MaJ_lien()
    Dim objPres As Presentation
    Dim objSld As Slide
    Dim objShp As Shape
    Dim strAncien As String
    Dim strNouveau As String
    Dim annee As Integer
    Dim mois As Integer
    Dim val_a As Long
    Dim val_n As Long
    ' suivant le mois on adapte les variables qui servent a modifier les liens
    Select Case Month(Date)
    Case 1
        annee_a = Year(Date) - 1
        mois_a = 11
        annee_n = Year(Date) - 1
        mois_n = 12
    Case 2
        annee_a = Year(Date) - 1
        mois_a = 12
        annee_n = Year(Date)
        mois_n = Month(Date) - 1
    Case Else
        annee_a = Year(Date)
        mois_a = Month(Date) - 2
        annee_n = Year(Date)
        mois_n = Month(Date) - 1
    End Select
    val_a = mois_a * 10000 + annee_a
    val_n = mois_n * 10000 + annee_n
     
        Set objPres = ActivePresentation
     
        ' parcourt des diapositives de la présentation
        For Each objSld In objPres.Slides
            ' parcourt des formes des diapositives
            For Each objShp In objSld.Shapes
                ' on test si c'est un objet lié
                If objShp.Type = msoLinkedOLEObject Then
                ' si oui on modifie les dates dans le chemin
                    strAncien = objShp.LinkFormat.SourceFullName
                    strNouveau = Replace(strAncien, val_a, val_n)
                    strNouveau = Replace(strNouveau, annee_a, annee_n)
                    objShp.LinkFormat.SourceFullName = strNouveau
                    'MsgBox "ancien: " & strAncien & Chr(10) & "nouveau: " & strNouveau
     
                    'on met à jour les liens
                    objShp.LinkFormat.Update
                End If
            Next objShp
        Next objSld
     
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 25/01/2013, 08h38
  2. Réponses: 1
    Dernier message: 09/09/2011, 16h38
  3. Réponses: 4
    Dernier message: 06/08/2010, 22h13
  4. Découper une variable de type string pour l'inserer a un commentaire
    Par Many31 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 25/01/2008, 13h32
  5. initialiser une variable de type long
    Par obydissonn dans le forum Langage
    Réponses: 2
    Dernier message: 30/05/2006, 17h35

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