]]>

samedi 31 mars 2007

Resoudre un Sudoku avec Excel

Je vous ai créé une macro excel qui permet de résoudre vos "Sudoku". Pour pouvoir, l'utiliser

1 Créez un classeur Excel
2 Renommez la Feuil1 Sudoku
3 Créer un bouton
4 Copiez coller le code suivant

Sub solution()

Call raz
impasse = 1
impasse_ini = 1
num_ligne_impasse = 1
num_colonne_impasse = 1

recherche_nouveau:
'recherche par ligne
For num_ligne_control = 1 To 9
For num_colonne_control = 1 To 9
chiffre_ligne = Sheets("Sudoku").Cells(num_ligne_control, num_colonne_control).Value
If chiffre_ligne <> "" Then
Call elimine_ligne(chiffre_ligne, num_ligne_control)
Sheets("Sudoku").Cells(num_ligne_control, num_colonne_control + 11) = ""
End If
Next num_colonne_control
Next num_ligne_control
'recherche par colonne
For num_colonne_control = 1 To 9
For num_ligne_control = 1 To 9
chiffre_colonne = Sheets("Sudoku").Cells(num_ligne_control, num_colonne_control).Value
If chiffre_colonne <> 0 Then
Call elimine_colonne(chiffre_colonne, num_colonne_control)
Sheets("Sudoku").Cells(num_ligne_control, num_colonne_control + 11) = ""
End If
Next num_ligne_control
Next num_colonne_control
'recherche par zone
colonne_depart_control = 1
ligne_depart_control = 1
For zone = 1 To 9
For num_colonne_control = colonne_depart_control To colonne_depart_control + 2
For num_ligne_control = ligne_depart_control To ligne_depart_control + 2
chiffre_zone = Sheets("Sudoku").Cells(num_ligne_control, num_colonne_control).Value
If chiffre_zone <> "" Then
Call elimine_zone(chiffre_zone, zone)
End If
Next num_ligne_control
Next num_colonne_control
Select Case zone
Case 1, 2, 4, 5, 7, 8
colonne_depart_control = colonne_depart_control + 3
If zone = 1 Or zone = 4 Or zone = 7 Then ligne_depart_control = zone

Case 3, 6
ligne_depart_control = zone + 1
colonne_depart_control = 1

End Select
Next zone
nbre_element = maj_sudoku()
If nbre_element > 0 Then
Do Until nbre_element = 0
GoTo recherche_nouveau
nbre_element = maj_sudoku()
Loop
End If
If Application.WorksheetFunction.Sum(Sheets("sudoku").Range("a1:i9")) = 405 Then
Range("A1").Select
Exit Sub
End If

'strategie du chiffre unique par zone
Call nouvelle_strategie
For zone = 1 To 9
Select Case zone
Case 1, 2, 3
num_ligne_depart = 1
num_colonne_depart = 1 + (zone * 3) - 3

Case 4, 5, 6
num_ligne_depart = 4
num_colonne_depart = 1 + ((zone - 4) * 3)
Case 7, 8, 9
num_ligne_depart = 7
num_colonne_depart = 1 + ((zone - 7) * 3)

End Select
For num_ligne = num_ligne_depart To num_ligne_depart + 2
For num_colonne = num_colonne_depart To num_colonne_depart + 2
For a = 1 To Len(Sheets("Sudoku").Cells(num_ligne, num_colonne + 11))
chiffre_unique = Mid(Sheets("Sudoku").Cells(num_ligne, num_colonne + 11), a, 1)
nbre_occurence = 0
For num_ligne_control = num_ligne_depart To num_ligne_depart + 2
For num_colonne_control = num_colonne_depart To num_colonne_depart + 2
occurence_chaine = InStr(1, Sheets("Sudoku").Cells(num_ligne_control, num_colonne_control + 11), chiffre_unique, vbTextCompare)
If occurence_chaine > 0 Then
nbre_occurence = nbre_occurence + 1
End If
Next num_colonne_control
Next num_ligne_control
If nbre_occurence = 1 Then
Sheets("Sudoku").Cells(num_ligne, num_colonne + 11) = chiffre_unique
End If
Next a
Next num_colonne
Next num_ligne
Next zone
nbre_element = maj_sudoku()
If nbre_element > 0 Then
Do Until nbre_element = 0
GoTo recherche_nouveau
nbre_element = maj_sudoku()
Loop
End If
If Application.WorksheetFunction.Sum(Sheets("sudoku").Range("a1:i9")) = 405 Then
Range("A1").Select
Exit Sub
End If
'strategie du chiffre unique par colonne
Call nouvelle_strategie

For num_colonne = 1 To 9
num_ligne_depart = 1
For num_ligne = 1 To 9
For a = 1 To Len(Sheets("Sudoku").Cells(num_ligne, num_colonne + 11))
chiffre_unique = Mid(Sheets("Sudoku").Cells(num_ligne, num_colonne + 11), a, 1)
nbre_occurence = 0
For num_ligne_control = 1 To 9
occurence_chaine = InStr(1, Sheets("Sudoku").Cells(num_ligne_control, num_colonne + 11), chiffre_unique, vbTextCompare)
If occurence_chaine > 0 Then
nbre_occurence = nbre_occurence + 1
End If
Next num_ligne_control
If nbre_occurence = 1 Then
Sheets("Sudoku").Cells(num_ligne, num_colonne + 11) = chiffre_unique
End If
Next a
Next num_ligne
Next num_colonne
nbre_element = maj_sudoku()
If nbre_element > 0 Then
Do Until nbre_element = 0
GoTo recherche_nouveau
nbre_element = maj_sudoku()
Loop
End If
If Application.WorksheetFunction.Sum(Sheets("sudoku").Range("a1:i9")) = 405 Then
Range("A1").Select
Exit Sub
End If
'strategie du chiffre unique par ligne
Call nouvelle_strategie

For num_ligne = 1 To 9
num_colonne_depart = 1
For num_colonne = 1 To 9
For a = 1 To Len(Sheets("Sudoku").Cells(num_ligne, num_colonne + 11))
chiffre_unique = Mid(Sheets("Sudoku").Cells(num_ligne, num_colonne + 11), a, 1)
nbre_occurence = 0
For num_colonne_control = 1 To 9
occurence_chaine = InStr(1, Sheets("Sudoku").Cells(num_ligne, num_colonne_control + 11), chiffre_unique, vbTextCompare)
If occurence_chaine > 0 Then
nbre_occurence = nbre_occurence + 1
End If
Next num_colonne_control
If nbre_occurence = 1 Then
Sheets("Sudoku").Cells(num_ligne, num_colonne + 11) = chiffre_unique
End If
Next a
Next num_colonne
Next num_ligne
nbre_element = maj_sudoku()
If nbre_element > 0 Then
Do Until nbre_element = 0
GoTo recherche_nouveau
nbre_element = maj_sudoku()
Loop
End If
If Application.WorksheetFunction.Sum(Sheets("sudoku").Range("a1:i9")) = 405 Then
Sheets("Sudoku").Range("A1").Select
Exit Sub
End If
'theorie de l'impasse
num_ligne = num_ligne_impasse
num_colonne = num_colonne_impasse
If impasse = 1 Then
If impasse_ini = 1 Then
Sheets("sudoku").Range("A12:i20").Value = Sheets("sudoku").Range("l1:T9").Value
impasse_ini = impasse_ini + 1
Else
Sheets("sudoku").Range("A12:i20").Value = Sheets("sudoku").Range("l1:T9").Value
End If
Sheets("sudoku").Range("A32:i40").Value = Sheets("sudoku").Range("A1:I9").Value
Do Until long_nombre_impasse = 2
long_nombre_impasse = Len(Sheets("sudoku").Cells(num_ligne, num_colonne + 11))
num_ligne_impasse = num_ligne
num_colonne_impasse = num_colonne
num_colonne = num_colonne + 1
If num_colonne = 10 Then
num_colonne = 1
num_ligne = num_ligne + 1
End If
Loop
Sheets("sudoku").Cells(num_ligne_impasse, num_colonne_impasse) = Left(Sheets("sudoku").Cells(num_ligne_impasse, num_colonne_impasse + 11), 1)
Sheets("sudoku").Cells(num_ligne_impasse + 21, num_colonne_impasse) = Left(Sheets("sudoku").Cells(num_ligne_impasse, num_colonne_impasse + 11), 1)
impasse = impasse + 1
long_nombre_impasse = 0
GoTo recherche_nouveau
End If
If impasse = 2 Then
Sheets("sudoku").Range("l1:T9").Value = Sheets("sudoku").Range("A12:i20").Value
Sheets("sudoku").Range("A1:I9").Value = Sheets("sudoku").Range("A32:i40").Value
Sheets("sudoku").Cells(num_ligne_impasse, num_colonne_impasse) = Right(Sheets("sudoku").Cells(num_ligne_impasse, num_colonne_impasse + 11), 1)
Sheets("sudoku").Cells(num_ligne_impasse + 21, num_colonne_impasse) = Sheets("sudoku").Cells(num_ligne_impasse + 21, num_colonne_impasse) & Right(Sheets("sudoku").Cells(num_ligne_impasse, num_colonne_impasse + 11), 1)
impasse = 1
num_colonne = num_colonne + 1
If num_colonne = 10 Then
num_colonne = 1
num_ligne = num_ligne + 1
End If
GoTo recherche_nouveau
End If
End Sub
Sub raz()
Sheets("Sudoku").Range("A12:I20").Select
Selection.ClearContents
Sheets("Sudoku").Range("A22:I30").Select
Selection.ClearContents
Sheets("Sudoku").Range("A32:I40").Select
Selection.ClearContents
For num_ligne = 1 To 9
For num_colonne = 12 To 20
Sheets("Sudoku").Cells(num_ligne, num_colonne) = 123456789
Next num_colonne
Next num_ligne
End Sub

Sub elimine_ligne(chiffre, num_ligne)
For num_colonne = 12 To 20
Sheets("Sudoku").Cells(num_ligne, num_colonne) = Replace(Sheets("Sudoku").Cells(num_ligne, num_colonne), chiffre, "")
Next num_colonne
End Sub

Sub elimine_colonne(chiffre, num_colonne)
For num_ligne = 1 To 9
Sheets("Sudoku").Cells(num_ligne, num_colonne + 11) = Replace(Sheets("Sudoku").Cells(num_ligne, num_colonne + 11), chiffre, "")
Next num_ligne
End Sub
Sub elimine_zone(chiffre, zone)
Select Case zone
Case 1, 2, 3
num_ligne_depart = 1
num_colonne_depart = 1 + (zone * 3) - 3

Case 4, 5, 6
num_ligne_depart = 4
num_colonne_depart = 1 + ((zone - 4) * 3)
Case 7, 8, 9
num_ligne_depart = 7
num_colonne_depart = 1 + ((zone - 7) * 3)

End Select

For num_ligne = num_ligne_depart To num_ligne_depart + 2
For num_colonne = num_colonne_depart To num_colonne_depart + 2
Sheets("Sudoku").Cells(num_ligne, num_colonne + 11) = Replace(Sheets("Sudoku").Cells(num_ligne, num_colonne + 11), chiffre, "")
Next num_colonne
Next num_ligne
End Sub
Function maj_sudoku()
nbre_element_maj = 0
For num_ligne = 1 To 9
For num_colonne = 1 To 9
If Sheets("Sudoku").Cells(num_ligne, num_colonne) <> "" Then Sheets("Sudoku").Cells(num_ligne, num_colonne + 11) = ""
If Len(Sheets("Sudoku").Cells(num_ligne, num_colonne + 11)) = 1 Then
Sheets("Sudoku").Cells(num_ligne, num_colonne) = Sheets("Sudoku").Cells(num_ligne, num_colonne + 11)
Sheets("Sudoku").Cells(num_ligne, num_colonne + 11) = ""
nbre_element_maj = nbre_element_maj + 1
End If
Next num_colonne
Next num_ligne
maj_sudoku = nbre_element_maj
End Function
Sub nouvelle_strategie()
For num_ligne = 1 To 9
For num_colonne = 1 To 9
If Sheets("Sudoku").Cells(num_ligne, num_colonne) <> "" Then
Sheets("Sudoku").Cells(num_ligne, num_colonne + 11) = Sheets("Sudoku").Cells(num_ligne, num_colonne)
End If
Next num_colonne
Next num_ligne
End Sub

Private Sub CommandButton1_Click()
Call solution
End Sub

Si vous n'arrivez pas à créer le fichier Excel, faites-moi un email, je vous l'enverrai

A bientôt

Thomas

jeudi 29 mars 2007

Fixkes - kvraagetaan



Et oui comme vous, je ne comprends rien au parole de cette chanson. Mais c'est un véritable tube en flandres. J'avoue que j'aime ce côté acoustique alors ...

