Probleme de feuille protégées et repétition de données
cs_Kyas
Messages postés5Date d'inscriptionmercredi 9 mars 2011StatutMembreDernière intervention22 mai 2013
-
9 mars 2011 à 14:30
jordane45
Messages postés38145Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention25 avril 2024
-
10 mars 2011 à 20:03
Bonjour,
j'ai réalisé une macro capable copier des données à partie d'une plage de cellules et les copier vers une autre plage bien précise en fonction du numero client.
Mon code marche mais j'ai d'autres problèmes:
Quand les feuilles de destination exemple:"00003" sont protégées par un mot de passe;la macro ne marche pas,elle me renvoie l'erreur suivante:'Erreur d'exécution'1004';et après débogage,voici ce qui s'affiche:
Sub Macro3()
'
' Macro3 Macro
' Saisie Automatique des Données_Facture dans le Relevé_Client correspondant.
'
' Touche de raccourci du clavier: Ctrl+Maj+A
'
Sheets("Retraitement_relevé").Select
Range("A6:E6").Select
Selection.Copy
Select Case Range("B3").Value
Case 1
Sheets("00001").Select
ActiveCell.Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Case 2
Sheets("00002").Select
ActiveCell.Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Case 3
Sheets("00003").Select
ActiveCell.Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Select
End Sub
Les les lignes "Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False"
sont coloriées en jaune.
L'une des solutions serait d'oter la protection de la feuille or ce n'est pas ce que je veux:je souhaite que ces feuilles de destinations ne soient jamais modifiées,voici donc ma premiere question:Comment donc exécuter la macro avec les feuilles de destination protégées?
Ou bien si les dites feuilles ne sont pas protégées,comment empecher de modifier les données apres exécution de la macro?
Voici mon deuxieme problème:
Chaque fois que j'exécute ma macro,si je n'ai pas lancé une nouvelle facture,la macro colle les memes données de la facture dans le relevé client:le probleme est qu'une meme facture peut etre enregistrée plusieurs fois(autant de fois que la macro est exécutée pour la meme facture) dans le relevé du client.
Voici ma deuxième question:Comment éviter que la macro ne s'exécute pas s'il s'agit de la meme facture?;l'identifiant de la facture étant son numero et cela est donné par les cellules suivantes:
-Dans la feuille "Retraitement_relevé",c'est la cellule "C6";
-Dans les feuilles de destination (exemple "00003"),le numero de la facture se trouve dans la plage de cellule allant de "C18:C280".
Merci de m'aider.
A voir également:
La cellule ou le graphique que vous essayez de modifier se trouve sur une feuille protégée
jordane45
Messages postés38145Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention25 avril 2024344 10 mars 2011 à 20:03
Bonjour,
Quand les feuilles de destination exemple:"00003" sont protégées par un mot de passe;la macro ne marche pas
Par défaut si tes feuilles sont protégées tu ne peux pas les editer.
Tu peux indiquer à XL les cellules que tu souhaitent ne pas protéger pour pouvoir, par exemple, y inscrire des données.
Pour cela il faut aller dans la mise en forme des cellules, onglet sécurité et décocher la case vérrouiller les cellules.
Par contre, si après modif de tes cellules, tu sauvegarde le classeur... les modifications seront elles aussi sauvegarder.
Si tu veux empecher qu'on puisse écraser ton classeur, tu peux aussi tout simplement le mettre en lecture seule.. comme ça.. impossible de l'écraser.
Comment éviter que la macro ne s'exécute pas s'il s'agit de la meme facture?
Fais une recherche Dans les feuilles de destination pour voir si ton n° de facture est déjà présent ou non.. S'il existe déjà, tu dis à ta macro de na pas continuer.
Pour effectuer la recherche tu peux passer par une boucle qui lira ligne/ligne tes cellules ou sinon utiliser la fonction FIND.
Exemple avec une boucle :
'Num_Facture correspond au N° de facture à traiter
Num_Facture = Sheets("Retraitement_relevé").Range("C6").value
' Selection de la feuille de destination..
Sheets("00003").Activate
' Définition de la plage a regarder
Dim MaPlage as Range
Set MaPlage = Range("C18:C280")
' Boucle + Test si Facture existe déjà
For Each Cell in MaPlage
ValeurCellule = Cell.value
'Si Facture trouvée.. on sort du programme
If ValeurCellule = Num_Facture The Exit sub
Next
Voila.. c'est un exemple à toi de l'adapter.
Sinon pour la fonction FIND, d'autres sujets sur le fofo l'ont déjà traité.
Je te laisse chercher. (nb : la methode Find est plus rapide pour rechercher des valeurs surtout si il y a beaucoup de lignes à vérifier...)
Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI