Excel erreur 1004

Bonjour,

Pour le boulot, je doit faire un fichier sur Excel qui me permette d'attribuer un numéro à des factures, au fur et à mesure que je les rentre.

Je suis novice en macro et en VB, je suis sur Excel 2003 et j'ai recopié (à la main) une macro d'un autre fichier que j'avais.
Mon problème est le suivant :
"erreur 1004
La méthode Sort de la classe range a échoué".


Je ne sais pas trés bien à quoi cela correspond...

Pouvez-vous m'aider ?

Voici la macro :
Sub CréationNuméro()
'
'ActiveSheet.Unprotect
Range("C8").Select
Range(Range("C8" & ActiveCell.Row), Range("IV" & ActiveCell.Row).End(xlToLeft)).Select
'Entrée des données
Range("D4").Select
Destinataire = ActiveCell.Value
'
Range("E4").Select
TypeDoc = ActiveCell.Value
'
Range("F4").Select
Intitulé = ActiveCell.Value
'
Range("G4").Select
Auteur = ActiveCell.Value
'
Range("H4").Select
Somme = ActiveCell.Value
'
If (Destinataire = "" Or TypeDoc = "" Or Intitulé = "" Or Auteur = "" Or Somme = "") Then GoTo Fin
'Insertion d 'une ligne
Rows("8:8").Select
Selection.Copy
Selection.Insert Shift:=xlDown
Range("B8:K8").Select
Application.CutCopyMode = False
Selection.ClearContents
'Renseignement des valeurs
Range("B8").Select
ActiveCell.FormulaR1C1 = Date
'
Range("C9").Select
Chrono = ActiveCell.Value
Range("C8").Select
ActiveCell.FormulaR1C1 = Chrono + 1
'
Range("D8").Select
ActiveCell.FormulaR1C1 = Destinataire
'
Range("E8").Select
ActiveCell.FormulaR1C1 = TypeDoc
'
Range("F8").Select
ActiveCell.FormulaR1C1 = Intitulé
'
Range("G8").Select
ActiveCell.FormulaR1C1 = Auteur
'
Range("H8").Select
ActiveCell.FormulaR1C1 = Somme
'
Range("D4:H4").Select
Selection.ClearContents
'
Fin:
'
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
'
End Sub

MERCI !
Configuration: Windows XP
Internet Explorer 6.0
Excel 2003