A bientôt

Thomas

mercredi 28 mars 2007

Video Maroilles 2007 - VTT

La sortie du chemin, le plus boueux du parcours, regardez le nombre de participants sur le bord du chemin et l'état de la route à la sortie c'est impressionnant



La fête à Maroilles, c'est le vainqueur de son poid en maroille qui jette à la foule son surplus de fromage




A bientôt

Thomas

mardi 27 mars 2007

cumpleaños feliz!! mamá

lundi 26 mars 2007

Maroilles VTT - Enfert Vert - Reportage photos




























credit Photos : Vincent

dimanche 25 mars 2007

Maroilles - Massacre à la chaine


Ca y est ! le jour de Maroilles ! un événement parmi nos sorties VTT. Le RDV est fixé à 7h15. Nous ne sommes pas encore partis que le retard commence déjà : non, ce n'est pas à cause du changement d'heure, juste les vélos de quelques retardataires à fixer sur la voiture ! Mais bon nous sommes partis pour la journée... A cause d'un allume cigare récalcitrant nous n'avons pas de GPS. Nous essayons donc de nous fier à notre instinct et nos souvenirs pour parvenir à Maroilles. Dans des cas pareilles, nous hésitons pour prendre la bonne route. Je décide donc de changer de voiture pour faire fonctionner mon GPS.

- Edouard, il fonctionne ton allume cigare ?
- Non, il faut prendre des allumettes.

Fou rire général !

Heureusement, des voitures passent avec des vélos, vite nous remontons en voiture et nous arrivons à Maroilles.
Nous démarrons donc... Le premier chemin est un chemin de boue coulante. Cela nous donne le ton de la sortie. Malheureusement, dès le deuxième chemin ma chaine casse. Après plusieurs minutes, nous pouvons redémarrer. Je ne suis pas rassuré et il y a de quoi puisque, lors de la première partie de la traversée de Mormal, ma chaine casse à nouveau. Mon moral est au plus bas car si je casse encore c'est terminé ! Les larges allées vallonnées de la fôret me semble interminables. Puis enfin, le premier passage boueux. Et là surprise, je passe aisément. Il faut dire que les passages les plus difficiles pour cette partie ont été suprimés cette année. Nous arrivons donc au premier ravitaillement : le terrain militaire.



Requinqué... la suite du parcours, malgré quelques chemins de boue, est plutôt roulante et le chemin le long du canal permet de nettoyer les vélos de certains et de récupérer un peu de notre retard. A la sortie, c'est là qu'arrive la partie la plus délicate de l'ENFER vert. En effet, une boue collante nous attend dans un long chemin et à voir les autres participants cela ne va pas être du gâteau. Nous sommes là pour souffrir, allons-y, 200 mètres plus loin... stop. Le vélo n'avance plus, je ne vois même plus mes freins et mes plateaux. Chacun se débrouille comme il peut. Nous nous attendons à la sortie du chemin, quel ne fut pas ma surprise quand j'ai constaté que je n'étais pas le dernier.

- Pascal n'est pas là ?
- Non,tu l'as doublé.
- Ah le v'la !

Nouvel arrêt, problème technique pour Pascal et vous savez quoi ... chaine cassée. Maintenant, nous n'avons plus d'attache rapide. La fin de parcours est marquée par la fatigue, chacun avançant à son rythme. Le deuxième ravitaillement nous permettra de décrotter légèrement nos vélos. Ce qui nous a permis de rejoindre l'arrivée plus facilement. A l'arrivée flamiche au programme et cette année encore nous ne gagnerons pas à la tombola. Mais au moins, nous repartons satisfaits de notre journée.



Demain, vous trouverez les photos de cette sortie, à laquelle c'est sûre nous reparticiperons.

A bientôt

Thomas

vendredi 23 mars 2007

Maroilles J-2



Ca y est, c'est le Week-End, objectif l'enfer vert 2007 !Sur les bons souvenirs de l'année dernière, c'est reparti pour un tour. Et pourtant, l'année dernière, c'était ma première sortie de l'année, juste un entrainement sur Home trainer dans la semaine. Je peux vous dire que j'avais du mal à suivre mon compagnon d'infortune. Surtout que la boue était au programme, malgré le départ libre, nouveauté de l'année 2007. J'étais bien souvent lâché et mon collègue m'attendait à la sortie de chaque chemin...sauf une fois où bloqué par la boue, j'ai été forcé de m'arrêter plus longuement pour décrotter mon VTT. Et, c'est à la sortie du chemin, alors que je m'arrêtais de nouveau sur le bitume, que l'aventure a pris un tournant tout à fait inattendu, un homme est venu vers moi et m'a dit :

