Probleme de feuille protégées et repétition de données

cs_Kyas Messages postés 5 Date d'inscription mercredi 9 mars 2011 Statut Membre Dernière intervention 22 mai 2013 - 9 mars 2011 à 14:30
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 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.

1 réponse

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
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
0
Rejoignez-nous