locked
Appel à contribution ! Publiez un tip, une astuce, ou un petit tutorial (comment faire) sur la technologie que vous connaissez le mieux ! (15-03-2010 - 15-04-2010)

    Question

  • Publiez une astuce ou un petit tutorial (comment faire) sur la technologie que vous connaissez le mieux et vous pourrez beneficier de :

    • La publication de votre article dans la catégorie à venir «  Comment faire »
    • La publication de votre article comme topic permanent pour un mois dans le forum respectif.
    • Le respect et l’appréciation de la communauté

    Plus de détails sur les règles :

              Visual Basic .NET

              C#

              Visual C++

              ASP.NET

              SQL Server

              .NET Framework aspects généraux

              ou toute autre technologie Microsoft que vous maitrisez bien

    •  
      • Où poster: comme réponse à un des threads permanents publiés dans les forums(*) :

              Visual Basic .NET : http://social.msdn.microsoft.com/Forums/fr-FR/vbasicfr/threads

              C# : http://social.msdn.microsoft.com/Forums/fr-FR/visualcsharpfr/threads

              Visual C++ : http://social.msdn.microsoft.com/Forums/fr-FR/visualcplusfr/threads

              ASP.NET : http://social.msdn.microsoft.com/Forums/fr-FR/aspnetfr/threads

              SQL Server : http://social.msdn.microsoft.com/Forums/fr-FR/sqlserverfr/threads

              .NET Framework aspects généraux : http://social.msdn.microsoft.com/Forums/fr-FR/netdevelopmentfr/threads

    (*)Si aucun des forums ne correspond pas à votre aire d’expertise, faites-nous savoir et on va ouvrir un thread semblant sur le forum de la technologie où vous êtes expert

     

    •  
      • Evaluation: votes utiles
      • Période d’évaluation: 1 mois ( pour que les autres utilisateurs votent l’article)
      • Comment écrire:

              Soyez original, mais vous pouvez aussi mentionner des liens vers vos blogs personnels, sites web 

              Soyez respectueux : Consultez les règles de conduite sur les forums :  http://social.technet.microsoft.com/Forums/fr-FR/1635/thread/6a3df0a2-47e4-4aa2-bf7f-1ba7b5ad5624

              Rédigez-le de façon universelle: Essayez d’imprimer un style didactique, pour qu’un débutant mais aussi un professionnel expérimenté puisse suivre vos indications .

              Si possible, utilisez des images dans votre article:  Mettez les images dans le dossier Public de http://skydrive.live.com/ en utilisant votre compte. Après ouvrir une image, comme par exemple:  http://cid-5c6d0e429287fe1f.skydrive.live.com/self.aspx/.Public/Conf%20internet.jpg , click droit pour copier et ensuite coller dans le corps de la discussions où vous publier votre article. 

              Jouez honnêtement: Acceptez l’évaluation mensuelle et continuez à participer au concours, soyez tolérant.  

    •  
      • L’article mis en avant sera celui qui comptabilisera  le plus grand nombre de votes utiles
      • Quand sera mis en avant un article: une fois par mois
      • Périodicité du concours: chaque mois – l'edition suivante du concours peut commencer, même si l'article mis en avant n'a pas encore ete publié.
      • Condition nécessaire pour valider une édition: avoir au moins 5 réponses/votes par articles/tip  
      • Limitations de la plateforme :

              On peut pas publier plus de 6000 caractères (environ 2-3 pages Word).

              On ne peut pas ajouter des images directement (mais avec  skydrive comme décrit en haut).

     

    lundi 15 mars 2010 08:03