- Vous devriez nettoyer votre vélo dans la mare.

Plonger mon vélo dans la mare ?! Quelle drôle d'idée ! Amusé, mais, trouvant la méthode complètement saugrenue, j'ai poursuivi ma route,ne m'arrêtant que quelques mètres plus tard à cause d'une crevaison. Après toutes ces péripéties, j'arrivais enfin au deuxième ravitaillement où mon collègue m'attendait. Et c'est là que je lui ai raconté ce qui s'était passé, n'oubliant pas de partager avec lui mon amusement après la remarque de cet homme. Et c'est là que l'aventure a pris un nouveau tournant, car quel n'a pas été mon étonnement lorsqu'il m'a déclaré :

- Le vélo dans la mare, c'était moi !

Rigolade ... La fin de parcours a été plus facile, surtout que gentiment, le pro du nettoyage de vélo s'était chargé du mien pendant que je me restaurais...mais sans recourir à la mare cette fois !

Toutefois, aussi surprenant que celà puisse paraître,le feuilleton du nettoyage de vélo n'en était pas à son dernier épisode. Et oui, quelle ne fut pas ma surprise, le lendemain matin, quand, en lisant la voix des sports, je découvris que l'article consacré à cette édition de l'enfer vert, parlait de la méthode originale qu'avait trouvée un vttiste pour nettoyer son vélo en le trempant dans une mare ! Mémorable... j'ai vraiment hâte d'être à dimanche pour savoir quelle(s) surprise(s) nous réserve cette édition... à suivre.

A bientôt

Thomas

jeudi 22 mars 2007

Afficher l'icone de Flux Rss dans la barre d'adresse ou la barre d'outils

Si vous êtes chez blogger comme moi vous devez modifier votre modèle. Pour cela allez dans la console de votre blog

Allez dans l'onglet "Modèle" et "Modifier le code HTML"

Cherchez la balise <head> et insérez le code suivant :

<link href='http://votresite.blogspot.com/feeds
/posts/default'rel='alternate'title='Le Blog de vous'
type='application/rss+xml'/></link>


Une fois enregistré, vous aurez le joli logo de flux RSS dans la barre d'adresse si vous naviguez avec Firefox, et sur IE7 le logo de la barre d'outil sera activé.

A bientôt

Thomas

mercredi 21 mars 2007

video VTT Jurassic Rider's

ça fait un moment qu'elle est dans les cartons, je la ressors. En espérant, vous en servir une nouvelle la semaine prochaine avec la sortie de "L'enfert Vert" à Maroilles


A Bientôt

Thomas

mardi 20 mars 2007

Utilisation ADODB en vba

Voici un exemple d'utilisation ADODB pour une base de donnée Access. Il est développé en vba par Excel. Cela vous permet donc facilement de transférer des données de Access vers Excel

'Déclaration de la connection
Public connect As ADODB.Connection

'Subroutine de connection
Sub ConnDB(ByRef connect As ADODB.Connection, ByVal cheminBase As String)
connect.provider = "Microsoft.Jet.Oledb.4.0"
connect.ConnectionString = cheminBase
connect.Open
End Sub

'Subroutine principal
Sub Main()
Dim rs as New ADODB.Recordset 'Déclaration du recordset
Set connect = New ADODB.Connection 'Déclaration de la connection
ConnDB connect, "c:\base.mdb" 'connection à la base
requete = "SELECT * FROM produit WHERE couleur = 'jaune'" 'requete sql
rs.CursorType = adOpenKeySet
'je mets le CursorType sur adOpenKeySet pour pouvoir utiliser la fonction RecordCount
rs.Open requete, connect
nbre_ligne = rs.RecordCount
rs.MoveFirst
For ligne = 1 to nbre_ligne
Range("'[catalog.xls]Feuil1'!A" & ligne) = rs("Reference")
Range("'[catalog.xls]Feuil1'!B" & ligne) = rs("Modele")
Range("'[catalog.xls]Feuil1'!C" & ligne) = rs("couleur")
Range("'[catalog.xls]Feuil1'!D" & ligne) = rs("quantite")
rs.MoveNext
Next ligne
rs.Close
End Sub




