XL 2013 Étrange

ychc

XLDnaute Occasionnel
Bonjour à tous,

Peux être que certains pourront m'expliquer ce qui m'arrive.
J'ai un fichier que j'utilise et qui fonctionne sous le pack office 2010.

Or sous excel 2013, ce fichier me fait des "bizarreries".

J'ai une macro relativement simple qui déclanchée par un bouton :
ouvre une box
deprotège les feuilles
copie / colle certaines valeurs et mise en forme d'une feuille à l'autre
reprotège les feuilles.

Tout cela fonctionne sous excel 2010, mais avec 2013, la macro s'éxécute mal:
elle oublie certaines valeurs et mise en forme.

Et le truc étrange, c'est que si je l'éxécute depuis l'explorateur VBA avec la flèche, tout fonctionne très bien.

Voilà, j'espère avoir été asser clair et que certains pourront me dire quoi faire pour résoudre ce problème,
car de mon côté, je ne sais plus trop quoi faire.

Merci et bonne soirée à tous.
 

ychc

XLDnaute Occasionnel
Bonsoir à tous,

Voici le code

Code:
Sub ref1()
'
' ref1 Macro
'

'Sub effacer_1 ere ref()
    If MsgBox("Etes-vous certain de vouloir effacer le contenu de la 1 ere REF et de le sauvegarder ?", vbYesNo, "Demande de confirmation") = vbYes Then
   
    Sheets("CT").Unprotect "toto"
    Sheets("DE").Unprotect "toto"
   
    Range("C28:C29,C30,C31,C32,C33,C35:C37").Copy
   
    Sheets("CT").Select
   
    ActiveSheet.Unprotect "toto"
   
    Range("e8").Select
    Selection.PasteSpecial Paste:=xlPasteFormulasAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
   
   
   
    Sheets("DE").Select
    Range("c47").Copy
    Sheets("CT").Select
    Range("e17").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
   
   
    Sheets("CT").Select
    Range("c48").Copy
    Sheets("CT").Select
    Range("e18").Select
    Selection.PasteSpecial Paste:=xlPasteFormulasAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
   
    Sheets("CT").Select
    Range("c49").Copy
    Sheets("CT").Select
    Range("e19").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
   
   
    Sheets("CT").Select
    Range("D5").Select
    Application.CutCopyMode = False
   
   
   
    Range("C28:C29,C30,C31,C32,C33,C35:C37,C38:C44,C38:C44,C45,C48").ClearContents
    Range("A24").Select
   
    Sheets("CT").Protect "toto", True, True, True
    Sheets("CT").Protect "toto", True, True, True
   
     MsgBox "Le contenu de la 1 ere REF a été effacé et sauvegardé !"
    End If
   
    End Sub
 

Yurperqod

XLDnaute Occasionnel
Bonjour à tous

J'ai modifié ta macro en supprimant les Select (c'est ce que conseille beaucoup de monde ici)
Est-ce que le résultat est pareil que ta macro d'origine ?
Est-ce que ca résoud ton problème ?
VB:
Sub ref1_corrigé()
If MsgBox("Etes-vous certain de vouloir effacer le contenu de la 1 ere REF et de le sauvegarder ?", vbYesNo, "Demande de confirmation") = vbYes Then
   
Sheets("CT").Unprotect "toto"
Sheets("DE").Unprotect "toto"
   
Sheets("DE").Range("C28:C29,C30,C31,C32,C33,C35:C37").Copy
Sheets("CT").Range("e8").PasteSpecial Paste:=xlPasteFormulasAndNumberFormats
   
Sheets("DE").Range("c47").Copy
Sheets("CT").Range("e17").PasteSpecial Paste:=xlPasteValues
   
Sheets("CT").Range("c48").Copy
Sheets("CT").Range("e18").PasteSpecial Paste:=xlPasteFormulasAndNumberFormats
   
Sheets("CT").Range("c49").Copy
Sheets("CT").Range("e19").PasteSpecial Paste:=xlPasteValues
   
Application.CutCopyMode = False
   
Sheets("DE").Range("C28:C29,C30,C31,C32,C33,C35:C37,C38:C44,C38:C44,C45,C48").ClearContents
Sheets("CT").Protect "toto", True, True, True
Sheets("DE").Protect "toto", True, True, True
MsgBox "Le contenu de la 1 ere REF a été effacé et sauvegardé !"
End If
End Sub
 

Si...

XLDnaute Barbatruc
Bonjour
Bonjour,
lancée à partir d'un userform je suppose ? si non modal essaie en modal
eric

Eric, qu'est-ce qui te fait penser à cela ? Box ?

Dans tous les cas, le problème est récurrent quand on ne fait pas attention où est écrite la macro et d'où elle est lancée .

