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 :

Utilisation de la Fonction Int() (partie entière)


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 32
    Points : 13
    Points
    13
    Par défaut Utilisation de la Fonction Int() (partie entière)
    Bonjour,

    Je cherche à faire un programme qui regarde les données d'une feuille et recopie ces données dans une autre feuille seulement si les jours correspondent. Comme Dans une des feuilles la date contient aussi l'heure, je veux extraire la partie entière de la date (donc le jour) pour comparer avec l'autre feuille.
    J'ai vu qu'on pouvait utiliser la fonction Int()

    Pour l'instant mon programme donne ça :
    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
    Sub ExtraitPluie()
    Dim i As Integer
    Dim j As Integer
    Dim Jour1 As Integer
    Dim Jour2 As Double
     
    i = 3
    j = 2
    Jour1 = 0
     
    Do
    Do
        Jour2 = Sheets("ExtraitVent").Range("A" & i).Value
        Jour1 = Int(Jour2)
    If Jour1 = Sheets("PluieCol").Range("D" & j).Value Then
        Sheets(ExtraitVent).Range("D" & i).Value = Sheets("PluieCol").Range("E" & j).Value
    End If
    i = i + 1
    Loop
    j = j + 1
    Loop
     
    End Sub
    Cependant, quand je lance la macro cela ne marche pas et le débogueur m'indique un "dépassement de capacité" en surlignant "jour1=Int(Jour2)"...
    Je ne vois vraiment pas ce qui cloche!

    Merci d'avance pour votre aide!

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonjour,

    Existe la fonction Day (voir ton aide en ligne ou F1) et elle te retourne un entier.

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    Bonjour, merci pour ta réponse, j'ai intégré la fonction Day à la place de Int, mais cela me dit toujours "dépassement de capacité", en surlignat cette fois i+1 dans la boucle...

    En fait je ne sais pas ce que "dépassement de capacité" veut dire...

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Citation Envoyé par petiteabeille64 Voir le message
    Bonjour, merci pour ta réponse, j'ai intégré la fonction Day à la place de Int, mais cela me dit toujours "dépassement de capacité", en surlignat cette fois i+1 dans la boucle...

    En fait je ne sais pas ce que "dépassement de capacité" veut dire...
    Combien de lignes as-tu à lire avec i et avec j ?
    Tu as défini i et j comme Integer et ils ont donc la limite d'un entier (voir cette limite dans ton aide en ligne et voir également quelle est la limite d'un Long)

    EDIT : tu devrais par ailleurs lire avec attention cette rédaction de ouskel'n'or :

    http://www.developpez.net/forums/d56...-lutilisation/
    puis indenter ton code et utiliser les balises ad hoc pour le présenter sur ce forum.

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    bonjour,

    j'ai 2200 j et 1200 i.
    Dans l'aide, Long a un maximum de 2 147 483 647 donc ça devrait pas coincer à ce niveau...

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Je ne vois pas de sortie dans tes deux boucles !
    Elles vont donc à l'infini !!! (et même en déclarant i et j en long, ma foi ...)

  7. #7
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    Merci pour ta remarque très judicieuse (j'ai un peu honte d'avoir oublié cette condition sur les boucles...)!
    J'ai donc rajouté un do Until ce qui donne cela :

    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
    Sub ExtraitPluie()
    Dim i As Integer
    Dim j As Integer
    Dim Jour1 As Integer
    Dim Jour2 As Double
     
    i = 3
    j = 2
    Jour1 = 0
     
    Do Until j = 2500
        Do Until i = 2500
        Jour2 = Sheets("ExtraitVent").Range("A" & i).Value
        Jour1 = Day(Jour2)
            If Jour1 = Sheets("PluieCol").Range("D" & j).Value Then
                Sheets(ExtraitVent).Range("D" & i).Value = Sheets("PluieCol").Range("E" & j).Value
            End If
        i = i + 1
        Loop
    j = j + 1
    Loop
     
    End Sub
    Cela ne me met plus demessage d'erreur, par contre ça ne recopie rien...et à la fin de l'exécution, jour1 vaut 30 et jour2 vaut 0 (i et j sont bien égaux à 2500 par contre)
    je suis perdue...

    En tous cas merci pour vos réponses!

  8. #8
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Bonjour,

    peux-tu te mettre dorénavant à utiliser les balises codes pour marquer ton code de manière visuellement correcte ? (pour cela utilise l'icone # au dessus du message et insère ton code entre les 2 balises)

    NB : désolé les modérateurs si je prends cette initiative à votre place, mais voilà déjà quelques messages difficile à lire de notre abeille.

  9. #9
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    Je suppose que maintenant que la fonction Day marche c'est à moi de trouver ce qui ne va pas dans mon code.
    Voici cependant le code balisé (nouveau pour moi dans mes souvenirs les codes se mettaient automatiquement dans un encart de code) Encore désolée

    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
     
    Sub ExtraitPluie()
    Dim i As Integer
    Dim j As Integer
    Dim Jour1 As Integer
    Dim Jour2 As Double
     
    i = 3
    j = 2
    Jour1 = 0
     
    Do Until j = 2500
        Do Until i = 2500
        Jour2 = Sheets("ExtraitVent").Range("A" & i).Value
        Jour1 = Day(Jour2)
        Sheets("ExtraitVent").Range("G" & i).Value = Jour1
            If Jour1 = Day(Sheets("PluieCol").Range("D" & j).Value) Then
                Sheets("ExtraitVent").Range("H" & i).Value = Day(Sheets("PluieCol").Range("D" & j).Value)
                Sheets("ExtraitVent").Range("D" & i).Value = Sheets("PluieCol").Range("E" & j).Value
            End If
        i = i + 1
        Loop
    j = j + 1
    Loop
     
    End Sub

  10. #10
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Citation Envoyé par petiteabeille64 Voir le message
    Je suppose que maintenant que la fonction Day marche c'est à moi de trouver ce qui ne va pas dans mon code.
    [/CODE]
    Pas forcément ! Tu peux demander et recevoir de l'aide sur cette nouvelle question, que tu devrais probablement poser dans une nouvelle discussion, en la détaillant.
    Elle n'a plus rien à voir avec ton premier problème (dépacement de capacité) et toute réponse ici serait inévitablement perdue pour tout forumeur confronté à ton second problème.

Discussions similaires

  1. [XL-2007] Erreur de calcul de la fonction Int() partie entiére d'un Nb en VB
    Par GOLDINGMAROC dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 01/03/2012, 17h31
  2. fonction avec partie entière
    Par KrusK dans le forum Mathématiques
    Réponses: 4
    Dernier message: 15/01/2008, 22h37
  3. débutant:fonction de la partie entière
    Par hachdotnet dans le forum VB.NET
    Réponses: 1
    Dernier message: 01/03/2007, 13h29
  4. de float à int : partie entière automatique ?
    Par stokastik dans le forum C
    Réponses: 16
    Dernier message: 22/08/2006, 16h51
  5. Fonction retournant la partie entière d'un nombre
    Par annedjomo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/11/2004, 15h58

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