Remplir les cellules d'une grid telle la manière d'excel

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 766 fois - Téléchargée 29 fois

Contenu du snippet

Ces quelques lignes de commande vous permettront de remplir les cellules d'une MSHFlexGrid à la manière d'Excel, évitant ainsi de passer par l'intermediare de inputBox comme je l'ai vu par exemple sur ce site...
Ce code est trés simple...
Imaginons une grille MSHFlexGrid nommé "maGrille"
L'astuce c'est de passer par l'évènement KeyPress qui a lieu lorsque l'utilisateur appuie sur une quelconque touche (lettres capitales et minuscules, chiffres, ponctuation, Entrée, Tab, Retour arrière)

Source / Exemple :


Private Sub maGrille_KeyPress(KeyAscii As Integer)

   maGrille.Col=maGrille.ColSel
   maGrille.Row=maGrille.RowSel
   maGrille.Text=maGrille.Text & Chr(KeyAscii) 'ecris instantanément dans la cellule ce que vous tapez           

' ceci permet une infinité de possibilités, par ex: supprimer le contenu d'une cellule avec la touche Retour arrière
If (KeyAscii=8) Then 'chaque touche correspond a un code, ici Retour correspond au code 8
   maGrille.Text=Empty
End If

Conclusion :


j'espere ke cette petite source pourra en dépanner plus d'un...
Merci a Setaou.

A voir également

Ajouter un commentaire

Commentaires


c'est génial
merci beaucoup vous avez aidé beaucoup avec ce code.
j'ai inséré une ligne avec ton code c'est " If KeyAscii = 13 Then Exit Sub " parceque quand je tape entrée il m'affiche un caractère en arabe c'est pour cela j'ai ajouté cette ligne. merci votre code est génial.
Silmon
Messages postés
85
Date d'inscription
mardi 6 janvier 2004
Statut
Membre
Dernière intervention
7 mai 2007

Salut : Tatman37

Permet moi de te faire qq comentaires:

- 1: Je ne t'ai pas noté; et j'en profite pour dire que qui note devrait laisser un comentaire avec un minimum d'explication (on me l'a déjá fait celle-lá)

- 2: Bravo ton idée est originale.

- 3: Les 2 premieres lignes de ton code ne servent à rien:
maGrille.Col=maGrille.ColSel
maGrille.Row=maGrille.RowSel

Tu commets l'erreur commun de confondre les propriétés
ColSel et RowSel. Ces dernières ne fournissent pas la colonne ou ligne active mais la ligne/colonne d'un cliqué-deplacé de la sourie.
Par exemple:
Si Row=5 et RowSel=7, cela veut dire que la ligne active est 5 mais que l'user a selectionné jusqu'à la ligne 7

En conclusion tu peux supprimer ces deux lignes.

- 4: Ton exemple m'a appris l'utilisation du mot clé 'Empty'. Merci je l'ignorais.

- 5: En parlant de mot clé. C'est plus pro de mettre
if KeyAscii= vbKeyBack then
que
if KeyAscii= 8 then
Ça revient au meme, mais ton code sera plus lisible

- 6: Dans ton code, au lieu de:

maGrille.Text=maGrille.Text & Chr(KeyAscii)
If (KeyAscii=8) Then
maGrille.Text=Empty
End If

Il vaut mieux mettre:

If (KeyAscii=8) Then
maGrille.Text=Empty
else
maGrille.Text=maGrille.Text & Chr(KeyAscii)
End If

Sinon les codes speciaux seront traités deux fois.

- 7: Et pendant qu'on y est, il faut penser a traiter les codes:

13 => Enter (vbKeyReturn);
3 => Ctrl+C (copier) ;
22 => Ctrl+V (coller) ;
24 => Ctrl+X (couper)

Si tu veux les ignorer alors mets: KeyAscii=0

- 8: Finalement, un select case est plus rapide qu'un gros bloc de If... elseif

- 9: Merci

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.