XL 2013 SOS macro (erreur execution)

michir

XLDnaute Occasionnel
Bonjour,
Voir fichier joint

LE BOUTON MACRO "Réini." DOIT RECOPIER LE DERNIER SOLDE SUR LE SOLDE ANTERIEUR ET EFFACER LA LISTE DES ECARTS (Lignes 55 à 88)

OR IL RETOURNE SYSTEMATIQUEMENT POUR LE MOIS DE JUIN UNIQUEMENT , UNE ERREUR D'EXECUTION QUI SEMBLE LIEE AUX CONDITIONS DE PROTECTION DE LA FEUILLE

JE SUIS INCAPABLE DE TROUVER L'ORIGINE DE CETTE ERREUR

Merci à tous
Michel
 

Pièces jointes

  • RAV Test.xlsm
    69.9 KB · Affichages: 30

vgendron

XLDnaute Barbatruc
Hello

Te suffit de déplacer la ligne de code qui verrouille..
VB:
Sub Réini_06()
ActiveSheet.Unprotect
    Range("L52").Select
    Selection.Locked = False
    Selection.FormulaHidden = False
Dim derligne As Integer
Dim i As Integer
Dim motcle As String
motcle = "*Antérieur*"
derligne = Range("A" & Rows.Count).End(xlUp).Row ' vient chercher la dernière ligne de la colonne O
For i = derligne To 1 Step -1
If Cells(i, 1).Value Like motcle Then
Cells(i, 12).Value = Cells(i + 1, 12).Value
End If
Next i
Selection.Locked = True
    Selection.FormulaHidden = False
'    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
'        , AllowFormattingCells:=True, AllowFormattingColumns:=True, _
'        AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows _
'        :=True, AllowInsertingHyperlinks:=True, AllowDeletingColumns:=True, _
'        AllowDeletingRows:=True, AllowSorting:=True
    'Range("P54").Select
Range("Juin_Ecart").Select
Selection.ClearContents
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFormattingCells:=True, AllowFormattingColumns:=True, _
        AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows _
        :=True, AllowInsertingHyperlinks:=True, AllowDeletingColumns:=True, _
        AllowDeletingRows:=True, AllowSorting:=True
Range("L54").Select
End Sub
 

JM27

XLDnaute Barbatruc
bonjour
explication de ton pb
certaines de tes cellules sont verrouillées dans les données de juin. ( et pas dans les autres mois)
nota: pourquoi protéger ta feuille alors que tu autorises par macro pratiquement toutes les modifications ?o_O
 
Dernière édition:

vgendron

XLDnaute Barbatruc
sinon.. une proposition pour simplifer ton code.. enfin.. rassembler les 12 macros identiques dans une seule

1) supprimer les boutons "Réini." à remplacer par du texte dans la cellule
2) ecrire un code "Selection_Change dans le code de la feuille
3) une macro UNIQUE

voir PJ
 

Pièces jointes

  • RAV Test.xlsm
    71.9 KB · Affichages: 31

vgendron

XLDnaute Barbatruc
Autre version de la macro unique avec commentaires

VB:
Application.EnableEvents = False
Dim derligne As Integer
Dim i As Integer
Dim motcle As String

lig = ActiveCell.Row 'récupère la ligne de la cellule qui vient d'etre cliquée ==> normalement toujours 52
col = ActiveCell.Column 'récupère la colonne de la cellule qui vient d'etre cliquée

With ActiveSheet
    .Unprotect
    .Cells(lig, col - 1).Locked = False 'dévérouille la cellule du Solde Antérieur à gauche de la cellule cliquée
    .Cells(lig, col - 1).FormulaHidden = False 'affiche la formule (qui n'existe pas..?)
    Mois = Format(.Cells(3, col - 1), "mmmm") 'récupère le MOIS dans la ligne 3 ==> servira pour la plage nommée à effacer
   
    motcle = "*Antérieur*"
    derligne = .Range("A" & .Rows.Count).End(xlUp).Row ' vient chercher la dernière ligne de la colonne A
    For i = derligne To 1 Step -1 'pourquoi aller jusqu'en haut?? on peut sans doute limiter à la ligne 52 ==> y a t il plusieurs lignes "Soldes Antérieurs"?
        If .Range("A" & i).Value Like motcle Then 'si on est sur la ligne Solde Antérieur
            .Cells(i, col - 1).Value = Cells(i + 1, col - 1).Value 'on remplace le solde Antérieur par le dernier solde
        End If
    Next i

    .Cells(lig, col - 1).Locked = True 'on reverrouille la cellule
    .Cells(lig, col - 1).FormulaHidden = False 'TRUE?? mais toujours pas de formule...
   
    .Range(Mois & "_Ecart").ClearContents 'on efface la zone du MOIS
    .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFormattingCells:=True, AllowFormattingColumns:=True, _
        AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows _
        :=True, AllowInsertingHyperlinks:=True, AllowDeletingColumns:=True, _
        AllowDeletingRows:=True, AllowSorting:=True 'on reprotège
End With
Application.EnableEvents = True
End Sub
 

michir

XLDnaute Occasionnel
Merci à vous deux JM27 et Vgendron
il me faut un peu de temps pour comprendre car non informaticien
Pour le dernière prosposition de Vgendron qui me semble élégante, comment je déclenche la macro ?
Je peux sans doute affecter les boutons "Réini" à cette macro uniqe ?
merci encore
 

michir

XLDnaute Occasionnel
Bonjour à tous
je fais de nouveau appel à vous, notamment à Vgendron s'il pas par ici
j'ai recopié le code pour sa macro unique mais j'ai du me prendre les pieds dans le tapis avec mes connaissance très réduite en VBA
et pourtant elle fonctionnait parfaitement bien bien sur le test
si vous pouviez me donner encore un coup de pouce
je joins mon fichier
Merci
 

Pièces jointes

  • RAV NEW Bis.xlsm
    59.4 KB · Affichages: 19

vgendron

XLDnaute Barbatruc
Hello
normal. tu as du aussi modifier le fichier... la ligne 52 est passée en ligne 48==> la macro selection_change ne lance pas la macro de recopie
remplace par ceci..

VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If ActiveCell.Value = "Réini." Then Réinitialiser
'If Not Intersect(Target, Range("C52,E52,G52,I52,K52,M52,O52,Q52,S52,U52,W52,Y52")) Is Nothing Then
'    Réinitialiser
'End If
End Sub