N'oubliez pas d'activer la référence Microsoft Activex Data Object (dans Outils - Références)

A bientôt

Thomas

lundi 19 mars 2007

dimanche 18 mars 2007

Le vent l'emportera


Aujourd'hui, réveil 7h30... et à entendre le vent et la pluie qui se déchaînent dehors, la sortie ne va pas être de tout repos ! Pas encore équipé que déjà le portable se manifeste : deux forfaits, l'un pour problèmes mécaniques, l'autre pour... problèmes météorologiques. Je me mets donc en route à la rencontre de mes trois équipiers du jour : le vent, la pluie et un équipier à vélo. Nous ne serons donc que deux à braver la météo ! Nous décidons donc d'éviter la boue et de déjouer le vent, autant que possible... Nous optons pour les chemins de halage en bord de Deûle et en bord de Marcq. Nous arrivons toutefois à croiser d'autres invétérés du vélo, parmi eux, Marco et Eugène qui s'entraînent pour affronter les dures montées du Toblerone. Poussés par le vent (si on le prend dans le bon sens, il peut devenir un allier de taille) nous rentrons assez vite, histoire de prendre le temps de souffler les bougies de Didi, le vent emportera vraiment tout sur son passage aujourd'hui... Même si la sortie a été courte, à n'en pas douter, elle aura été un entraînement complet pour la sortie à Maroilles la semaine prochaine. Et même à essayer de limiter la boue et les effets du vent, on se retrouve tout de même contraint de franchir le seuil en peignoir sous peine de ménage après !

samedi 17 mars 2007

Mettre vos images en économisseur d'écran

Dans les propriétés d'affichage, séléctionnez "Mon album photo" comme écran de veille.




Vous pouvez modifier le dossier cible en cliquant sur "Paramètres"





A bientôt

Thomas

jeudi 15 mars 2007

Faire de la musique avec Excel

Je suis sûr que vous ne me croyez pas, alors démonstration, suivez bien les étapes

1 Ouvrez Excel
2 Appuyer sur ALT+F11
3 Dans le menu cliquez sur Insertion->Module
4 Copier-Coller le programme suivant

Private Declare Function midiOutClose Lib "winmm.dll" _
(ByVal hMidiOut As Long) As Long

Private Declare Function midiOutOpen Lib "winmm.dll" _
(lphMidiOut As Long, _
ByVal uDeviceID As Long, _
ByVal dwCallback As Long, _
ByVal dwInstance As Long, _
ByVal dwFlags As Long) As Long
Private Declare Function midiOutShortMsg Lib "winmm.dll" _
(ByVal hMidiOut As Long, _
ByVal dwMsg As Long) As Long
Declare Sub Sleep Lib "Kernel32" (ByVal dwMilliseconds As Long)
Dim hMidiOut As Long
Public lanote As Integer
Public Const durée As Integer = 250 ' millisecondes'

Sub Au_clair_de_la_lune()
numéro = 0
notes_a_jouer = Array(51, 51, 51, 53, 55, 53, 51, 55, 53, 53, 51, _
51, 51, 51, 53, 55, 53, 51, 55, 53, 53, 51, _
53, 53, 53, 53, 48, 48, 53, 51, 50, 48, 46, _
51, 51, 51, 53, 55, 53, 51, 55, 53, 53, 51)
For Each noteG In notes_a_jouer
numéro = numéro + 1
dur_n = Array(300, 300, 300, 300, 600, 600, 300, 300, 300, 300, 600, _
300, 300, 300, 300, 600, 600, 300, 300, 300, 300, 600, _
300, 300, 300, 300, 600, 600, 300, 300, 300, 300, 600, _
300, 300, 300, 300, 600, 600, 300, 300, 300, 300, 600)
Temps = dur_n(numéro - 1)
On Error GoTo fin
midiOutClose hMidiOut '------------- ferme le port midi pour arreter la note précédente
midiOutOpen hMidiOut, 0, 0, 0, 0 ' ----------------ouvre le port pour la nouvelle note
midiOutShortMsg hMidiOut, RGB(192, 54 - 1, 127) 'ici, le nombre 51 peut être changé
'par un nombre de 1 à 128
lanote = 12 + CInt(noteG) ' -----on calcule la note / l'octave
note = RGB(144, lanote, 127) '-----------------------astuce pour generer un entier long
midiOutShortMsg hMidiOut, note ' --------------------on envoie la note sur le port MIDI
Sleep (Temps)
fin:
midiOutClose hMidiOut
Next
End Sub