Quand la macro n'est pas écrite dans la fenêtre de codes de la feuille source (dans un module,, la fenêtre de codes d'un formulaire) ,
- elle est lancée depuis la source, cela passe !
- elle est lancée depuis un autre onglet , alors là … problème !
Dans la macro, il faut commencer par la référencer (sélectionner ou passer par un With … End With)

Exemples de macro (avec simplifications)
VB:
Sub ref1()
    If MsgBox("Etes-vous certain de vouloir effacer le contenu de la 1 ere REF et de le sauvegarder ?", vbYesNo, "Demande de confirmation") = vbNo Then Exit Sub
    Feuil1.Select
    Sheets("CT").Unprotect "toto": Sheets("DE").Unprotect "toto"
    Range("C28:C33,C35:C37").Copy Sheets("CT").Range("e8")
    Sheets("DE").Range("c47").Copy Sheets("CT").Range("e17")
    Sheets("CT").Range("c48:c49").Copy Sheets("CT").Range("e18")
    Range("C28:C37,C44,C45,C48") = ""
    Range("A24").Select
    Sheets("CT").Protect "toto", True, True, True
    Sheets("DE").Protect "toto", True, True, True
    MsgBox "Le contenu de la 1 ere REF a été effacé et sauvegardé !"
End Sub
    'ou
Sub ref1()
    If MsgBox("Etes-vous certain de vouloir effacer le contenu de la 1 ere REF et de le sauvegarder ?", vbYesNo, "Demande de confirmation") = vbNo Then Exit Sub
    With Feuil1
        Sheets("CT").Unprotect "toto": Sheets("DE").Unprotect "toto"
        .Range("C28:C33,C35:C37").Copy Sheets("CT").Range("e8")
        Sheets("DE").Range("c47").Copy Sheets("CT").Range("e17")
        Sheets("CT").Range("c48:c49").Copy Sheets("CT").Range("e18")
        .Range("C28:C37,C44,C45,C48") = ""
        Application.Goto .Range("A24")
    End With
    Sheets("CT").Protect "toto", True, True, True
    Sheets("DE").Protect "toto", True, True, True
    MsgBox "Le contenu de la 1 ere REF a été effacé et sauvegardé !"
End Sub

En l'écrivant dans la fenêtre de codes de la feuille source et la lançant depuis cet onglet, cela passe .
Dans ce cas, voici un exemple de correction de la macro proposée (des maladresses à éviter)
VB:
Sub ref1()
  If MsgBox("Etes-vous certain de vouloir effacer le contenu de la 1 ere REF et de le sauvegarder ?", vbYesNo, "Demande de confirmation") = vbNo Then Exit Sub
  Sheets("CT").Unprotect "toto": Sheets("DE").Unprotect "toto"
  Range("C28:C33,C35:C37").Copy Sheets("CT").Range("e8")
  Sheets("DE").Range("c47").Copy Sheets("CT").Range("e17")
  Sheets("CT").Range("c48:c49").Copy Sheets("CT").Range("e18")
  Range("C28:C37,C44,C45,C48") = ""
  Range("A24").Select
  Sheets("CT").Protect "toto", True, True, True
  Sheets("DE").Protect "toto", True, True, True
  MsgBox "Le contenu de la 1 ere REF a été effacé et sauvegardé !"
End Sub
 

Si...

XLDnaute Barbatruc
Re
Bonjour Si...
Ma simplification a gardé (voir message numéro 5)
Paste:=xlPasteFormulasAndNumberFormats
et
Paste:=xlPasteValues
Ta simplification non.
C'est voulu ?

Non o_O !
Quand on n'a pas de support, on navigue à vue. Je ne me suis pas préoccupé des contenus.

Maintenant, en cas d'une plage de formules dont on ne veut garder que les valeurs, (ce que ne fait pas .Copy*) il suffit de rajouter Plage=Plage.Value après la copie.

*l'intérêt du .Copy est d'avoir une copie intégrale (dont contenu, formats, Mfc). Mais il y a tellement de cas particuliers que cela en devient une autre histoire ;).
 

eriiic

XLDnaute Barbatruc
Eric, qu'est-ce qui te fait penser à cela ? Box ?
A excel>=2013 (arrivée de la gestion des feuilles en SDI au lieu du MDI) et sa mauvaise gestion des feuilles actives quand on active/désactive des feuilles depuis un userform.
Signalé le plus souvent avec vbmodeless, mais à-priori constaté aussi en modal.

Ca fait comme si une feuille n'était activée qu'à moitié. Elle est bien active mais les écritures continuent à se faire sur une ancienne active.
La proposition de Ce lien n'existe plus ou la tienne devrait améliorer les choses je pense.
Reste à voir si le demandeur viendra répondre aux questions pour compléter nos connaissances sur ce pb... ;-)
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 196
Messages
2 086 101
Membres
103 116
dernier inscrit
kutobi87