OVH Cloud OVH Cloud

Optimiser mon premier programme

8 réponses
Avatar
Ticker
Bonjour à tous.
J'ai enfin terminer la première partie de mon premier programme (avec votre
aide, je l'admet), un dictionnaire Chinois - Français. Bon, il est loin
d'être parfait étant donné qu'il y a 1 mois encore, je ne connaissais rien à
VBA.
Maintenant, j'aimerai continuer à progresser, c'est pour cela que je mets
mon code à disposition. Pour pouvoir être corrigé. Bien sûr, je ne
demande pas une correction intégrale, mais juste des petites parties, ici et
là avec des commentaires pour m'expliquer pourquoi une chose plutôt qu'une
autre, des astuces que les débutants ne connaissent pas.
Toute remarque est bienvenue. Mon programme n'est pas des plus véloce, ce
qui me parait normal vu le système de recherche de mots :-/

Je peux aussi vous envoyez le fichier Excel (82 Ko)
Pour ceux qui sont intérressés, sachez qu'il vous faudra installer Microsoft
Global IME pour afficher les caractères chinois (chinois simplifié, env.
22mo ). Je vous donne ce lien pour choisir la version qu'il vous faut:

http://www.lechinois.com/logiciel/globalime.html


Pour ceux qui ne veulent pas télécharger tout ça, je mets le code ici :

---------------------------------------------------------------------------
--------------------------------------------------------------------------
Public Index As Integer
---------------------------------------------------------------------------
Private Sub CommandButton1_Click()
Dim Colonne As Integer
Dim Indice As Integer
Dim MotActuel As String
Dim Caption As String

'Initialisation
Label6.Caption = "Français -> Chinois"
ListBox1.Clear
Label4.Caption = ""
MotActuel = ""
Caption = ""
TextBox1.Text = ""
Index = 0
Colonne = 2
Ligne = 0

'Création de l'index
Do
Ligne = Ligne + 1
Index = Index + 1
Loop Until Cells(Ligne, 1) = ""

'On cherche tous les mots français présent dans la feuille excel et on copie
les mots dans la dernière colonne pour les classer
Ligne = 0
Indice = 0
While Colonne <= 5
While Ligne <= Index - 1
Ligne = Ligne + 1
Indice = Indice + 1
MotActuel = Cells(Ligne, Colonne)
If MotActuel <> "" Then Cells(Indice, 256) = MotActuel Else
Indice = Indice - 1
Wend
Ligne = 0
Colonne = Colonne + 1
Wend

'On effectue le classement par ordre alphabétique des mots en français
Columns("IV:IV").Select
Selection.Sort Key1:=Range("IV1"), Order1:=xlAscending,
Header:=xlGuess,_
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

'On place la liste classée dans la listbox "dictionnaire" (Listbox1)
Ligne = 0
Do
Ligne = Ligne + 1
MotActuel = Cells(Ligne, 256)
ListBox1.AddItem (MotActuel)
Loop Until Cells(Ligne, 256) = ""
ListBox1.RemoveItem (ListBox1.ListCount - 1)
Label7.Caption = "Il y a actuellement" & Str(Ligne) & " mots français
référencés"

'On libère la colonne 256
Range("Classe").Clear

End Sub
----------------------------------------------------------------------------
-
Private Sub CommandButton2_Click()
Dim Ligne As Integer
Dim Colonne As Integer
Dim MotActuel As String
Dim Caption As String

'Initialisation
Label6.Caption = "Chinois -> Français"
ListBox1.Clear
Label4.Caption = ""
MotActuel = ""
Caption = ""
TextBox1.Text = ""
Index = 0
Colonne = 7
Ligne = 0

'Création de l'index
Do
Ligne = Ligne + 1
Index = Index + 1
Loop Until Cells(Ligne, 1) = ""


'On cherche tous les mots chinois présent dans la feuille excel et on copie
les mots dans la dernière colonne pour les classer
Ligne = 0
Indice = 0
While Colonne <= 11
While Ligne <= Index - 1
Ligne = Ligne + 1
Indice = Indice + 1
MotActuel = Cells(Ligne, Colonne)
If MotActuel <> "" Then Cells(Indice, 255) = MotActuel Else Indice =
Indice - 1
Wend
Ligne = 0
Colonne = Colonne + 1
Wend

'On effectue le classement par ordre alphabétique des mots en français
Columns("IU:IU").Select
Selection.Sort Key1:=Range("IU1"), Order1:=xlAscending, Header:=xlGuess,
_
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

'On place la liste classée dans la listbox "dictionnaire" (Listbox1)
Ligne = 0
Do
Ligne = Ligne + 1
MotActuel = Cells(Ligne, 255)
ListBox1.AddItem (MotActuel)
Loop Until Cells(Ligne, 255) = ""
ListBox1.RemoveItem (ListBox1.ListCount - 1)
Label7.Caption = "Il y a actuellement" & Str(Ligne) & " mots chinois
référencés"

'On libère la colonne 255
Range("Classe2").Clear

End Sub
-----------------------------------------------------------------------
Private Sub CommandButton3_Click()
Dim Mot As String
Dim Ligne As Integer
Dim Colonne As Integer
Dim Caption As String
Const Genre As Single = 13

If Label6.Caption = "Français -> Chinois" Then


'Recherche du mot à traduire de Français -> Chinois
Mot = TextBox1.Text

Ligne = 1
Colonne = 2
While Cells(Ligne, Colonne) <> Mot And Ligne <= Index - 1
Colonne = Colonne + 1
If Colonne = 5 Then Ligne = Ligne + 1: Colonne = 2
Wend

If Ligne = Index Then Label4.Caption = "Désolé, rien trouvé.": Exit Sub

