[EXCEL03] Changement automatique de clavier

impolitis Messages postés 11 Statut Membre -  
impolitis Messages postés 11 Statut Membre -
Bonjour,

Une autre question.

Voilà, je gère un dictionnaire multilingue qui devient lourd et complexe du fait de l'utilisation de différents claviers (claviers de l'option de la barre des langues sous XP).

Est-il possible par un code de sélectionner le clavier actif en fonction de la colonne où le curseur est positionné. En clair, je voudrais :
Colonne B - clavier Français
Colonne C - clavier grec
etc.
(j'adapterai)

Merci pour votre aide.

6 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    J'ai eu une lecture plus restrictive que ange : sélectionner le clavier actif

    Il faut d'abord que tu ailles définir des raccourcis clavier pour chaque langue via le panneau de configuration 'région et langue / claviers et langues / modifier les claviers... / paramètres de touches avancés' et par exemple :
    Ctrl+Maj+0 : français
    Ctrl+Maj+1 : anglais
    Ctrl+Maj+2 : grec
    ....

    A mettre dans le code de la feuille concernée :
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Select Case Target.Column
        Case 2    'colonne B
            SendKeys ("^+(1)") ' clavier anglais
        Case 3, 4    'colonnes C, D
            SendKeys ("^+(2)") 'clavier grec
        Case Else ' sinon
            SendKeys ("^+(0)") ' clavier français
        End Select
    End Sub


    Et tant qu'on y est :
    clavier français si tu quittes ta feuille dictionnaire (Feuil2 par exemple):
    Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
        If Sh.Name = "Feuil2" Then SendKeys ("^+(0)")
    End Sub


    clavier français à la fermeture du classeur :
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
        SendKeys ("^+(0)")
    End Sub


    eric
    2
  2. Ange420 Messages postés 437 Statut Membre 236
     
    Difficile d'avoir deux correcteurs orthographiques sur la même feuille excel, j'ai essayé par colonne, il garde la dernière langue utilisée en mémoire.
    Par contre va voir ici
    https://support.microsoft.com/fr-fr/office/pack-d-accessoires-linguistiques-pour-office-82ee1236-0f9a-45ee-9c72-05b026ee809f?ocmsassetid=ha010354264&ctt=5&origin=ha010361028&correlationid=b39f49c9-878e-4b77-876f-9a94f1e26e22&ui=fr-fr&rs=fr-fr&ad=fr
    et ici pour étudier de plus près si cela peut être intéressant pour toi.
    http://office.microsoft.com/fr-ch/excel-help/instructions-pas-a-pas-preparation-de-lordinateur-a-la-saisie-et-a-la-modification-dun-texte-dans-une-langue-differente-HA010354271.aspx?CTT=5&origin=HA010354264
    Après peut être qu'en Vb il est possible d'affilier une langue à une colonne, je laisse aux développeurs le soin de répondre à ta question.
    Bon courage et j'espère que tu trouveras une solution
    0
  3. impolitis Messages postés 11 Statut Membre
     
    Merci à vous deux.

    @ ange
    Je n'utilise pas de correcteur orthographique car ils me posent plus de problèmes qu'ils n'apportent de solution.

    @ eriiic

    Merci, cela fonctionne à merveille.

    Un point reste à améliorer :
    Voici ma ligne concernant la sortie de la feuille...

    Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
    If Sh.Name = "Lexiko" Then SendKeys ("^+(2)") ' clavier français en quittant
    End Sub

    Cela ne fonctionne pas.

    Je n'ai pas utilisé les mêmes combinaisons de touche que toi.

    En tout cas un grand merci cela me soulage énormément.

    EDIT : En fait cela fonctionne très bien, il ne fallait tout simplement pas mettre le code au même endroit. Dans Thisworkbook ça va de suite beaucoup mieux. Je dormais un peu ;-)
    0
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Oui, les 2 autres macros sont bien à mettre dans thisworkbook.
      N'oublie pas de mettre en résolu ;-)
      eric
      0
    2. Ange420 Messages postés 437 Statut Membre 236
       
      Merci Eriiic,
      Si tu permets je la conserve aussi elle peut me servir en formation pour des prof.
      Bonne continuation
      0
    3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Pas de soucis ange, les forums sont faits pour ça :-)
      0
    4. Ange420 Messages postés 437 Statut Membre 236
       
      Merci beaucoup !!
      0
  4. impolitis Messages postés 11 Statut Membre
     
    Bon, je rouvre parce qu'il y a un petit hic...

    Sur cette Feuil j'ai un autre code qui me ramène le curseur dans la première cellule libre en bas de B après modife d'une cellule.
    Le problème est que lorsque j'atteris en Bxxxx après avoir validé une cellule n'importe où, le clavier grec n'est pas détecté.

    Voici mes deux codes, expérimentaux pour l'instant :

    ' Curseur première cellule libre de B
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column > 1 Then ' si col. à partir de B
    Range("b" & Rows.Count).End(xlUp).Offset(1).Select ' envoi du curseur
    End If
    End Sub

    ' Clavier fonction de colonne
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Select Case Target.Column
    Case 2 'colonne B
    SendKeys ("^+(1)") ' clavier grec
    Case 3 'colonnes C
    SendKeys ("^+(2)") ' clavier français
    End Select
    End Sub

    Une idée du comment du "coinçage" ?
    0
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      sous ton .select ajoute :
      Call Worksheet_SelectionChange(Target)

      et n'oublie pas de mettre en résolu... ;-)
      eric
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. impolitis Messages postés 11 Statut Membre
     
    Merci eriiic.

    Cependant cela ne fonctionne pas.

    J'ai maintenant ces deux codes :

    ' Curseur première cellule libre de B
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column > 1 Then ' si col. à partir de B
    Range("b" & Rows.Count).End(xlUp).Offset(1).Select ' envoi du curseur
    Call Worksheet_SelectionChange(Target)
    End If
    End Sub

    ' Clavier fonction de colonne
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Select Case Target.Column
    Case 2 'colonne B
    SendKeys ("^+(1)") ' clavier grec
    Case 3 'colonnes C
    SendKeys ("^+(2)") ' clavier français
    End Select
    End Sub

    pourtant la logique me semble correcte, de même que la syntaxe. Y'a un binz...
    0
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Bonjour,

      Sur mes tests ça semblait marcher pourtant...
      Mets-y directement le sendkeys alors... Il faudra seulement penser en cas de modif à le faire aux 2 endroits.
      eric
      0
  7. impolitis Messages postés 11 Statut Membre
     
    Qu'entends tu par mettre directement le SendKeys ?

    ' Curseur premi?re cellule libre de B
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column > 1 Then ' si col. ? partir de B
    Range("b" & Rows.Count).End(xlUp).Offset(1).Select ' envoi du curseur
    SendKeys ("^+(1)") ' clavier grec
    End If
    End Sub

    Ceci ne fonctionne pas, mais il n'y a pas de déclaration de changement...

    Sur tes tests... Es-tu sous EX2003 ?

    Merci de ton aide.
    0