Erreur 1004 - cellule protégée et en lecture seule - VB/VBA/VBS - Programmation
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!
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 !
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