'Affichage de la traduction de Français -> Chinois
Caption = ""
Label4.Caption = Cells(Ligne, Genre) & Cells(Ligne, 6)

Else

'Recherche du mot à traduire de Chinois -> Français
Mot = TextBox1.Text

Ligne = 1
Colonne = 7
While Cells(Ligne, Colonne) <> Mot And Ligne <= Index - 1
Colonne = Colonne + 1
If Colonne = 12 Then Ligne = Ligne + 1: Colonne = 7
Wend

If Ligne = Index Then Label4.Caption = "Désolé, rien trouvé.": Exit Sub

'Affichage de la traduction de Chinois -> Français
Caption = ""
Label4.Caption = Cells(Ligne, Genre) & Cells(Ligne, 12)

End If

End Sub
----------------------------------------------------------------------------
-
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)

'Le mot selectionné est placé dans la boite de saisie
TextBox1.Text = ListBox1.Text

End Sub

----------------------------------------------------------------------------
-
Private Sub TextBox1_Change()

'Remerciement à M. Denis Michon pour son aide sur cette partion de code

Dim ListBox1(), Nb As Integer, A As Integer
Dim C As String, B As Variant

On Error GoTo Sortie
Label4.Caption = ""

Nb = Me.ListBox1.ListCount - 1

ReDim Preserve ListBox1(Nb)
For A = 0 To Nb
ListBox1(A) = Left(Me.ListBox1.List(A), Len(Me.TextBox1))
Next

C = Me.TextBox1.Text
B = Application.Match(C, ListBox1, 0)

If Not IsError(B) Then
Me.ListBox1.Value = Me.ListBox1.List(B - 1)
End If

Sortie:
Exit Sub

End Sub
-------------------------------------------------------------
---------------------------------------------------------------
Il ne me semble pas avoir de bug, c'est déjà ça. J'avoue que pour la
recherche et surtout pour la textbox1 , je voulais utiliser un module ou une
fonction car c'est quelque chose que je vais utiliser par la suite (d'autres
textbox, mais sur 1 autre userform), mais je n'ai pas réussi à trouver la
syntaxe correct :-(

Merci à ceux qui m'ont aidés (notamment M. Michon) et ceux qui veulent
m'aider à bien le finir.

P.S: Si vous voyez des fautes d'orthographes, n''hésitez pas, un
dictionnaire avec des erreurs , bof bof...

8 réponses

Avatar
Daniel.M
Merci à ceux qui m'ont aidés (notamment M. Michon) ...


Sûrement un M. de politesse, oui Monsieur!

Salutations,

Daniel M.

Avatar
Daniel.M
Salut Ticker,

1. Tu pourrais découvrir les index plus rapidement en ayant recours à la méthode
.End(xlDown)
Mais puisque cela ne se produit qu'à l'initialisation, peut-être que cela n'est
pas aussi critique. Mais je verrais facilement un filtre sans doublons. Puis un
tri (que tu fais déjà).

2. Dans CommandButton3_Click, tes recherches devraient être réalisées par
Application.Match, et non pas itérer une cellule à la fois.
Prends exemple sur le code donnée en TextBox1_Change par le bon monsieur ;-)

Salutations,

Daniel M.
Avatar
Denis Michon
"Sûrement un M. de politesse"

Bien sûr que oui !

Pourquoi écrit le M. après ton nom, toi ?

;-))


Salutations!



"Daniel.M" a écrit dans le message de news:%
Merci à ceux qui m'ont aidés (notamment M. Michon) ...


Sûrement un M. de politesse, oui Monsieur!

Salutations,

Daniel M.

Avatar
Daniel.M
Pourquoi écrit le M. après ton nom, toi ?


En le mettant après, je suis sûr de ne pas me faire appeler Miche ou Michel.
;-))

Daniel M.

Avatar
michdenis
En le mettant après, je suis sûr de ne pas me faire appeler Miche ou Michel.


Je sais entrenir le quiproquo !!!

;-))


Salutations!
Avatar
Misange
Ticker wrote:
Bonjour à tous.
J'ai enfin terminer la première partie de mon premier programme (avec votre
aide, je l'admet), un dictionnaire Chinois - Français. Bon, il est loin
d'être parfait étant donné qu'il y a 1 mois encore, je ne connaissais rien à
VBA.



Ouf !!! imagine si c'était le chinois que tu avais commencé il y a
seulement un mois ! :-)

Avatar
Ticker
Lol, il en faut parfois peut pour vous faire débattre :o)
Le M. , c'est pour moi une marque de politesse et de respect. Normal,
puisque l'on m'a aidé, alors qu'il n'etait pas obligé. Cela dit, je suis
poli même si on ne m'a pas spécialement aidé.
Voilà,voilà


"michdenis" a écrit dans le message de news:

En le mettant après, je suis sûr de ne pas me faire appeler Miche ou
Michel.



Je sais entrenir le quiproquo !!!

;-))


Salutations!




Avatar
Ticker
Ah bah,je me suis mis au chinois il n'y pas très longtemps non plus. Depuis
janvier, quand j'ai fais la connaisance de mes amis de l'empire du milieu.
Me voilà à raconter ma vie, sic, désolé. J'suis completement hors sujet là.


"Misange" a écrit dans le message de news:
#ufPh#

Ticker wrote:
Bonjour à tous.
J'ai enfin terminer la première partie de mon premier programme (avec
votre


aide, je l'admet), un dictionnaire Chinois - Français. Bon, il est loin
d'être parfait étant donné qu'il y a 1 mois encore, je ne connaissais
rien à


VBA.



Ouf !!! imagine si c'était le chinois que tu avais commencé il y a
seulement un mois ! :-)