XL 2013 Problème de fonctionnement ajout de lignes à l'aide d'une macro

bruno.launay@amio.fr

XLDnaute Nouveau
Bonjour le forum,

J'ai développé sur Excel un outil de réalisation de devis, que j'ai dû enregistrer en.xlm, car lorsque je l'enregistre sur .xls un message me dit que les macro ne peuvent pas fonctionner, personnellement je n'est pas essayé.

Mon problème, j'ai mis en place un bouton pour ajouter des lignes sur deux feuilles qui possèdent des cellules en relation. Celui-ci se trouve sur la feuille "ACHAT EURO" et la deuxième feuille est celle qui me permet de réaliser mon offre avec les produits importés qui s'appelle "IMPORTATION".

J'ai donc réalisé une macro :

Sub InsertionLignes()

' InsertionLignes Macro

Range("A40:K44").Select
Selection.Copy
Rows("45:45").Select
Selection.Insert Shift:=xlDown
Range("D45:I49").Select

End Sub

Sub InsertionLignesImportation()

' InsertionLignesImportation Macro

Sheets("IMPORTATION").Select
Range("A40:K44").Select
Application.CutCopyMode = False
Selection.Copy
Rows("45:45").Select
Selection.Insert Shift:=xlDown

End Sub

Celle-ci fonctionne très bien

Je veux verrouiller cette application de façon à ce que les utilisateurs ne modifie pas la structure et les formules utilisées, pour cela j'ai intégré l'activation d'un mot de passe dans ma macro :

Sub InsertionLignes()
ActiveSheet.Unprotect ("MDP")
' InsertionLignes Macro
Range("A40:K44").Select
Selection.Copy
Rows("45:45").Select
Selection.Insert Shift:=xlDown
Range("D45:I49").Select
ActiveSheet.Protect ("MDP")
End Sub

Sub InsertionLignesImportation()

' InsertionLignesImportation Macro

Sheets("IMPORTATION").Select
Range("A40:K44").Select
Application.CutCopyMode = False
Selection.Copy
Rows("45:45").Select
Selection.Insert Shift:=xlDown

End Sub

J'active la protection de mes deux feuilles, le fonctionnement est bon, j'ajoute bien les cinq lignes sur ma page "ACHAT EURO" et sur la feuille "IMPORTATION" et les formules sont bien présente.

Je modifie à nouveau ma macro :

Sub InsertionLignes()
ActiveSheet.Unprotect ("y3wDx:6%5L")
' InsertionLignes Macro
Range("A40:K44").Select
Selection.Copy
Rows("45:45").Select
Selection.Insert Shift:=xlDown
Range("D45:I49").Select
ActiveSheet.Protect ("y3wDx:6%5L")
End Sub

Sub InsertionLignesImportation()
ActiveSheet.Unprotect ("y3wDx:6%5L")
' InsertionLignesImportation Macro

Sheets("IMPORTATION").Select
Range("A40:K44").Select
Application.CutCopyMode = False
Selection.Copy
Rows("45:45").Select
Selection.Insert Shift:=xlDown
ActiveSheet.Protect ("y3wDx:6%5L")

End Sub

Je protège ma feuille "ACHAT EURO" et la feuille "IMPORTATION" reste sans protection, les lignes s'ajoutent bien sur les deux feuilles et les formules fonctionnent

Si je protège les deux feuilles "ACHAT EURO" et la feuille "IMPORTATION" et je lance la macro, j'ai un message qui apparaît sur la feuille "IMPORTATION":

"Erreur d'exécution 1004", La méthode Insert de la classe Range a échoué

J'appuis sur "FIN"

Aucune ligne s'ajoute sur ces deux feuilles et la feuille "ACHAT EURO" reste déverrouillée et la "IMPORTATION" reste verrouillée

Je vous remercie d'avance pour votre aide sur ce sujet

Cordialement

Bruno
 

Victor21

XLDnaute Barbatruc
Re : Problème de fonctionnement ajout de lignes à l'aide d'une macro

Bonsoir et bienvenue, Bruno.

Vous augmenteriez les chances d'avoir des réponses en fournissant un extrait, court mais représentatif et exempt de données confidentielles de votre fichier et du code qu'il contient, ainsi qu'il vous a été conseillé lors de la création de votre post.
 

Papou-net

XLDnaute Barbatruc
Re : Problème de fonctionnement ajout de lignes à l'aide d'une macro

Bonsoir Bruno,

Je vais te proposer une solution beaucoup plus simple.

Il suffit de protéger tes feuilles à l'ouverture du classeur, avec un mot de passe défini en constante et un paramètre qui autorise VBA à modifier les feuilles mais maintient la protection pour l'utilisateur.

Tu dois écrire le code suivant dans le module ThisWorkbook:

Code:
Const MDP = "y3wDx:6%5L"

Private Sub Workbook_Open()
Feuil("ACHAT EURO").Protect MDP, userinterfaceonly = True
Feuil("IMPORTATION").Protect MDP, userinterfaceonly = True
End Sub
Bien entendu, tu dois supprimer la protection des feuilles manuellement avant d'enregistrer le fichier.

Rappel: comme toute protection, celle-ci n'a qu'une portée limitée pour qui connait bien Excel et VBA. Mais tu peux empêcher les petits curieux de lire le mot de passe en protégeant également le orojet VBA.

Cordialement.

Edit: bonsoir Patrick.
 

bruno.launay@amio.fr

XLDnaute Nouveau
Re : Problème de fonctionnement ajout de lignes à l'aide d'une macro

Bonjour,

J 'ai suivi les instruction de Patrick, mais je ne suis pas sûr d'avoir bien fait :

- Je suis allé dans le fichier situé nommé : "ThisWorkbook" situé à la suite des mes pages, ensuite j'ai sélectionné "Workbook" dans la liste déroulante et "Open". Ensuite j'ai copié et collé le code donné par Patrick, j'ai retiré les codes "ActiveSheet.Unprotect ("y3wDx:6%5L")" et "ActiveSheet.Protect ("y3wDx:6%5L")" dans mon code visual basic, j'ai ensuite déverrouillé toutes mes pages, j'ai enregistré mes travaux et fermé. Lorsque j'ouvre mon classeur, j'ai un message qui s'affiche dans une fenêtre Visual Basic pour Applic... " Erreur de compilation : Sub ou Function non définie", je fais OK, la flèche jaune et la ligne jaune est placé sur le texte "Private Sub Workbook_Open().

Merci d 'avance pour votre aide

Bruno
 

Discussions similaires

Réponses
3
Affichages
547