none
Correspondance Excel VB6 et VB.net RRS feed

  • Question

  • Dim FeuilleExcel As Excel.Worksheet

              With FeuilleExcel
                    .Activate()
                    NumLigne = 2 
                    For I = 1 To NbColonne
                        .Columns(I).HorizontalAlignment = xlVAlignCenter
                        .Cells(NumLigne, I).Font.Bold = True
                        .Cells(NumLigne, I).Interior.Color = &HFFC0C0 'Bleu clair
                        .Cells(NumLigne, I).Borders.LineStyle = xlDouble

                   Next I

            End With

    Bonjour,

    Quelqu'un connait il l'équivalence des lignes foncées (Caractères en gras) pour VB.net?

    Merci.

    mardi 18 octobre 2011 13:41

Réponses

  • Dans ce cas :

    CType(.Cells(numLigne, I), Excel.Range).Font.Bold = True
    

    .Cells(numLigne,I) retourne un objet dont l'erreur si on utilise Option Strict On. Donc il faut typer l'objet retourné en "Range" pour éviter cette erreur...

    Eventuellement une méthode d'extension devrait permettre d'éviter d'avoir à faire cela à tout bout de champ par exemple :

    Module WorksheetExtension
        <Extension()> Function CellsAsRange(ByVal wks As Worksheet, ByVal rowIndex As Integer, ByVal columnIndex As Integer) As Excel.Range
            Return CType(wks.Cells(rowIndex, columnIndex), Excel.Range)
        End Function
    End Module
    
    
    

    Ce qui permettrait de faire directement qq chose comme .CellsAsRange(numLigne,I).Font.Bold=True

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    mercredi 19 octobre 2011 09:22
    Modérateur

Toutes les réponses

  • Bonjour,

    En supposant que le problème est sur les énumérations, voir http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.xlvalign.aspx ou http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.xllinestyle(v=office.11).aspx

    (donc cela serait Excel.XlVAlign.XlVAlignCenter et Excel.xlLineStyle.xlDouble au lieu de simplement XlVAlingCenter et xlDouble).

    Pour les autres lignes, il y a un problème particulier ? (les objets exposés par Excel doivent être sensiblement exposés de la même façon que ce soit du VB6 ou du .NET).

    De préférence toujours indiquer l'erreur exacte rencontrée...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    • Modifié Patrice ScribeMVP, Moderator mardi 18 octobre 2011 15:04 Ajout du namespace Excel. Après test les autres lignes sont effectivement ok
    • Proposé comme réponse TroxsaEditor mardi 18 octobre 2011 16:05
    mardi 18 octobre 2011 14:48
    Modérateur
  • Bonjour,

    J'avais réussi à trouver les éléménts que vous donnez.

    Par contre comment accéder aux éléments colonnes et aux cellules ?

    Merci

     .Columns(I).HorizontalAlignment = ???

     .Cells(NumLigne, I).Font.Bold = ????

    mercredi 19 octobre 2011 06:12
  • Bonjour,

     

            Dim FeuilleExcel As Excel.Worksheet
    
            With FeuilleExcel
                .Activate()
                Dim NumLigne = 2
                For I = 1 To 100
                    .Columns(I).HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter
                    .Cells(NumLigne, I).Font.Bold = True
                    .Cells(NumLigne, I).Interior.Color = Excel.XlThemeColor.xlThemeColorLight2 ' &HFFC0C0 'Bleu clair
                    .Cells(NumLigne, I).Borders.LineStyle = Excel.XlLineStyle.xlDouble
                    .Columns(I).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter
                    .Cells(NumLigne, I).Font.Bold = True
                Next I
            End With
    


    J'ai juste retouché, un peu, le code pour ne pas avoir d'erreur, a vous de faire les modifications pour que ça fonctionne.

     

    A bientôt

     


    Cordialement,
    Xavier TALOUR
    Alias Troxsa SendMail
    Voir le profil de Xavier TALOUR sur LinkedIn
    • Proposé comme réponse TroxsaEditor mercredi 19 octobre 2011 07:26
    mercredi 19 octobre 2011 07:24
    Auteur de réponse
  • Cf la réponse de Xavier qui restitue explicitement les modifications que je suggérais.

    Par contre pour ".Cells(NumLigne,I).Font.Bold=True" je ne ne vois quel est le problème. Cette ligne devrait fonctionner sans souci. Si ce n'est pas le cas, merci d'indiquer précisemment quel est l'erreur générée par cette ligne comme demandé précédemment.

    Les erreurs sur xlVAlignCenter, xlDouble sont dues au fait que l'énumération utilisée doit être indiquée en VB.NET alors qu'elle est optionnelle en VB6. Ce n'est donc pas un problème général, juste une petite différence liée à la rigueur un peu plus grande du langage et cela ne concerne que les énumérations.

    Les autres lignes ne devraient pas poser problème.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    mercredi 19 octobre 2011 07:59
    Modérateur
  • L'erreur est liée à l'option de compilation "Option Strict ON"

    Option Strict ON rejette toute liaison tardive.

    Le code n'est pas accepté.

    Je préfère laisser cette option à ON.

    Comment faire dans ce cas ?

     

    mercredi 19 octobre 2011 09:03
  • Dans ce cas :

    CType(.Cells(numLigne, I), Excel.Range).Font.Bold = True
    

    .Cells(numLigne,I) retourne un objet dont l'erreur si on utilise Option Strict On. Donc il faut typer l'objet retourné en "Range" pour éviter cette erreur...

    Eventuellement une méthode d'extension devrait permettre d'éviter d'avoir à faire cela à tout bout de champ par exemple :

    Module WorksheetExtension
        <Extension()> Function CellsAsRange(ByVal wks As Worksheet, ByVal rowIndex As Integer, ByVal columnIndex As Integer) As Excel.Range
            Return CType(wks.Cells(rowIndex, columnIndex), Excel.Range)
        End Function
    End Module
    
    
    

    Ce qui permettrait de faire directement qq chose comme .CellsAsRange(numLigne,I).Font.Bold=True

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    mercredi 19 octobre 2011 09:22
    Modérateur
  • Merci pour la solution et la méthode à ajouter.

    Apparemment, il vaut mieux utiliser le Range en VB.net.

    En terme de performances, en VB6 c'était plus rapide en écriture et lecture pour les cellules lorqu'on utilisait le Range.

    mercredi 19 octobre 2011 09:43
  • Effectivement, il est préférable de minimiser le nombre d'appels vers Excel.

    Ici on fait effectivement une boucle pour modifier chaque cellule d'un bloc l'une après l'autre de la même façon ce qui fera plusieurs centaines d'appels à Excel.

    En appliquant cela au bloc concerné, on ne devrait plus avoir qu'une dizaine d'appels vers Excel...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    • Proposé comme réponse marcel46fr mercredi 19 octobre 2011 11:56
    mercredi 19 octobre 2011 10:02
    Modérateur