[VBA] Emplacement code vba

Résolu/Fermé
Skeo - Modifié par Skeo le 4/05/2010 à 08:29
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 4 mai 2010 à 16:00
Bonjour CCM.

J'ai le code suivant à exécuter automatiquement en fonction d'une valeur d'une cellule:

Sub effacer_ligne()
Dim DerLig As Long
Dim fourni As String
Dim num As Long
DerLig = Range("H13").End(xlDown).Row
For i = 13 To DerLig
fourni = Range("A" & i).Value
num = Range("B" & i).Value
If ActiveCell.Value = "Supprimer" Then
If MsgBox("Êtes vous sûr de vouloir supprimer la commande " & fourni & " N° " & num & "?", vbQuestion + vbOKCancel, "Suppression de commande") = vbOK Then
Selection.EntireRow.Delete
Else: Exit Sub
Else: Exit Sub
Next i
End Sub

Mais je ne sais pas ou placer ce code j'ai essayer dans Feuil2, Feuil3 etc (pour toutes les feuilles où le code doit s'exécuter). Je ne pense pas que ce code doit être placé dans this workbook (mais peut être je me trompe) ou doit-il être placé dans un modul clasique et adapté je ne sais pas...

Merci de m'éclairer


A voir également:

2 réponses

Personne n'a la moindre petite idée?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
Modifié par pijaku le 4/05/2010 à 09:04
Salut skeo,
Ce que tu veux c'est que ton code s'exécute automatiquement, lorsque quelque chose se passe sur ta feuille. On parle donc ici d'évènement. Tu en as plusieurs qui permettent le déclenchement de macro.
Pour les trouver :
clic droit sur l'onglet de ta feuille concernée/visualiser le code, Visual Basic s'ouvre sur la feuille concernée. En haut 2 menus déroulants :
1- général : ici tu indiques ce qui est concerné par l'évènement. Dans ton cas choisir : Worksheet
2- déclarations : ici tu trouveras tout les évènements liés à l'objet "worksheet".
A toi de choisir.

Pour plus de facilité, je t'en donne 2 mais tu pourras facilement tester les autres :
1- SelectionChange :
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
'place ton code ici 
End Sub
Te permet de "déclencher" ton code à chaque fois que... la sélection change

2- Activate :
Private Sub Worksheet_Activate() 
'place ton code ici 
End Sub

Déclenche le code à chaque fois que ta feuille devient la feuille active.

Exercice pour te familiariser avec ces évènements :
Prends une macro toute simple comme :
If [A1] = "" Then 
[A1] = 1 
Else 
[A1] = "" 
End If

et teste tous les évènements.
Bon courage
Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ou est le problème? --
0
Merci de ta réponse je vais essayer ça tout de suite.

J'étais justement en train de parcourir cette page: https://silkyroad.developpez.com/vba/fonctions/ . Je n'y avais pas encore trouvé la réponse mais je savais bien que j'étais sur la bonne voie! Persévérer et chercher par soit même à toujours du bon même si un petit coup de main de temps en temps n'est pas de refus! ;p Mais ça ne m'empêche pas de creuser ce tuto (qui est d'ailleurs de très bonne qualité)

J'essaye ça tout de suite et je te tiens au courant.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
4 mai 2010 à 09:18
remarque que je ne t'ai pas donné la réponse "toute crue" pour te laisser un peu chercher. Tu te familiarisera davantage avec la bête en regardant cela par toi même.
C'est en buchant qu'on devient bucheron...
0
Mais c'est bien mieux comme ça je trouve!!! Il y a trois semaines j'avais jamais fait de vba mais à force de chercher je suis en passe de réussir à faire un petit programme pour gérer le planning de ma boite et honnêtement je suis content de moi c'est pas mal du tout je trouve en toute modestie. Bon je ne suis pas programmeur et l'informatique n'est pas mon métier alors à mon échelle c'est bien. Et le pire c'est que si on m'avais tout filé tout cuit je serais bien incapable de recommencer et je n'aurai rien appris ce qui n'est pas le cas. C'est la satisfaction de la tache accomplie

J'aurais cependant une question:

Je ne saisis pas vraiment le contenu de la seconde liste déroulante... Par exemple SelectionChange fait référence à quelle sélection?

En tout cas ça marche très bien mais peut tu me dire pourquoi (parce que malgré mes efforts je ne trouve pas) la ligne ne s'efface qu'une fois qu'on sélectionne une autre cellule puis qu'on re-sélectionne celle où il est inscrit "supprimer". Et pourquoi le numéro de commande et le fournisseur ne marche que pour la première ligne aurais-je fait une boulette dans le code?

Merci encore
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
4 mai 2010 à 10:06
1- pourquoi la ligne ne s'efface qu'une fois qu'on sélectionne une autre cellule puis qu'on re-sélectionne celle où il est inscrit "supprimer". C'est le principe même de SelectionChange... Tu dois avoir les 2 critères : la cellule active doit changer ET elle doit contenir "supprimer"
2- Et pourquoi le numéro de commande et le fournisseur ne marche que pour la première ligne Ben même réponse... Si activecell différent de "supprimer" Exit Sub.
Si j'ai bien compris ce que tu souhaites faire, remplace tes 2 : Else: Exit Sub par End If. Teste tu verras.
0
1- Y a-t-il alors un moyen de supprimer la ligne dès que "supprimer" est dans la cellule, c'est à dire sans que l'on est à sélectionner une autre cellule puis revenir sur "supprimer". En fait mon but est de choisir parmi une liste de choix déroulant une option et si "supprimer" est sélectionné alors supprimer sans plus d'opération (hormis la msgbox).

2- Même résultat avec les end if. Je souhaiterais "simplement" que avant de supprimer on puisse dans le cas d'une fausse manoeuvre annuler l'opération avant qu'il n soit trop tard et pour plus de précision il faut que j'affiche le fournisseur et le numéro de commande que l'opérateur a choisi de supprimer pour confirmer cette action.
0