macro Excel

macro Excel - VB/VBA/VBS - Programmation

Marsh Posté le 23-02-2006 à 09:21:00    

bonjour
 
je voudrais savoir s'il est possible qu'une macro s'exécute à chaque saisie dans une cellule
c'est à dire sans avoir à appuyer sur un bouton
 
mon problème est que je recherche une possiblité de savoir si plusieurs cases sont saisies (différentes de blanc)sur une meme ligne
j'ai 4 cellules à controler sur cette meme ligne, il ne m'en faut qu'une de saisie
 
si quelqu'un a une idée de génie et qu'il veuille bien m'en faire part
 
merci beaucoup

Reply

Marsh Posté le 23-02-2006 à 09:21:00   

Reply

Marsh Posté le 23-02-2006 à 10:00:52    

question bête, mais pourquoi ne pas rajouter une colonne qui teste si plusieurs cases sont saisies ? peux tu être plus précis sur ton besoin?


---------------
Envie de scripting ? Lisez donc "Scripting Windows" aux Editions Eyrolles ! tout pour apprendre le scripting orienté infrastructure Microsoft, en français dans les textes et exemples.  http://www.eyrolles.com/Informatiq [...] 212116922/
Reply

Marsh Posté le 23-02-2006 à 10:35:31    

Si tu veux lancer ton test en automatioque tu peux utiliser la Private Sub Worksheet_SelectionChange(ByVal Target As Range) ou Private Sub Worksheet_Change(ByVal Target As Range) de la feuille de calcul concernée.
Voilà un petit exemple simple de comment elle va fonctionner :

Code :
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. If Target.Row = 1 Then
  3.     MsgBox ("Saisie en ligne 1" )
  4.     'tu peu aussi placer ici un call...
  5. End If
  6. If Target.Column = 2 Then
  7.     MsgBox ("Saisie en colone B" )
  8. End If
  9. End Sub


@+


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Marsh Posté le 23-02-2006 à 11:02:20    

pilosite a écrit :

question bête, mais pourquoi ne pas rajouter une colonne qui teste si plusieurs cases sont saisies ? peux tu être plus précis sur ton besoin?


 
je n'ai pas trouvé comment formuler ma formule
mais c'est bien ce principe

Reply

Marsh Posté le 23-02-2006 à 11:04:39    

watashi a écrit :

Si tu veux lancer ton test en automatioque tu peux utiliser la Private Sub Worksheet_SelectionChange(ByVal Target As Range) ou Private Sub Worksheet_Change(ByVal Target As Range) de la feuille de calcul concernée.
Voilà un petit exemple simple de comment elle va fonctionner :

Code :
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. If Target.Row = 1 Then
  3.     MsgBox ("Saisie en ligne 1" )
  4.     'tu peu aussi placer ici un call...
  5. End If
  6. If Target.Column = 2 Then
  7.     MsgBox ("Saisie en colone B" )
  8. End If
  9. End Sub


@+


 
 
merci pour cette première information
maintenant je n'arrive pas à trouver le code qu'il me faut pour controler la saisie de plusieurs cellules sur la meme ligne
je suis plus que novice dans VB

Reply

Marsh Posté le 23-02-2006 à 14:36:56    

footelle a écrit :

merci pour cette première information
maintenant je n'arrive pas à trouver le code qu'il me faut pour controler la saisie de plusieurs cellules sur la meme ligne
je suis plus que novice dans VB


Hummmmm t'as pas commencé par le plus simple ;)
Tu as de la chance j'ai un peu de temps et je t'ai préparé un tit code. Pour le mettre en place:
dans visual basic éditor tu double clique sur la feuille concernée et tu colle tout ce que je t'ai mis en dessous. Je t'ai commenté le code, tu devrais pouvoir le modifier en cherchant un peu...
La fonction qui test :

Code :
  1. Function TestSaisie(ByVal Ligne As Integer) As Boolean
  2. 'Fonction permettant de valider une saisie conforme
  3. 'pour une ligne donnée
  4. 'renvois true pour conforme
  5. 'Déclaration des variables
  6. Dim a As Integer
  7. a = 0
  8. 'Pour chaque colone concernée il faut placer une ligne comme ci dessous
  9. 'dans cells les 2, 3, 4 et 5 définissient le numéro des colonnes
  10. 'pour B, C, D, E
  11. 'A chaque fois que la cellule est remplie a augmente de 1
  12. If ActiveSheet.Cells(Ligne, 2).Value <> "" Then a = a + 1
  13. If ActiveSheet.Cells(Ligne, 3).Value <> "" Then a = a + 1
  14. If ActiveSheet.Cells(Ligne, 4).Value <> "" Then a = a + 1
  15. If ActiveSheet.Cells(Ligne, 5).Value <> "" Then a = a + 1
  16. 'test pour valider la saisie
  17. If a <= 1 Then '<= au nombre de colones pleines maximum
  18.     'Ta saisie est conforme
  19.     TestSaisie = True
  20. Else
  21.     TestSaisie = False
  22. End If
  23. End Function


L'appel dans la feuille pour test systèmatique

Code :
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. 'J' ai considéré que la plage de saisie commençait à la ligne 2
  3. If Target.Row > 2 Then
  4.     ' J'ai défini que le test porte sur les colonnes B à E
  5.     If Target.Column >= 2 And Target.Column <= 4 Then
  6.         If TestSaisie(Target.Row) = False Then
  7.             'Te vide la cellule qui vient d'être remplie
  8.             Target.Value = ""
  9.             'indique à l'utilisateur pourquoi c'est vidé
  10.             'Tu retrouve B C D E testé dans la fonction
  11.             MsgBox ("Vous ne pouvez saisir qu'une valeur dans les colones B, C, D, E" )
  12.         End If
  13.     End If
  14. End If
  15. End Sub


@+


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Sujets relatifs:

Leave a Replay

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