Reconnaissance automatique d'une ligne sélectionnée

Reconnaissance automatique d'une ligne sélectionnée - VB/VBA/VBS - Programmation

Marsh Posté le 01-03-2012 à 22:09:49    

Bonsoir à tous.
 
Je travaille sur Vba pour Excel 2003 et j’ai besoin d’un coup de main. A l’intérieur de la procédure suivante, dans Workbook :
 
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
 
End sub
 
… je souhaite, dans une base de données, empêcher la modification de n’importe quelle ligne que je sélectionne (par exemple :interdire une insertion de ligne, une suppression de ligne, etc…).
Mon souci est que je n’arrive pas à faire reconnaître la ligne que je sélectionne quand je clique sur la partie gauche de la feuille de calcul (partie grise comprenant les numéros de lignes).
 
Quelqu’un peut-il me donner le code qu’il écrirait pour que cette ligne variable soit reconnue dès que je la sélectionne.
 
Merci pour votre aide. A+
 
AlainLi

Reply

Marsh Posté le 01-03-2012 à 22:09:49   

Reply

Marsh Posté le 09-03-2012 à 10:48:32    

Hello
 
Bah il faut utiliser le target de "ByVal Target as Range"
 
Par exemple pour envoyer un message de la ligne sélectionnée ca serait :

Code :
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2.      MsgBox Target.Row
  3. End Sub

Message cité 1 fois
Message édité par SuppotDeSaTante le 09-03-2012 à 10:48:42

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 12-03-2012 à 22:21:14    

SuppotDeSaTante a écrit :

Hello
 
Bah il faut utiliser le target de "ByVal Target as Range"
 
Par exemple pour envoyer un message de la ligne sélectionnée ca serait :

Code :
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2.      MsgBox Target.Row
  3. End Sub



 
 
Bonsoir et merci pour ton information qui m'a permis de coder pour contrôler une zone et autoriser sa modification par la saisis d'un mot de passe.
 
Si éventuellement tu as la combine pour reconnaître une désélection dans une ListBox, je suis preneur. J'ai posé en effet une question, il y a plusieurs semaines et, malgré pas mal de lectures, aucun ne m'a pour l'instant donné la solution. (cf. question du 7/02/2012 - Reconnaissance désélection dans ListBox).  
 
Bonne soirée ! Cordialement.

Reply

Marsh Posté le 13-03-2012 à 13:58:22    

Hello
 
Pour ta listbox je ne comprends pas ton souci...
En fait pour savoir si c'est désélectionné, il faut reparcourir le fichier et le comparer avant la désélection.
Mais c'est peut etre pas ca que tu veux...
 
Surement pour ca que personne à répondu :lol: C'est pas très très clair


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 13-03-2012 à 21:14:14    

SuppotDeSaTante a écrit :

Hello
 
Pour ta listbox je ne comprends pas ton souci...
En fait pour savoir si c'est désélectionné, il faut reparcourir le fichier et le comparer avant la désélection.
Mais c'est peut etre pas ca que tu veux...
 
Surement pour ca que personne à répondu :lol: C'est pas très très clair


 
 
Bsr.
Ok. Je vais donc être plus simple !  
Dans un UserForm, j'ai une ListBox qui comprend plusieurs colonnes, dont le contenu change régulièrement. J'ai programmé l'option de multi sélection qui me permet de sélectionner plusieurs lignes en même temps.
Quand j'ai besoin de calculer la somme des lignes que je sélectionne, à chaque clic sur n'importe quelle ligne de la ListBox, son montant est automatiquement chargé dans une autre ListBox qui fait office de calculette. Or, quand je déselectionne une ligne dans ma ListBox à plusieurs colonnes, il faudrait que le montant soit soustrait alors qu'il s'ajoute une nouvelle fois. Le montant s'en trouve donc faussé.
Par conséquent, il faut que je parvienne à faire reconnaître la déselection de n'importe quelle ligne qui était déjà en surbrillance mais, malgré ma réflexion, je ne trouve pas. Je précise que le code que j'ai saisi fonctionne parfaitement et reconnaît toute les lignes que je sélectionne dans la ListBox.
 
Est-ce plus clair ?
Merci si quelqu'un peut me répondre.
 
A.L

Reply

Marsh Posté le 13-03-2012 à 21:24:58    

A partir du moment où tu sais ceux qui sont selectionnés, tu sais ceux qui ne le sont pas.
Tu listes tous les items de ta listbox, si c'est selectionné tu ajoutes, sinon tu soustrais.
Tu sais afficher si c'est selectionné (le code de ton post precedent), tu sais donc si ca ne l'est pas.
 
If .selected(i)=false


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 14-03-2012 à 21:17:00    

J'ai déjà essayé avec ce que tu proposes mais cela ne reconnait pas la déselection d'une ligne déjà sélectionnée parmi d'autres lignes. Donc :
- soit je ne place pas le code au bon endroit dans la procédure ;
- soit je dois activer une autre procédure spécifique ???
 
A.L

Reply

Marsh Posté le 16-03-2012 à 15:26:10    

Bah écoute je n'ai aucun souci...
Il faut essayer avant de dire que ca ne marche pas... ;)
 
[:dje69r:3]  
 
Donc, si j'ai une liste que j'appelle : Liste
(toujours cette imagination débordante !)
 
Dans cette liste j'ai ces valeurs en colonne 0 (la 1ère)
1000
2000
3000
4000
 
Avec ce code :

Code :
  1. Private Sub Liste_AfterUpdate()
  2. A = ""
  3. With Liste
  4.         For I = 0 To .ListCount - 1
  5.             If .Selected(I) Then
  6.                 A = A & "+" & .Column(0, I)
  7.             Else
  8.                 A = A & "-" & .Column(0, I)
  9.             End If
  10.         Next I
  11.     End With
  12. MsgBox Eval(A)
  13. End Sub


 
 
Si je sélectionne 1000 et 4000, il renvoie bien 0 car 2000 et 3000 sont renvoyés comme négatifs et 1000 + 4000 - 2000 - 3000 = 0
Idem :
Si je sélectionne 1000 seulement, ca me renvoie -8000 (1000 - 2000 - 3000 - 4000 = -8000)
Si je sélectionne 1000, 3000 et 4000 il me renvoie 6000 (1000 - 2000 + 3000 + 4000 = 6000)
Etc.
 
 
N'oublie pas ma fête :lol: Pas le bon post


Message édité par SuppotDeSaTante le 16-03-2012 à 15:27:54

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 16-03-2012 à 23:18:23    

Merci Dje69r
C'est sympa d'avoir réfléchi sur le sujet. Dès que je le peux - étant absent ce WE - je tente l'adaptation et je te dirai.
Merci encore.
 
A+.
 
A.L

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed