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 :

VBA erreur 1004


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2015
    Messages : 15
    Par défaut VBA erreur 1004
    Bonjour à tous,

    J'ai écrit une macro pour mon travail mais je rencontre une erreur 1004 lorsque je la lance. J'ai beau cherché je ne vois pas d'où vient le problème :

    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    Sub Test()
     
    Dim DernLigne, i As Long
    Dim Day1, Month1, Year1, Day, Day2, Month2, Year2, Minute1, Hour1, Minute2, Hour2, Time As Long
     
    DernLigne = ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row
     
    For i = 3 To DernLigne
     
        If ActiveSheet.Range(Cells(i, 2)).Value = "OCCUPATION" Then
     
            j = i - 1
     
            If ActiveSheet.Range(Cells(j, 2)).Value = "LIBERATION" Then
     
                Day1 = Left(Hi, 2)
                Month1 = Right(Left(Hi, 5), 2)
                Year1 = Right(Left(Hi, 10), 4)
     
                Minute1 = Left(Right(Hi, 5), 2)
                Hour1 = Left(Right(Hi, 8), 2)
     
                Day2 = Left(Hj, 2)
                Month2 = Right(Left(Hj, 5), 2)
                Year2 = Right(Left(Hj, 10), 4)
     
                Minute2 = Left(Right(Hj, 5), 2)
                Hour2 = Left(Right(Hj, 8), 2)
     
                    If Month1 = Month2 Then
     
                    Day = Day2 - Day1
     
                        If Day = 0 Then
     
                        Time = ((60 - Minute1) + ((Hour2 - Hour1) * 60) + Minute2) / 60
                        ActiveSheet.Cells(Ii).Value = Time
     
                        ElseIf Day = 1 Then
     
                        Time = ((60 - Minute1) + ((24 - Hour1) * 60) + (Hour2 * 60) + Minute2) / 60
                        ActiveSheet.Cells(Ii).Value = Time
     
                        Else
     
                        Time = ((Day - 1) * 24) + ((60 - Minute1) + ((24 - Hour1) * 60) + (Hour2 * 60) + Minute2) / 60
                        ActiveSheet.Cells(Ii).Value = Time
     
                        End If
     
                    ElseIf Month1 = 1 Or Month1 = 3 Or Month1 = 5 Or Month1 = 7 Or Month1 = 8 Or Month1 = 10 Or Month1 = 12 Then
     
                    Day = Day2 + 31 - Day1
     
                        If Day = 1 Then
     
                        Time = ((60 - Minute1) + ((24 - Hour1) * 60) + (Hour2 * 60) + Minute2) / 60
                        ActiveSheet.Cells(Ii).Value = Time
     
                        Else
     
                        Time = ((Day - 1) * 24) + ((60 - Minute1) + ((24 - Hour1) * 60) + (Hour2 * 60) + Minute2) / 60
                        ActiveSheet.Cells(Ii).Value = Time
     
                        End If
     
                    ElseIf Month1 = 4 Or Month1 = 6 Or Month1 = 9 Or Month1 = 11 Then
     
                    Day = Day2 + 30 - Day1
     
                        If Day = 1 Then
     
                        Time = ((60 - Minute1) + ((24 - Hour1) * 60) + (Hour2 * 60) + Minute2) / 60
                        ActiveSheet.Cells(Ii).Value = Time
     
                        Else
     
                        Time = ((Day - 1) * 24) + ((60 - Minute1) + ((24 - Hour1) * 60) + (Hour2 * 60) + Minute2) / 60
                        ActiveSheet.Cells(Ii).Value = Time
     
                        End If
     
                    ElseIf Month1 = 2 Then
     
                    Day = Day2 + 28 - Day1
     
                        If Day = 1 Then
     
                        Time = ((60 - Minute1) + ((24 - Hour1) * 60) + (Hour2 * 60) + Minute2) / 60
                        ActiveSheet.Cells(Ii).Value = Time
     
                        Else
     
                        Time = ((Day - 1) * 24) + ((60 - Minute1) + ((24 - Hour1) * 60) + (Hour2 * 60) + Minute2) / 60
                        ActiveSheet.Cells(Ii).Value = Time
     
                        End If
     
                    End If
     
                Else
     
                End If
     
        Else
     
        End If
     
    Next i
     
    End Sub
    Est-ce que quelqu'un peut me dire ce qui cloche dans mon code svp ?

    MERCI à tous par avance !

    Cdt.

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour
    ben oui d'apres toi hi c'est quoi ???????????????
    tel qu'il est dans ce tte ligne de code code c'est un variant puisque pas declaré
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Month1 = Right(Left(Hi, 5), 2)
    remplace tout tes "hi" par "range("H" & i)" ca marchera mieux certainement


    je rajouterais qu'il serait judicieux de preciser le sheets sur le quel les les données sont sensées etre
    donc remplace tout tes "hi" par sheets("toto").range("H" & i)'change le nom toto bien sur

    pour en simplifier l'ecriture tu peux mettre cela dans un bloc with/endwith bien sur
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2015
    Messages : 15
    Par défaut
    Bonjour Patrick et merci pour ta contribution. Je suis vraiment bête pour pas avoir remarqué ce point, j'ai changé comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      Day1 = Left(ActiveSheet.Range("H" & i), 2)
                Month1 = Right(Left(ActiveSheet.Range("H" & i), 5), 2)
                Year1 = Right(Left(ActiveSheet.Range("H" & i), 10), 4)
     
                Minute1 = Left(Right(ActiveSheet.Range("H" & i), 5), 2)
                Hour1 = Left(Right(ActiveSheet.Range("H" & i), 8), 2)
     
                Day2 = Left(ActiveSheet.Range("H" & j), 2)
                Month2 = Right(Left(ActiveSheet.Range("H" & j), 5), 2)
                Year2 = Right(Left(ActiveSheet.Range("H" & j), 1), 4)
     
                Minute2 = Left(Right(ActiveSheet.Range("H" & j), 5), 2)
                Hour2 = Left(Right(ActiveSheet.Range("H" & j), 8), 2)
    Sinon j'ai toujours la même erreur et le débogage m'indique cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        If ActiveSheet.Range(Cells(i, 2)).Value = "OCCUPATION" Then
    Il y a un soucis selon toi ? La syntaxe me semble bonne.

    Merci !

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ActiveSheet.Cells(i, 2).Value = "OCCUPATION" Then
    Note que ActiveSheet est superflu. Sans les préfixer d'une feuille, Range(...) et Cells(...) pointent toujours vers la feuille active.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    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 : 16 037
    Par défaut
    Encore plus simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Cells(i, 2).Value = "OCCUPATION" Then

Discussions similaires

  1. Formule EXCEL en VBA erreur 1004
    Par svetlan dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/11/2012, 16h36
  2. Formule EXCEL en VBA erreur 1004
    Par svetlan dans le forum VBScript
    Réponses: 0
    Dernier message: 28/11/2012, 09h51
  3. VB6 - copier/coller entre 2 appli ayant VBA - erreur 1004
    Par thomaz dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 01/10/2012, 16h47
  4. [XL-2003] [VBA] Erreur 1004 - Delete Classe range
    Par mirmoleboss dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 29/07/2011, 16h53
  5. VBA erreur 1004
    Par serar dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 11/04/2008, 09h31

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