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

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juin 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Juin 2014
    Messages : 21
    Par défaut vba erreur 1004
    bonjour à tous, je suis nouveau en VBA et je tombe sur une erreur qui me surpasse

    J'ai des maccro qui réalise différentes action en fonction de commande.
    celle ci contienne la fonction find
    ceci fonctionne très bien

    j’intègre une nouvelle maccro qui se déclenche à l'activation d'une page (cette maccro contien un find aussi) et voila que soudainement, une erreur 1004 s'affiche sur la commande find de cette maccro mais aussi sur toutes celles des autre maccro.
    J'ai ouvert des anciens fichier sauvegardés qui fonctionnaient très bien, je fais un test, les maccros et fonction find fonctionne toujours, j’insère ma nouvelle maccro, le programme bloque sur la fonction find.

    Il n'y bien qu'un seul fichier excel ouvert, j'avoue que je ne comprend vraiment pas pourquoi.
    j'avais tester pas à pas la maccro avant d’insérer les sous programme recherche et inclure et elle fonctionnait.

    voici la maccro inseré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
    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
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
     Option Explicit
    Dim celdepartphase, celdepartoption As Range
    Dim mserror, existe, feuille As String
    Dim nbligne, i, niveau, nb As Integer
    Dim tc, toe As Long
     
    Private Sub Worksheet_Activate()
     
     
    Application.ScreenUpdating = False
     
    'Sheets("Suivi financier cout reel").Activate
     
    Set celdepartphase = Sheets("Suivi financier cout reel").Range("b4:z1000").Cells.Find("COUTS DE BASE")
    Set celdepartphase = celdepartphase.Offset(0, -1)
    Set celdepartphase = celdepartphase.Offset(3, 0)
    Set celdepartoption = Sheets("Suivi financier cout reel").Range("b4:z1000").Cells.Find("OPTIONS CONTRACTUELLES")
    Set celdepartoption = celdepartoption.Offset(0, -1)
    Set celdepartoption = celdepartoption.Offset(3, 0)
     
    tc = Sheets("Paramétrage").Range("e27").Value
    toe = Sheets("Paramétrage").Range("e21").Value
     
     
    For i = 0 To 10000
        If celdepartphase.Offset(i, 7) = "" Then
            Exit For
        Else: nbligne = nbligne + 1
        End If
    Next i
     
    For i = 0 To 10000
        If celdepartoption.Offset(i, 7) = "" Then
            Exit For
        Else: nbligne = nbligne + 1
        End If
    Next i
     
    nbligne = nbligne + 4
     
    For i = 0 To nbligne
    mserror = ""
    If celdepartphase.Offset(i, 1) Like "*total*" Then
        If celdepartphase.Offset(i, 7).Value < celdepartphase.Offset(i, 8).Value Then
            mserror = "valeur saisie de la commande " & celdepartphase.Offset(i - 1, 2).Value & " est superieur au montant notifié"
            niveau = 3
            feuille = "Suivi financier cout reel"
        Else:
            If celdepartphase.Offset(i, 7).Value - celdepartphase.Offset(i, 7).Value * tc / 100 < celdepartphase.Offset(i, 8).Value Then
            mserror = "valeur saisie de la commande " & celdepartphase.Offset(i - 1, 2).Value & " est bientot superieur arrive au montant notifié"
            niveau = 46
            feuille = "Suivi financier cout reel"
            Else: GoTo 1
            End If
        End If
    Else:
        If celdepartphase.Offset(i, 3) Like "*total*" Then
            If celdepartphase.Offset(i, 7).Value < celdepartphase.Offset(i, 8).Value Then
                mserror = "valeur saisie " & celdepartphase.Offset(i, 3) & "de la commande " & celdepartphase.Offset(i - 1, 2).Value & " est superieur au montant notifié"
                niveau = 3
                feuille = "Suivi financier cout reel"
            Else:
                If celdepartphase.Offset(i, 7).Value - celdepartphase.Offset(i, 7).Value * toe / 100 < celdepartphase.Offset(i, 8).Value - Sheets("Paramétrage").Range("e21").Value Then
                    mserror = "valeur saisie " & celdepartphase.Offset(i, 3) & "  de la commande " & celdepartphase.Offset(i - 1, 2).Value & " est bientot superieur montant notifié"
                    niveau = 46
                    feuille = "Suivi financier cout reel"
                Else: GoTo 1
                End If
            End If
        Else: GoTo 1
        End If
    End If
     
    If mserror <> "" Then
    recherche
    inclure
    End If
     
    1: Next i
     
     
     
    Application.ScreenUpdating = True
     
     
    End Sub
    Sub recherche()
    nb = 0
    existe = ""
    Sheets("Alertes").Activate
    For i = 0 To 10000
    If Range("b8").Offset(i).Value = "" Then
    Exit For
    Else: nb = nb + 1
    End If
    Next i
     
    For i = 0 To nb
    If Range("d8").Offset(i).Value = mserror Then
    Exit For
    Else: existe = "non"
    End If
    Next i
     
    End Sub
     
    Sub inclure()
    Sheets("alertes").Activate
    If existe = "non" Then
    Rows("8:8").Insert
    With Range("b8")
        .Value = Format(Date, "dd/mm/yyyy")
        .Borders.Weight = xlThin
        .Interior.ColorIndex = 2
        .Font.Size = 12
        End With
    With Range("c8")
        .Value = feuille
        .Borders.Weight = xlThin
        .Interior.ColorIndex = 2
        .Font.Size = 12
        End With
    With Range("d8")
        .Value = mserror
        .Borders.Weight = xlThin
        .Interior.ColorIndex = 2
        .Font.Size = 12
        End With
    Range("e8").Font.ColorIndex = niveau
    With Range("f8")
        .Value = "non traité"
        .Borders.Weight = xlThin
        .Interior.ColorIndex = 2
        .Font.Size = 12
        End With
    End If
    End Sub
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
     
     
    End Sub


    si vous avez des pistes de recherche je suis preneur.

    a bientot

    yann

  2. #2
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour yann26


    Déjà remplace la ligne suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Value = Format(Date, "dd/mm/yyyy")
    par

    car la date en VBA doit être de type DATE et non de type STRING, sinon la date n'est pas la bonne date car interprétée par VBA comme une date au format américain, ce qui inverse le jour et le mois si le jour est entre 1 et 12.

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    C'est dû au fait que tu ne contrôle pas si la recherche a aboutie ou pas ! Il te faut vérifier si la cellule contenant la valeur cherchée a été trouvée avec "Nothing" et ensuite tu peux travailler avec :
    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
     
    Set celdepartphase = Sheets("Suivi financier cout reel").Range("b4:z1000").Cells.Find("COUTS DE BASE")
     
    If celdepartphase Is Nothing Then
     
        MsgBox "Pas trouvée 'COUTS DE BASE' !"
        Exit Sub
     
    Else
     
        Set celdepartphase = celdepartphase.Offset(3, -1)
     
    End If
     
    Set celdepartoption = Sheets("Suivi financier cout reel").Range("b4:z1000").Cells.Find("OPTIONS CONTRACTUELLES")
     
    If celdepartoption Is Nothing Then
     
        MsgBox "Pas trouvée 'OPTIONS CONTRACTUELLES' !"
        Exit Sub
     
    Else
     
        Set celdepartoption = celdepartoption.Offset(3, -1)
     
    End If
    Evite cette forme de déclaration de variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim celdepartphase, celdepartoption As Range
    car dans ce cas-ci "celdepartphase" est déclaré 'Variant' et non 'Range' alors que "celdepartoption" est bien déclaré 'Range' donc Objet.

    Hervé.

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