5 Appuyer sur F5

Merci à Excel Labo pour cette astuce

A bientôt
Thomas

mercredi 14 mars 2007

Cadeau

Merci à Vincent pour cette vidéo du pur plaisir



A bientôt

Thomas

Transfert de données de IBM Universe vers Excel - 1ere Partie

Aujourd'hui, je vous présente une macro Excel qui permet de tranférer des données de universe (IBM U2) vers Excel à l'aide d'Uniobject.

Il me manque encore la partie avec la SubValue, mais j'hésite encore quant à la façon de le faire.

Voici donc la première ébauche du programme :

Sub transfert_universe()
Dim UVCommand As Object
Set FSO = CreateObject("Uniobjects.unioaifctrl")
FSO.UserName = "votrelogin"
FSO.Password = "votremotdepasse"
FSO.HostName = "votreserveur"
FSO.AccountPath = "votrecompte"
FSO.Connect
NomdeFichier = InputBox("Nom de fichier : ", "Nom de fichier")
CleDepart = InputBox("Clé de départ : ", "Clé de départ")
CleFin = InputBox("Clé de fin : ", "Clé de fin")
Set ObjFichier = FSO.OpenFile(NomdeFichier)
Set UVCommand = FSO.Command
UVCommand.Text = "SELECT " & NomdeFichier & " >= " & CleDepart & " AND <= " & CleFin
UVCommand.Exec
Sheets("Feuil1").Activate
Set SelectList = FSO.SelectList(0)
ligne_de_depart = 1
ligne_compteur = 0
For a = 1 To UVCommand.AtSelected
ObjFichier.RecordID = SelectList.Next
ObjFichier.Read
For b = 1 To ObjFichier.Record.Count
For c = 1 To ObjFichier.Record.Field(b).Count
ligne_saisie = ligne_de_depart + c
If b = 1 Then Cells(ligne_saisie, 1) = ObjFichier.RecordID
If ObjFichier.Record.Value(b, c).Count = 1 Then
Cells(ligne_saisie, b + 1).Value = ObjFichier.Record.SubValue(b, c, 1)
End If
If ligne_compteur < ligne_saisie Then ligne_compteur = ligne_saisie
Next c
Next b
ligne_de_depart = ligne_compteur
Next a
End Sub



Dans la deuxième partie le code sera commenté et complété. N'hésitez pas à poser vos questions et surtout à poster vos commentaires

A bientôt

Thomas

mardi 13 mars 2007

dimanche 11 mars 2007

Rekkem

Sans doute la sortie la plus difficile de l'année. Il faut dire que c'est seulement ma deuxième de la saison, mais bon, les flamands sont vraiment exceptionnels. Réveil 7 heures, Vtt sur le porte vélo à huit heures moins le quart et à neuf heures, tout équipé et inscrit, c'est enfin parti ! Boue et Boue et Boue au programme, fléchage irréprochable (on est chez les flamands quand même). Après une dizaine de kilomètres , réconfort, au programme Red Bull (voir Photo), biscuit, boisson énergétique. La fin du parcours est difficile mais je tiens à remercier les flamands de Rekkem pour leurs qualités d'organisation (ils ont tracé plus de 80 kilomètres de circuit) mais aussi pour les grands moments qu'ils m'ont permis de vivre : hallucinant, ou histoire belge diront certains, des promeneurs faisant prendre l'air à leur mouton comme à leur chien, peut-être les effets du red bull qui a du donner de l'énergie à mon imagination ; et malgré les derniers kilomètres difficiles, une arrivée de pro avec gendarmes et ligne d'arrivée matérialisée par une aire gonflable ! En plus comme nous sommes en flandres les photos seront disponibles sur www.flandrien.be






A bientôt

tom

samedi 10 mars 2007

Changer la mise en forme des cellules excel de façon conditionnel

Vous pouvez à l'aide d'excel changer facilement la police, la couleur de fond les bordures à l'aide de la mise en forme conditionnelle.

Dans excel utilisez le menu Format puis mise en forme conditionnelle



Vous pouvez rédiger jusqu'à 3 conditions.