9 réponses

  1. Contributeur
    bonjour

    comment redefinir ses cellules (variable)
    Ta question ne me permet pas de te répondre car tu utilises des cellules nommées

    Mets ton fichier sur : https://www.cjoint.com/

    Puis tu nous mets ici le lien généré.
    2
    1. c'est fait merci d'avance, pour le mot de passe du code ax21
      j'epère que vous allez resoudre le problème.
      0
    2. Contributeur
      @mamouPuis tu nous mets ici le lien généré
      0
    3. @eriiicje n' ai pas compris ta demande eric.
      0
    4. Contributeur
      @mamouC'est lourd les gens à qui il faut faire la lecture....
      Post 10 :
      Mets ton fichier sur : https://www.cjoint.com/
      Puis tu nous mets ici le lien généré.
      0
  2. bjr

    tu ne peux ajouter une ligne ,si ta feuille est protégée, voila pourquoi tu as cette erreur
    il faut donc deprotèger avant ta procédure et proteger en fin de procédure

    Sub CréationNuméro()
    '
    ActiveSheet.Unprotect 'deprotection ici
    Range("C8").Select
    Range(Range("C8" & ActiveCell.Row), Range("IV" & ActiveCell.Row).End(xlToLeft)).Select
    'Entrée des données
    Range("D4").Select
    Destinataire = ActiveCell.Value
    '
    Range("E4").Select
    TypeDoc = ActiveCell.Value
    '
    Range("F4").Select
    Intitulé = ActiveCell.Value
    '
    Range("G4").Select
    Auteur = ActiveCell.Value
    '
    Range("H4").Select
    Somme = ActiveCell.Value
    '
    If (Destinataire = "" Or TypeDoc = "" Or Intitulé = "" Or Auteur = "" Or Somme = "") Then GoTo Fin
    'Insertion d 'une ligne
    Rows("8:8").Select
    Selection.Copy
    Selection.Insert Shift:=xlDown
    Range("B8:K8").Select
    Application.CutCopyMode = False
    Selection.ClearContents
    'Renseignement des valeurs
    Range("B8").Select
    ActiveCell.FormulaR1C1 = Date
    '
    Range("C9").Select
    Chrono = ActiveCell.Value
    Range("C8").Select
    ActiveCell.FormulaR1C1 = Chrono + 1
    '
    Range("D8").Select
    ActiveCell.FormulaR1C1 = Destinataire
    '
    Range("E8").Select
    ActiveCell.FormulaR1C1 = TypeDoc
    '
    Range("F8").Select
    ActiveCell.FormulaR1C1 = Intitulé
    '
    Range("G8").Select
    ActiveCell.FormulaR1C1 = Auteur
    '
    Range("H8").Select
    ActiveCell.FormulaR1C1 = Somme
    '
    Range("D4:H4").Select
    Selection.ClearContents
    '
    Fin:
    '
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True 'protection ici

    '
    End Sub
    2
    1. Contributeur
      bonjour

      Comment faire en sorte que ma cellule contenant le numéro chrono soit de format "texte" ? Est-ce possible ?


      C'est possible, il suffit de transformer la valeur texte en numérique lorsque l'on s'en sert.
      Je te remet ta macro simplifiée car c'est inutile de sélectionner les cellules. Cela est plus long à écrire et surtout à exécuter.
      Sub CréationNuméro()
      '
      ActiveSheet.Unprotect
      'Range("C8").Select     ces 2 lignes sont inutiles
      'Range(Range("C8" & ActiveCell.Row), Range("IV" & ActiveCell.Row).End(xlToLeft)).Select
      'Entrée des données
      Destinataire = Range("D4").Value    ' pas besoin de faire une sélection
      '
      TypeDoc = Range("E4").Value
      '
      Intitulé = Range("F4").Value
      '
      Auteur = Range("G4").Value
      '
      Somme = Range("H4").Value
      '
      If (Destinataire = "" Or TypeDoc = "" Or Intitulé = "" Or Auteur = "" Or Somme = "") Then GoTo Fin
      'Insertion d 'une ligne
      Rows("8:8").Copy
      Rows("8:8").Insert Shift:=xlDown
      Application.CutCopyMode = False
      Range("B8:K8").ClearContents
      'Renseignement des valeurs
      Range("B8").Value = Date
      '
      Chrono = Val(Range("C9").Value) ' on prend la valeur numérique de la cellule format texte
      Range("C8").Value = Chrono + 1
      '
      Range("D8").Value = Destinataire
      '
      Range("E8").Value = TypeDoc
      '
      Range("F8").Value = Intitulé
      '
      Range("G8").Value = Auteur
      '
      Range("H8").Value = Somme
      '
      Range("D4:H4").ClearContents
      '
      Fin:
      ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
      '
      End Sub
      

      2
      1. Contributeur
        bonjour

        il l’ouvre cette fenêtre et il marque une ligne en jaune

        Quelle ligne ?

        L'intérêt de ton code c'est de nous fournir le point de blocage.
        2
        1. Contributeur
          bonjour

          Si la cellule nommée FR1VAL a été supprimée par exemple ta macro ne peut plus fonctionner
          2
          1. comment redefinir ses cellules (variable) STP, je peux même vous envoyer le fichier
            Please j'ai besoin d'une réponse et merci
            0
        2. MERCI BCP !!! CA MARCHE !

          Une bête erreur de d'apostrophe...

          Une question de plus, si je peux...
          Comment faire en sorte que ma cellule contenant le numéro chrono soit de format "texte" ? Est-ce possible ?
          re-merci
          0
          1. Bonjour pour le boulot j’ai paramétré un tableau de bord alimenté à partir d’une base des données, ça marchait mais depuis une semaine il m’affiche « run time error ‘1004 : méthode ’range of Object worksheet failed » . L’erreur se produit dans une page qui contient les indicateurs en chiffre pour alimenter les objets (histogramme, thermomètre ..) . je suis vraiment coince et en plus j’ai une réunion de reporting la semaine prochaine. J’ai besoin de votre aide SVP. Je peux transmettre le fichier si vous voulez.
            Suite à ce message qu’on je veux déboguer, il l’ouvre cette fenêtre et il marque une ligne en jaune.

            ****************************
            ' Met à jour tous les indicateurs programmés
            '**********************************
            Private Sub CommandButton1_Click()
            'appel de la fonction feu rouge
            'Feu rouge alerte client
            seuilbas = Feuil2.Range("FR1SB").Value 'lit la valeur du seuil bas
            seuilhaut = Feuil2.Range("FR1SH").Value 'lit la valeur du seuil haut
            valeur = Feuil2.Range("FR1VAL").Value 'lit la valeur (cette ligne est en jaune)
            Call Module1.Feurouge(seuilbas, seuilhaut, valeur, 1)
            'Feu rouge alerte budget
            seuilbas = Feuil2.Range("FR2SB").Value 'lit la valeur du seuil bas
            seuilhaut = Feuil2.Range("FR2SH").Value 'lit la valeur du seuil haut
            valeur = Feuil2.Range("FR2VAL").Value 'lit la valeur
            Call Module1.Feurouge(seuilbas, seuilhaut, valeur, 2)
            'Feu rouge alerte processus
            seuilbas = Feuil2.Range("FR3SB").Value 'lit la valeur du seuil bas
            seuilhaut = Feuil2.Range("FR3SH").Value 'lit la valeur du seuil haut
            valeur = Feuil2.Range("FR3VAL").Value 'lit la valeur
            Call Module1.Feurouge(seuilbas, seuilhaut, valeur, 3)

            ' appel de la fonction jauge verticale
            ' L'ascenseur permet de faire varier la mesure à titre de démonstration
            'Jauge urgence
            seuilbas = Range("INDIC1SB").Value 'lit la valeur du seuil bas en H12
            seuilhaut = Range("INDIC1SH").Value 'lit la valeur du seuil haut en H13
            objectif = Range("INDIC1OBJ").Value 'lit la valeur de l'objectif
            valeur = Range("INDIC1VAL").Value 'lit la valeur
            Call Module2.jaugeV(seuilbas, seuilhaut, valeur, objectif, 1)
            'Jauge normal
            seuilbas = Range("INDIC2SB").Value 'lit la valeur du seuil bas en H12
            seuilhaut = Range("INDIC2SH").Value 'lit la valeur du seuil haut en H13
            objectif = Range("INDIC2OBJ").Value 'lit la valeur de l'objectif
            valeur = Range("INDIC2VAL").Value 'lit la valeur
            Call Module2.jaugeV(seuilbas, seuilhaut, valeur, objectif, 2)

            Feuil1.Activate 'Appel de la page de signalisation
            End Sub

            Merci d’avance, je ne suis pas un grand connaisseur VB
            0
            1. C’est la sixième ligne (valeur= ) qui est marquée en jaune, je l’ai mentionné entre parenthèses.
              Et merci d’avance
              0