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 1004 : erreur definie par l'application ou par l'objet ?!


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2014
    Messages : 7
    Par défaut erreur 1004 : erreur definie par l'application ou par l'objet ?!
    en essayant de compiler ma macro VBA ( qui est une macro remplacer toutes les cellules vides par la cellule précédente non vide ) j'obtiens ce code erreur et j'ai cette ligne de code qui est sousligné pendant le debogage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Case "Valeur précédente"
            For Each cellule In tableinit
              If cellule.Value = "" And IsNumeric(cellule(-1, 1).Value) Then cellule.Value = cellule(-1, 1).Value   'cette ligne est d'après vba non correct
     
             Next cellule
     
    End Select
    j'ai essayé de remplacer le type de cellule mais rien n'y faire c'est toujours pareil ( je rappelle que cellule est un type Range )

  2. #2
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,

    1ère remarque, quand tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ...cellule.Value = cellule(-1, 1).Value...
    la cellule précédente est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cellule.Value = cellule(0, 1).Value
    2ème remarque, quand on remplace ou supprime des lignes, il vaut mieux faire une boucle qui part de la fin de la plage au début

    3ème remarque, je pense qu'il vaut mieux afficher ton code en entier pour mieux cerner le problème
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2014
    Messages : 7
    Par défaut
    merci beaucoup ! donc je devrais plutot refaire une boucle qui démarre du bas?

  4. #4
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    As-tu corrigé en fonction de ma 1ère remarque ?, peux-tu envoyer la procédure complête ?, je pourrai peut-être, je dis bien peut-être répondre plus précisément.
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2014
    Messages : 7
    Par défaut
    alors oui j'ai remplacé la cellule(-1,1) par 0 et effectivement ça corrige le probleme le programme se lance mais je n'obtiens pas exactement ce que je veux encore. voila 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
    Sub Nettoyer(choixnettoyage As String, tableinit As Range)
     
        'On déclare les variables
        Dim cellule As Range
        Dim cellulesup As Range
        Dim celluleinf As Range
        Dim a As Variant
     
    ThisWorkbook.Worksheets("Resultats").Activate
    'L'utilisateur a le choix entre 3 possibilités pour nettoyer les données
    Select Case choixnettoyage
     
    '1er choix : remplacer par 0
        Case "Valeur nulle"
     
            'boucle pour chaque cellule du tableau vide : on remplace par 0
            For Each cellule In tableinit
                    If cellule.Value = "" Then cellule.Value = 0
            Next cellule
     
    '2ème choix : interpoler la valeur entre la précédente et la suivante
    '(qui ne sont pas forcément situées juste au-dessus ou juste en-dessous de la case vide)
        Case "Interpolation"
     
              For Each cellule In tableinit
                    If cellule = "" Then
     
                                'On sélectionne les cellules remplies situées au-dessus et en-desous de la cellule vide
     
                                 Set cellulesup = cellule.End(xlUp)
                                 Set celluleinf = cellule.End(xlDown)
     
     
                                 'on fait une interpolation linéaire à condition que la case supérieure ne soit pas un en-tête. Dans ce cas, on le fixe à la valeur de la cellule inférieure (série constante sur la période).
     
                                 If IsNumeric(cellulesup.Value) Then a = cellulesup.Value Else a = celluleinf.Value
     
                                 cellule.Value = (celluleinf.Value - a) / (celluleinf.Row - cellulesup.Row) * (cellule.Row - cellulesup.Row) + a
     
                    End If
              Next cellule
     
     
     
        Case "Valeur précédente"
            For Each cellule In tableinit
              If cellule.Value = "" And IsNumeric(cellule(0, 1).Value) Then cellule.Value = cellule(0, 1).Value
              cellule = cellule(0, 1)
              Next cellule
     
    End Select
     
    End Sub

  6. #6
    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 heu...
    Bonjour
    je n'est pas tester mais ca ne me parait pas tres orthodoxe cette façon d'écrire
    en effet tu écrit "-1" en dur ce qui correspond a aucune cellule puisque qu'elle commence a 1

    si tu veut obtenir la valeur de la cellule 1 ligne au dessus on utilisera une fonction native VBA"OFFSET"

    essai plutôt ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For Each cellule In tableinit
              If cellule.Value = "" And IsNumeric(cellule.offset(-1, 0).Value) Then cellule.Value = cellule.offset(-1, 0).Value   'cette ligne est d'après vba non correct
     
             Next cellule
    entre les parenthèses le 1 er chiffre correspond au décalage de la ligne et le deuxième correspond au décalage de la colonne

    Au plaisir
    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

  7. #7
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Perso, j'aimerais connaitre quel String représente "choixnettoyage" et quel Range ou quelle plage représente "tableinit"
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  8. #8
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2014
    Messages : 7
    Par défaut
    en fait choixnettoyage represente la valeur de la case dans mon tableur excel à parametrer ( valeur nulle / valeur précèdente / interpolation linéaire )

Discussions similaires

  1. erreur 1004 erreur definie par l'application ou par l'objet
    Par ameliedot dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 31/05/2015, 20h26
  2. erreur 1004 erreur definie par l'application ou par l'objet
    Par mikeo742 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 05/06/2012, 21h32
  3. erreur 1004, erreur definie par l'application ou par l'objet
    Par scons dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 13/02/2008, 21h14
  4. Erreur 1004 définie par l'application ou par l'objet
    Par GreatDeveloperOnizuka dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 05/12/2007, 09h33
  5. Erreur definie par l'application ou par l'objet
    Par sebforever dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/11/2007, 07h50

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