Toutes les réponses

  • Allez je me lance...

    Comment utiliser Automation avec Excel et VB.NET ?

    Préparatifs

    Pour pouvoir piloter Excel, vous devez ajouter à votre projet une référence à Microsoft Excel Object Library (dans les composants COM) ou référencer directement les Primary Interop Assemblies (PIA) : Microsoft.Office.Interop.Excel.dll, Microsoft.VBE.Interop.dll, et Office.dll

    Dans cet exemple j’utiliserai la seconde solution.

    A propos des Primary Interop Assemblies

    Bien que Microsoft recommande d’utiliser une version des PIA correspondant à la version d’Office installée conjointement avec votre application, j’ai constaté qu’il existe une bonne compatibilité ascendante entre ces assemblies. J’ai donc pris pour habitude d’utiliser une vieille version de ces PIA, celles de Office XP. Elles ont l’avantage de permettre à mes applicatifs de fonctionner sur toutes les versions d’Office de XP à 2007.

    Vous pouvez télécharger ces assemblies sur le site de Microsoft :
    http://www.microsoft.com/downloads/details.aspx?FamilyId=C41BD61E-3060-4F71-A6B4-01FEBA508E52&displaylang=en

    Si vous préférez utiliser les PIA installées avec Office sur votre poste, souvenez vous simplement qu’elles ne fonctionneront pas si vos utilisateurs utilisent une version plus ancienne.


    Les bases de l’automation Excel

    Création et assignation de l’objet Excel

    Dim XlApp As Microsoft.Office.Interop.Excel.Application = New Microsoft.Office.Interop.Excel.Application()


    Création d’un classeur

    Dim XLDestBook As Microsoft.Office.Interop.Excel.Workbook
    XLDestBook = XlApp.Workbooks.Add
    

    Ouverture d’un classeur existant

    XLDestBook = XlApp.Workbooks.Open("c:\monfichier.xls")

    Ajouter une feuille

    Dim xlSheet As Microsoft.Office.Interop.Excel.Worksheet
    xlSheet = XLDestBook.Worksheets.Add
    

    Ajouter du texte dans une cellule

    xlSheet.Cells(1, 2).value = "Test écriture dans cellule B1"

    Ajouter une formule dans une cellule

    xlSheet.Cells(1, 3).formula = "=1+5"

    Les formules doivent être écrites dans la langue d’Excel. Si vos utilisateurs sont susceptibles d’utiliser des versions d’Excel dans différentes langues vous devrez donc traduire vos formules. Pour cela vous pouvez utiliser cette référence http://cherbe.free.fr/fonctions_XL.ZIP

    Recommandations

    Prenez l’habitude avant tout traitement d’automation de désactiver le rafraichissement d’écran d’Excel, et d’empêcher les saisies utilisateur. Les performances en seront largement améliorées, et cela évitera que vos utilisateurs ne viennent perturber le traitement.

    Pour cela utilisez les lignes suivantes avant tout traitement :

    XlApp.ScreenUpdating = False
    XlApp.Interactive = False
    

    Repassez ces paramètres à True lorsque vos traitements sont achevés, sinon Excel sera inutilisable.

    Pour plus d’infos vous pouvez vous référer à la base de connaissance Microsoft :  http://support.microsoft.com/kb/301982/fr


    Attention à la langue

    Si vous avez des utilisateurs utilisant une version anglaise de Windows, il y a de fortes chances pour que votre application plante avec un message : Error: 0x80028018 (-2147647512) - Description: Old Format or Invalid Type Library

    Ce cas de figure se produit lorsque l’utilisateur a personnalisé les paramètres régionaux de Windows. C’est un cas que j’ai régulièrement rencontré avec les expatriés. Ils sélectionnent dans les paramètres régionaux leur pays de résidence, et modifient le séparateur décimal et l’unité monétaire pour les faire correspondre à ceux de leur pays d’origine.

    La base de connaissance Microsoft vous donnera plus de détails sur ce problème : http://support.microsoft.com/?scid=kb%3Ben-us%3B320369&x=19&y=18

    Pour le contourner, 2 solutions :
    • Demander à vos utilisateurs de ne pas personnaliser les paramètres régionaux. Pas toujours possible.
    • Avant toute opération d’automation Excel modifier la culture du système en « en-US », et surtout restaurer les paramètres utilisateurs lorsque vos traitements sont terminés.

    La base de connaissance peut une nouvelle fois vous aider : http://support.microsoft.com/kb/914356/fr

    Personnellement j’utilise le code suivant (dérivé des exemples MS) : 

        'Sauvegarde le réglage de culture
        Dim oldCI As System.Globalization.CultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture
    
        ''' <summary>
        ''' Modifie la culture en "en-US".
        ''' </summary>
        ''' <remarks></remarks>
        Sub ChangeCulture()
            Dim LangueExcel As Integer 'code correspondant à la langue Excel
            Dim RegionalString As String 'Equivalence entre la langue Excel et la culture système
    
            LangueExcel = XlApp.LanguageSettings.LanguageID(Microsoft.Office.Core.MsoAppLanguageID.msoLanguageIDInstall) 'Récupére le code correspondant à la langue d'Excel
            Select Case LangueExcel
                Case 1033 : RegionalString = "en-US" 'Anglais USA
                Case 1036 : RegionalString = "fr-FR" 'Français FRANCE
                Case Else : RegionalString = "en-US" 'Anglais USA
            End Select
            System.Threading.Thread.CurrentThread.CurrentCulture = New System.Globalization.CultureInfo(RegionalString)
        End Sub
    
    
        ''' <summary>
        ''' Rétablit la culture d'origine du système
        ''' </summary>
        ''' <remarks></remarks>
        Sub RestoreCulture()
            System.Threading.Thread.CurrentThread.CurrentCulture = oldCI
        End Sub

    mardi 16 mars 2010 09:21
  • Très bonne idée Alex

    fred
    mardi 16 mars 2010 12:34
  • Bonjour,

     

    Félicitations à Pascal Martin pour le courage !

    Personne d’autre ? J


    Alex Petrescu - MSFT
    jeudi 18 mars 2010 08:33
  • Allez je fais une contre proposition a l'interop de Pascal.

    Introduction OOXML

    Nouveau standard de document bureautique Microsoft. Ce format libre et gratuit, a été pensé et créé pour favoriser l’inter-operabilité entre les différents systèmes documentaires. Le standard est déposé a l’ECMA et à l’ISO (DIS 29500).


    Problématique Ole Automation

    L’utilisation d’Ole automation nécessite une Licence Office ce qui d’autant plus gênant s’il s’agit d’un serveur. Cela pose même d’autres problèmeshttp://support.microsoft.com/kb/257757

     

    Ce que permet OOXML :

          Manipulation total d’un document Office 2007 (.docx/.xlx,….)Sans Office 2007 sur la machine.

          Agrégation d’informations provenant de diverses sources via Dot net ou JAVA pour création de document Office au format docx, pptx, xlsx .

          Mise en conformité et modification en masse de document (en-tête, code couleurs,…) dans le cadre d’un Moss.

          Réduction du temps de traitement.

    Ce que ne permet pas OOXML:

          Ouverture et récupération de données des anciens formats Office doc, xls, ppt.

          Conversion des anciens formats Office doc, xls, ppt.

          Pilotage de l’outil Office :

    Moyen de développement

    Il est possible de développer de différentes manières, mais le plus simple est d‘utiliser l‘Open XML SDK 2.0 for Microsoft Office .

     

    Le SDK nécessite le Framework .net 3.5 et fourni des Objets de haut niveau pour manipuler les documents, ainsi que des outils connexes:

    4 DocumentReflector.exe

    4 OpenXmlClassesExplorer.exe

    4 OpenXmlDiff.exe

    Une fois installé il suffit d‘ajouter les références DocumentFormat.OpenXml et WindowsBase au projet.

     

    Import des espaces de noms

    Imports

     

    DocumentFormat.OpenXml

    Imports

     

    DocumentFormat.OpenXml.Packaging

    Imports

     

    DocumentFormat.OpenXml.Wordprocessing

     

     

    Exemple de création d’ un document Word

     

    PublicSub MyCreateDocWord(ByVal DocNameAsString )

           Try

               Using WordDocAs WordprocessingDocument = WordprocessingDocument.Create(DocName, WordprocessingDocumentType.Document)

                   WordDoc.AddMainDocumentPart()

                   WordDoc.MainDocumentPart.Document =New DocumentFormat.OpenXml.Wordprocessing.Document()

                   WordDoc.MainDocumentPart.Document.Save()

               EndUsing

           Catch exAs Exception

               MessageBox.Show(ex.Message)

           EndTry

      EndSub

     

    Liens :

    Article http://msdn.microsoft.com/fr-fr/office/msdn.openxml.2.0.sdk.aspx

    SDK http://www.microsoft.com/downloads/details.aspx?FamilyID=c6e744e5-36e9-45f5-8d8c-331df206e0d0&DisplayLang=en

    Projet Codeplex Docx http://docx.codeplex.com

    MSDN Forum dédié Open xml   http://social.msdn.microsoft.com/Forums/fr-FR/openxmlfr/threads

     


    Bon Codage Josselin

    vendredi 19 mars 2010 15:22
  • salut

    peut-on proposer de petites applications(bien fait bien sur)

    je pose la question a cause de ce qu'ont proposés les 2 autres(très technique et bien fait, ou soit c'est moi qui suit faible)

    vendredi 19 mars 2010 20:13
  • Bonjour mmw01,

     

    L’idée est de publier quelque chose qui aidera les autres développeurs. Je vous rappelle que ceci n’est pas un concours de programmation, mais un concours de connaissances. Au lieu de publier une application complexe, essayez de trouver une partie intéressante de code, une astuce ou une procédure qui pourrait être utile aux autres. Si vous avez un exemple de code, vous pouvez le publier, mais tenez compte qu’il doit traiter un seul problème (par exemple : comment faire pour changer le pointeur de souris a chaque click, explication de la démarche et code associé).

     

    Cordialement,

    Alex


    Alex Petrescu - MSFT
    lundi 22 mars 2010 10:07
  • Bonjour à tous les développeurs,

     

    Je pense que beaucoup de développeurs VB ont voulu ou on fait des jeux en VB. Je vous propose de dessiner un damier  qui servira de base à un jeu d'échecs, de dames ou autre.

     

    Voici le code:

     

    Private Sub MainForm_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
    ' Draw a 1280 pixel black line 25 pixels from the top of the form.
    e.Graphics.DrawLine(Pens.Black, 0, 25, 1280, 25)
    Dim i As Byte
    For i = 0 To 16
    e.Graphics.DrawLine(Pens.Black, 10, 50 + (i * 40), (4 * 150) + 50, 50 + (i * 40))
    e.Graphics.DrawLine(Pens.Black, 10 + (i * 40), 50, 10 + (i * 40), (4 * 150) + 90)
    ' on commence à X = 10 et Y = 50
    ' les pictures font 40 X 40
    Next
    End Sub

    fred
    lundi 22 mars 2010 20:10
  • Salut

     

     

    Parfois on a envie de retrouver les choses la où on les laissées (surtout quand on est très bien ordonné)

    Ainsi on veut avoir la même taille du formulaire, la même position, la même couleur, le dernier texte tapée dans un textbox par exemple que lors de la dernière utilisation d’une application.

    Alors je parlerai de comment enregistrer ses  paramètres et comment les récupérer.

     

    Pour faire cela certains utilisent le registre (chose que je déconseille car on a vite fait de se créer des ennuies),   heureusement en vb.net on a les fichiers de configurations mais je propose beaucoup plus simple : My.settings

    Il permet d’enregistrer les paramètres de l’application.

    Alors pour les utiliser il faut les créer

     

    On va en créer 6, un pour la position, pour la taille, le dernier texte tapée dans le textbox, la couleur du texte, la couleur du textbox lui-même, et la police du texte.

    Pour ce faire on va dans l’explorateur de solution, on ouvre Myprojet, on clique sur l’onglet paramètres et c’est là qu’on va créer nos paramètres.

     

    Signification des éléments de l’entête :

    ·         Nom ; le nom du paramètre

    ·         Type ; le type de données que recevront les paramètres

    ·         Portée ; la portée des paramètres, ici il faut toujours choisir utilisateur car application est en readonly (lecture seule) et ne peut être modifiée (ce qui ne nous arrange pas car a chaque fermeture de l’application les valeurs vont changer)

    ·         Valeur ; la valeur de la toute première utilisation (on ne mettra rien généralement)

    Maintenant que nous connaissons la signification des éléments créons nos paramètres.

     

    On va les créer comme suit :

     

    Nom

    Type

    Portée

    Valeur

    position

    Système.drawing.point

    utilisateur

     

    taille

    Système.drawing.size

    Utilisateur

    100 ; 100

    coulAriplan

    Système.drawing.color

    Utilisateur

     

    coultexte

    Système.drawing.color

    Utilisateur

     

    policetexte

    Système.drawing.font

    Utilisateur

     

    textedenote

    string

    Utilisateur

     

    NB : vous devez avoir une vue pareil a ce tableau

    Ainsi nos paramètres crées nous allons les utiliser.

    Commençons par enregistrer les données. On le fera   juste avant la fermeture du formulaire, et cela dans la procédure formclosing

    Private Sub Form1_FormClosing(ByVal sender As Object , ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me .FormClosing

            '-------enregistrement des données à récupérer plutard

            With My .Settings

     

                'enreg la taille

     

                .taille = Me .Size

     

                'enreg le texte tapée dans le textbox

     

                .textedenote = TextBox1.Text

     

                'enreg la police du texte

     

                .policetexte = TextBox1.Font

     

                'enreg la position du formulaire

     

                .position = Me .Location

     

                'enreg la couleur d'arrière plan du textbox

     

                .coulariplan = TextBox1.BackColor

     

                'enreg la couleur du texte

     

                .coultexte = TextBox1.ForeColor

     

            End With

        End Sub

    Une fois les données enregistrées, lors de la prochaine ouverture de l’application on les utilisera et ceci dès l’ouverture du formulaire. Donc cette fois ci dans la procédure formload

      Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase .Load

            '-------utilisation des données enregistrées

            With My .Settings

     

                'récupération de la taille

     

                Me .Size = .taille

     

                'récupération le dernier texte tapée

     

                TextBox1.Text = .textedenote

     

                'récupération de la police du texte

     

                TextBox1.Font = .policetexte

     

                'récupération de la position du formulaire

     

                Me .Location = .position

     

                'récupération de la couleur d'arrière plan du textbox

     

                TextBox1.BackColor = .coulariplan

     

                 'récupération de la couleur du texte

     

                TextBox1.ForeColor = .coultexte

     

            End With

        End Sub

     

    Voilà c’est un tout petit exemple de l’utilisation des paramètres.

     

    Evidement on peut lier des paramètres directement au contrôls en passant apr leur propirété propertybinding et vb enregistre automatiquement les données ainsi liées sans votre intervention (sans faire de code) à condition que dans les propriétés du projet, dans l'infrastructure de l'application, "Enregistrer My.setting lors de l'arrêt" soit coché .

    Mais ce j’ai données est très facile (selon moi).

     

    Merci et amicalement


    Si à la seule lecture des commentaires de votre code l'on ne sait pas ce que fait votre programme jetez le tout. IBM
    lundi 12 avril 2010 16:15
  • Bonjour mmw01,

     

    Merci pour la contribution. Je vous conseille de publier votre article dans le nouveau thread, pour la période 15-04-2010 – 15-05-2010, pour pouvoir bénéficier des votes pour 30 jours.

     

    Cordialement,

    Alex


    Appel à contribution ! http://social.msdn.microsoft.com/Forums/fr-FR/vbasicfr/thread/ff4910bf-dca4-4664-b01e-b58bd860a643
    jeudi 15 avril 2010 09:08
  • Bonjour Alex,

     

    A part ça, comment on te contacte, t'as pas d'email ?

     

    Cordialement.

     


    Joe ___ Romans et Logiciels ___ http://irolog.free.fr
    jeudi 15 avril 2010 13:47
  • Bonjour,

     

    Vous pouvez me contacter sur l’email

    i-alepet@microsoft.com ou alexptr@live.com

     

    Cordialement,

    Alex


    Appel à contribution ! http://social.msdn.microsoft.com/Forums/fr-FR/vbasicfr/thread/ff4910bf-dca4-4664-b01e-b58bd860a643
    vendredi 16 avril 2010 10:21
  • Bonjour,

     

    TRANSFORMER UNE FORM (PLUS SOUPLE) EN REMPLACEMET D'UN MESSAGEBOX :

    Code déposé ici (un mois) :

    http://cjoint.com/?erbv2qJrPD

    '----------'code form1'----------Option Explicit On'objets : form1 + (button1 pour test) + form2 (voir objets sur cette form)Public Class Form1 Public choix As Long Public form2Left As Long Public form2Top As Long Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click  Call afficheMessage() ' appel pour test End Sub Sub afficheMessage()  Form2.Text = " Message"  Form2.TextBox1.Text = " Veuillez choisir ? " & vbCrLf & vbCrLf  Form2.Button1.Text = " Oui "  Form2.Button1.Visible = True  Form2.Button2.Text = " Non "  Form2.Button2.Visible = True  Form2.Button3.Text = ""  Form2.Button3.Visible = False  Form2.Button2.TabIndex = 0 ' focus  choix = 0  form2Left = 400  form2Top = 300  Form2.ShowDialog(Me)  Select Case choix   Case 1    MsgBox("Le choix est OUI ", vbExclamation)    ' suite des instruction pour "OUI"...   Case 2    MsgBox("Le choix est NON ", vbExclamation)    ' suite des instruction pour "NON"...   Case 3    MsgBox("Le choix est le bouton n°3 ? ", vbExclamation)    ' suite des instruction pour le bouton n°3...  End Select End SubEnd Class'----------'code form2'----------' form2 = messageOption Explicit OnPublic Class Form2 'pramétrage ' 5 objets : form2 + textbox1 + button1 + button2 + button3 ' paramétrage form2 ' - controlBox = false ' - formBorderStyle = fixedSingle 'paramétrage textbox1  '- multilines Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load  Me.Left = Form1.form2Left  Me.Top = Form1.form2Top End Sub Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click  Form1.choix = 1  Me.Close() End Sub Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click  Form1.choix = 2  Me.Close() End Sub Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click  Form1.choix = 3  Me.Close() End SubEnd Class

    Cordialement.

    .


    Joe ___ Romans et Logiciels ___ http://irolog.free.fr
    • Proposé comme réponse EhJoe samedi 17 avril 2010 00:05
    samedi 17 avril 2010 00:04