Erreur 1004 - cellule protégée et en lecture seule

Erreur 1004 - cellule protégée et en lecture seule - VB/VBA/VBS - Programmation

Marsh Posté le 20-01-2010 à 06:32:18    

Bonjour à tous,
 
J'ai un soucis concernant un fichier Excel. Je vous résume très brievement la situation.
Un document semaine x .xls et un autre bilan x .xls. (x est un numero de semaine)
Dans le document semaine x, sont saisie des noms de personnes, ainsi que le calcul de leurs horaires effectuées.
Le probleme se situe sur mon document bilan x. Celui ci a un bouton "actualiser", qui récupère des informations dans semaine x afin de remplir certaines cellules.
Lorsque je clique sur le bouton "actualiser", il y a une erreur qui est générée.
 
"Erreur d'exécution 1004
La cellule ou le graphique est protégé et en lecture seule
Pour modifier une celulle ou un graphique protégé, ôtez la protection avec la commande Ôter la protection de la feuille (Outils, Protection). Vous devrez peut-être taper un mot de passe.
"
 
J'ai bien sur vérifier l'attribut du fichier, et essayer de ôter, et protéger la feuille, mais l'erreur reste la même.
Voici le code derrière mon bouton :
 
Function convertdec(num As Double)
num = Round(num, 2)
convertdec = Fix(num) & "." & CInt(100 * (num - Fix(num)))
End Function
 
Function maj()
    'Mise a jour Bilans
    Sheets("Bilan" ).Select
    'Enlève la protection
    lol = unprotec()
    '____________________
    'mise a jour bilan SSIS chefs
    colonne = Chr(64 + Range("debut_calcul_heure_SSIS_chefs" ).Columns.Column)
    For i = Range("debut_calcul_heure_SSIS_chefs" ).Columns.Row To Range("fin_calcul_heure_SSIS_chefs" ).Columns.Row
        Range(colonne & i).Select
        ActiveCell.FormulaR1C1 = "=SommeHeure(" & convertdec(heureffecSSIS(Range("A" & i).Value)) & " ,RC[4])"
    Next
    'mise a jour SSIS pompiers
    For i = Range("debut_calcul_heure_SSIS_pompiers" ).Columns.Row To Range("fin_calcul_heure_SSIS_pompiers" ).Columns.Row
        Range(colonne & i).Select
        ActiveCell.FormulaR1C1 = "=SommeHeure(" & convertdec(heureffecSSIS(Range("A" & i).Value)) & " ,RC[4])"
    Next
    'Remet la protection
    lol = protec()
    '____________________
End Function
Sub Actueheures()
Application.ScreenUpdating = False
lol = maj()
Sheets("Bilan" ).Select
ActiveWorkbook.Save
Application.ScreenUpdating = True
End Sub

 
Je reste à votre disposition pour des renseignements si je me suis mal exprimé.
Merci d'avoir lu :)


Message édité par Haloavandaha le 20-01-2010 à 06:33:39
Reply

Marsh Posté le 20-01-2010 à 06:32:18   

Reply

Marsh Posté le 28-01-2010 à 10:17:44    


 
Bonjour
 
Tu n'as pas eu bcp de réponses!
 
As-tu trouver ce que tu cherchais?
 
Puis-je te faire qq remarques?
 
1) Column et Row suffisent, pas besoin de Columns en plus   (détail)
 
   
2) Beaucoup plus grave:  Tu mélanges dans une formule des codes et valeurs de ta macro avec des codes et valeurs de la feuille, c'est imposible!!
 
      ActiveCell.FormulaR1C1 = "=SommeHeure(" & convertdec(heureffecSSIS(Range("A" & i).Value)) & " ,RC[4])"
 
une fois sorties de la macro, les variables  (SommeHeure)  et Range("A" & i).Value n'ont plus aucune valeur, donc tu ne peux les inscrire dans une FORMULE sur la feuille.
 
si tu veux utiliser des valeurs de variables, inscris-les d'abord sur ta feuille, puis, dans ta formule inscris les références aux cellules voulues, et de façon appropriée!
 
si tu mets par exple la valeur de  SommeHeure   en col H de la même ligne, soit:
                     Range("H" & i).Value = SommeHeure  
 
tu mets ds ta formule:      "= RC8
 
quant à la suite: convertdec(heureffecSSIS(Range("A" & i).Value))    ???
 
admettons que       convertdec(heureffecSSIS(        fonctionne,  ceci en revanche, jamais!  :
 
Range("A" & i).Value))  
 
au mieux, tu dois écrire:  RC1   , si tu es bien ds une colonne différente de A !
 
une fois que tu auras rectifié ta formule pour qu'elle fonctionne, tu peux fixer la valeur de la cellule avec ceci:
 
ActiveCell.Value = ActiveCell.Value
 
tu as alors une valeur et non plus une formule.
 
et si tu veux, tu supprimes la valeur en colonne H:
Range("H" & i).Value = ""
 
 
mêmes remarques pour la suite:
     
    'mise a jour SSIS pompiers
    For i = Range("debut_calcul_heure_SSIS_pompiers" ).Columns.Row To Range("fin_calcul_heure_SSIS_pompiers" ).Columns.Row
        Range(colonne & i).Select
        ActiveCell.FormulaR1C1 = "=SommeHeure(" & convertdec(heureffecSSIS(Range("A" & i).Value)) & " ,RC[4])"
 
 
Cordialement
 
Je reste à également à ta disposition pour des renseignements si je me suis mal exprimé.
   
Et MERCI aux pompiers qui font un travail formidable!

Reply

Marsh Posté le 15-02-2010 à 22:32:53    

Merci Laoo et désolé pour cette réponse un peu tardive...
Je tenais à préciser en fait que je ne suis pas développeur... et que quand je vois du code, j'ai parfois envie de vomir... ce document excel avait été fait par un prédécesseur, et pas facile de se plonger dedans quand on y est allergique... tout ça pour dire qu'il y a quelques lignes de ton explication que je n'ai pas comprise ^^
Mais je me suis débrouillé à retrouver une vieille sauvegarde du document qui fonctionnait, avec seulement 2 ou 3 bricoles à rectifier en interface... beaucoup plus facile pour moi :)
En tous cas, merci encore !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed