Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Bonjour,
J'ai l'impression que la solution doit être simple mais je ne la trouve pas
Voici ce que je souhaite faire:
Sur une feuille : des valeurs sont calculées au jour le jour
A1 B1 C1
date du jour valeur calculée 1 valeur calculée 2
Je voudrais remplir automatiquement le tableau mémorisant ces valeurs calculées jour par jour
D1 E1 F1
jour1 valeur 1 de B1 valeur 2 de C1
jour2
jour3
.....
Y a t'il une solution via les formules standards d'Excel ou faut il passer par une macro ?
Merci d'avance
Effectivement si la feuille est protégé, la macro ne peut écrire dedans !
Pas de chance, le code d'erreur dans ce cas est le même que quand le Match (EQUIV) ne trouve pas la date d'où le message.
Avec UserInterfaceOnly la feuille est protégée des utilisateurs mais pas du code de la macro.
With objWs2 .Protect UserInterfaceOnly:=True
lgLigne = Application.WorksheetFunction.Match(objWs1.[A4], .Range("A:A"), 0)
.Cells(lgLigne, 2) = objWs1.[B4]
.Cells(lgLigne, 3) = objWs1.[C4]
End With
Sinon pour le "problème" du code d'erreur une solution serait d'externaliser le calcul du EQUIV dans une cellule
Ex en D1 : =EQUIV(Journalier!A4;Liste1!A:A;0)
Sub EnregistreL1()
Dim objWs1 As Worksheet, objWs2 As Worksheet
Dim lgLigne As Long
On Error GoTo erreur
Set objWs1 = ThisWorkbook.Worksheets("Journalier")
Set objWs2 = ThisWorkbook.Worksheets("Liste1")
With objWs2
lgLigne = Application.WorksheetFunction.Match(objWs1.[A4], .Range("A:A"), 0)
.Cells(lgLigne, 2) = objWs1.[B4]
.Cells(lgLigne, 3) = objWs1.[C4]
End With
Exit Sub
erreur:
If Err.Number = 1004 Then
MsgBox "Date non trouvé"
Else
MsgBox "Erreur : " & Err.Description & " (" & Err.Number & ")"
End If
End Sub
Pile poil ce qu'il me faut
J'adapte à mon fichier réel
Si je ne reviens pas, c'est que tout est ok et mérite un grand merci
Je reviens même si tout est définitivement ok pour dire que grâce à l'aide de ce forum, j'ai progressé dans la compréhension des macros même si je suis encore loin d'en créer une
Hasta luego
Sub EnregistreL1()
Dim objWs1 As Worksheet, objWs2 As Worksheet
Dim lgLigne As Long
On Error GoTo erreur
Set objWs1 = ThisWorkbook.Worksheets("Journalier")
Set objWs2 = ThisWorkbook.Worksheets("Liste1")
With objWs2
lgLigne = Application.WorksheetFunction.Match(objWs1.[A4], .Range("A:A"), 0)
.Cells(lgLigne, 2) = objWs1.[B4]
.Cells(lgLigne, 3) = objWs1.[C4]
End With
Exit Sub
erreur:
If Err.Number = 1004 Then
MsgBox "Date non trouvé"
Else
MsgBox "Erreur : " & Err.Description & " (" & Err.Number & ")"
End If
End Sub
Sub EnregistreL1()
Dim objWs1 As Worksheet, objWs2 As Worksheet
Dim lgLigne As Long
On Error GoTo erreur
Set objWs1 = ThisWorkbook.Worksheets("Journalier")
Set objWs2 = ThisWorkbook.Worksheets("Liste1")
With objWs2
lgLigne = Application.WorksheetFunction.Match(objWs1.[A4], .Range("A:A"), 0)
.Cells(lgLigne, 2) = objWs1.[B4]
.Cells(lgLigne, 3) = objWs1.[C4]
End With
Exit Sub
erreur:
If Err.Number = 1004 Then
MsgBox "Date non trouvé"
Else
MsgBox "Erreur : " & Err.Description & " (" & Err.Number & ")"
End If
End Sub
Bonsoir
Un petit problème m'est arrivé
La macro adaptée au fichier réel marchait impec puis tout d'un coup j'ai le message "Date non trouvé" résultat d'une erreur 1004.
je n'arrivais pas à localiser le problème car toutes les cellules de la macro correspondent bien à celles de mes feuilles et je n'avais rien modifié.
En essayant de me remémorer quels changements j'avais pu effectuer, un seul m'est venu à l'esprit, j'ai verrouillé la feuille "suivi"
J'ai déverrouillé et tout est rentré dans l'ordre.
J'en déduis qu'il est impossible de verrouiller des cellules adressées par des macros.
Est-ce bien exact ? Si oui, ça peut poser des problèmes dus une erreur manuelle sur la zone. Mais bon....
En essayant de me remémorer quels changements j'avais pu effectuer, un seul m'est venu à l'esprit, j'ai verrouillé la feuille "suivi"
J'ai déverrouillé et tout est rentré dans l'ordre.
Là aussi, sauf erreur de ma part, on peut lire des cellules verrouillées, mais on ne peut pas écrire dedans, sauf si on protège la feuille uniquement pour l'utilisateur (et donc pas pour VBA).
Sauf erreur de ma part, on ne verrouille pas une feuille, on la protège.
Ce sont les cellules qu'on verrouille.
Là aussi, sauf erreur de ma part, on peut lire des cellules verrouillées, mais on ne peut pas écrire dedans, sauf si on protège la feuille uniquement pour l'utilisateur (et donc pas pour VBA).
Mais les cellules verrouillées ne le sont que si la feuille est protégée et dans la protection de la feuille, je ne vois aucune option qui donne passe droit pour VBA
Mais bon tout ceci n'est pas grave puisque mon fichier Excel ne sera a priori utilisé que par moi
Merci pour ces précisions
Mais les cellules verrouillées ne le sont que si la feuille est protégée et dans la protection de la feuille, je ne vois aucune option qui donne passe droit pour VBA
Effectivement si la feuille est protégé, la macro ne peut écrire dedans !
Pas de chance, le code d'erreur dans ce cas est le même que quand le Match (EQUIV) ne trouve pas la date d'où le message.
Avec UserInterfaceOnly la feuille est protégée des utilisateurs mais pas du code de la macro.
With objWs2 .Protect UserInterfaceOnly:=True
lgLigne = Application.WorksheetFunction.Match(objWs1.[A4], .Range("A:A"), 0)
.Cells(lgLigne, 2) = objWs1.[B4]
.Cells(lgLigne, 3) = objWs1.[C4]
End With
Sinon pour le "problème" du code d'erreur une solution serait d'externaliser le calcul du EQUIV dans une cellule
Ex en D1 : =EQUIV(Journalier!A4;Liste1!A:A;0)
VB:
Sub EnregistreL1()
Dim objWs1 As Worksheet, objWs2 As Worksheet
Dim lgLigne As Long
On Error GoTo erreur
Set objWs1 = ThisWorkbook.Worksheets("Journalier")
Set objWs2 = ThisWorkbook.Worksheets("Liste1")
If Not IsNumeric(objWs2.[D1].Value) Then MsgBox "Date non trouvée": Exit Sub
With objWs2
.Protect UserInterfaceOnly:=True
lgLigne = objWs2.[D1]
.Cells(lgLigne, 2) = objWs1.[B4]
.Cells(lgLigne, 3) = objWs1.[C4]
End With
Exit Sub
erreur:
MsgBox "Erreur : " & Err.Description & " (" & Err.Number & ")"
End Sub
Effectivement si la feuille est protégé, la macro ne peut écrire dedans !
Pas de chance, le code d'erreur dans ce cas est le même que quand le Match (EQUIV) ne trouve pas la date d'où le message.
Avec UserInterfaceOnly la feuille est protégée des utilisateurs mais pas du code de la macro.
With objWs2 .Protect UserInterfaceOnly:=True
lgLigne = Application.WorksheetFunction.Match(objWs1.[A4], .Range("A:A"), 0)
.Cells(lgLigne, 2) = objWs1.[B4]
.Cells(lgLigne, 3) = objWs1.[C4]
End With
Sinon pour le "problème" du code d'erreur une solution serait d'externaliser le calcul du EQUIV dans une cellule
Ex en D1 : =EQUIV(Journalier!A4;Liste1!A:A;0)
VB:
Sub EnregistreL1()
Dim objWs1 As Worksheet, objWs2 As Worksheet
Dim lgLigne As Long
On Error GoTo erreur
Set objWs1 = ThisWorkbook.Worksheets("Journalier")
Set objWs2 = ThisWorkbook.Worksheets("Liste1")
If Not IsNumeric(objWs2.[D1].Value) Then MsgBox "Date non trouvée": Exit Sub
With objWs2
.Protect UserInterfaceOnly:=True
lgLigne = objWs2.[D1]
.Cells(lgLigne, 2) = objWs1.[B4]
.Cells(lgLigne, 3) = objWs1.[C4]
End With
Exit Sub
erreur:
MsgBox "Erreur : " & Err.Description & " (" & Err.Number & ")"
End Sub
Effectivement si la feuille est protégé, la macro ne peut écrire dedans !
Pas de chance, le code d'erreur dans ce cas est le même que quand le Match (EQUIV) ne trouve pas la date d'où le message.
Avec UserInterfaceOnly la feuille est protégée des utilisateurs mais pas du code de la macro.
With objWs2 .Protect UserInterfaceOnly:=True
lgLigne = Application.WorksheetFunction.Match(objWs1.[A4], .Range("A:A"), 0)
.Cells(lgLigne, 2) = objWs1.[B4]
.Cells(lgLigne, 3) = objWs1.[C4]
End With
Sinon pour le "problème" du code d'erreur une solution serait d'externaliser le calcul du EQUIV dans une cellule
Ex en D1 : =EQUIV(Journalier!A4;Liste1!A:A;0)
VB:
Sub EnregistreL1()
Dim objWs1 As Worksheet, objWs2 As Worksheet
Dim lgLigne As Long
On Error GoTo erreur
Set objWs1 = ThisWorkbook.Worksheets("Journalier")
Set objWs2 = ThisWorkbook.Worksheets("Liste1")
If Not IsNumeric(objWs2.[D1].Value) Then MsgBox "Date non trouvé": Exit Sub
With objWs2
.Protect UserInterfaceOnly:=True
lgLigne = objWs2.[D1]
.Cells(lgLigne, 2) = objWs1.[B4]
.Cells(lgLigne, 3) = objWs1.[C4]
End With
Exit Sub
erreur:
MsgBox "Erreur : " & Err.Description & " (" & Err.Number & ")"
End Sub
Je que je voulais dire. La maxime est subtile et ne peut être comprise que par les connaisseurs de l'univers booléen. Ce que ne sont pas forcément tous ceux qui passent par ce forum. Je me trompe ?
Elle est très bien cette maxime. Je m'en servirai pour voir la tête que feront certains de mes amis.
Bref, j'arrête là cette digression en marge d'un sujet sérieux
A+
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD