IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Ecrire sur une autre feuille excel d'un même classeur


Sujet :

VB.NET

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Ecrire sur une autre feuille excel d'un même classeur
    Bonjour,

    Je suis actuellement en train de développer un programme qui me permettrait de demander à l'utilisateur d'entrer un nombre entier (une valeur de chiffre d'affaire) et de choisir si je dois prendre les chiffres d'affaire inférieures ou supérieures au chiffre d'affaire demandé par l'utilisateur mais je dois également mettre les données correspondant aux chiffres d'affaire sur la feuille 2.

    Le but serait à partir d'une feuille Excel de mettre toutes les données correspondant au chiffre d'affaire supérieures ou inférieures au chiffre d'affaire entré par l'utilisateur sur la deuxième feuille du classeur.

    L'interface graphique n'est pas très compliqué :
    - Un TextBox (Tn1)
    - Deux Radiobutton (Supérieur & Inférieur.)

    Mais il y a un hic, le programme se lance mais n'écris pas sur la feuille excel. Il n'y a aucune erreur. Il y a cependant des warnings (Résolution à liaison tardive)

    Voici donc mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    Sub Button1Click(sender As Object, e As EventArgs)
            Dim i As Integer
            Dim j As Integer
            Dim k As Integer
            Dim l As Integer
            Dim m As Integer
            Dim o As Integer
     
     
            Dim n As string
     
            Dim cpt As Integer
            Dim app As Object
            Dim f As Object
            Dim cl As Object
            Dim f2 As Object
     
     
     
            n = Tn1.Text
            cpt = 0
            i=0
            j=0
            k=0
            l=0
            m=0
            o=0
     
            app=Createobject("excel.application")
            app.visible=true
            app.ScreenUpdating=true
            app.workbooks.Open("P:\e_12_prcf_26\Algorithme\algo.xlsx")
            cl=app.workbooks.item(1)
            f=app.worksheets.item(1)
            f2=app.Worksheets.item(2) 
     
            If radiobutton1.Checked=True Then
     
                    Do
                        If (n < f.Cells(j, 5).Value) Then
     
           f2.Cells(j, 1).Value=f.Cells(j, 1).Value
           f2.Cells(j, 2).Value=f.Cells(j, 2).Value
           f2.Cells(j, 3).Value=f.Cells(j, 3).Value
           f2.Cells(j, 4).Value=f.Cells(j, 4).Value
           f2.Cells(j, 5).Value=f.Cells(j, 5).Value
     
                       End If
     
           cpt=cpt+1
           j=j+1
     
                    Loop Until f.Cells(j, 5).Value Is Nothing
            End if
     
            If radiobutton2.Checked=True Then
     
                    Do
                       If (n > f.Cells(k,5).Value) Then
           f2.Cells(k,1).Value=f.Cells(k,1).Value
           f2.Cells(k,2).Value=f.Cells(k,2).Value
           f2.Cells(k,3).Value=f.Cells(k,3).Value
           f2.Cells(k,4).Value=f.Cells(k,4).Value
           f2.Cells(k,5).Value=f.Cells(k,5).Value
     
           k=k+1
     
     
                       End If
                    loop until f.Cells(k,5).Value Is Nothing
            End If
     
            If f2.Cells(l, 5).Value<0 Then
                Do
                    f2.cells(l, 5).value.interior.colorindex=3
                Loop until f.Cells(m, 5).Value Is nothing
            End If
     
            If f2.Cells(l, 5).Value>0 Then
                Do 
                    f2.cells(l, 5).value.interior.colorindex=3
                Loop until f.Cells(l, 5).Value Is nothing
            End If
     
            f2.Cells(cpt + 1, 1).Value = cpt
     
            cl.saveas("P:\e_12_prcf_26\Algorithme\algo2.xlsx")
            app.screenUpdating=True
            app.quit
     
            f=Nothing
            cl=Nothing
            app=Nothing
     
            End Sub
    J'implore votre aide pour me dire ce qui ne va pas sur mon programme, j'ai essayer maintes et maintes possibilités mais cela ne fonctionne pas.

    Le fichier de données se compose comme suit

    Colonne 1 : Année
    Colonne 2 : Mois
    Colonne 3 : Code Client
    Colonne 4 : Nom de l'entreprise
    Colonne 5 : Chiffre d'affaire

    De plus, je souhaite coloré sur la deuxième feuille les valeurs négatives en rouge et les positives en vert.

    En vous remerciant d'avance.

    Cordialement,
    Linker53

  2. #2
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Points : 2 927
    Points
    2 927
    Par défaut
    Peut-être de l'aide dans l'article Pilotage de l'application Office Excel (Excel Automation) (méthode GetWorksheet au paragraphe III-E) ?

  3. #3
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2012
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2012
    Messages : 330
    Points : 774
    Points
    774
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Button1Click(sender As Object, e As EventArgs)
        Dim i As Integer
        Dim j As Integer
        '...
    Il manque l'attachement de l’événement à la procédure.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Button1Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim i As Integer
        Dim j As Integer
        '...

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 676
    Points : 1 178
    Points
    1 178
    Par défaut
    Bonsoir,
    voici un début de réflection sur ce qui, je pense, pourrait améliorer votre code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    Imports Microsoft.Office.Interop
     
    Public Class Form1
     
        Dim leBonChemin As String = Application.StartupPath
     
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
     
            '--- Déclaration et assignation, plus lisible et une ligne de code en moins.
            Dim i As Integer = 1
            Dim j As Integer = 1
            Dim k As Integer = 1
            Dim l As Integer = 1
            Dim m As Integer = 1
            Dim o As Integer = 1
            '--- L'indice pour les cellules Excel est de base 1.
            '--- En base 0 : Exception de HRESULT : 0x800A03EC.
     
     
            '--- n correspond à un chiffre d'affaire , autant le typer directement.
            Dim n As Decimal
            ' --- Ici il faudra tester le contenu du textBox.
            n = Decimal.Parse(Tn1.Text)
     
            Dim cpt As Integer
            cpt = 0
     
            '--- Idem ici, typer directement.
            Dim app As New Excel.Application 'Application Excel
            Dim cl As Excel.Workbook 'Classeur Excel
            Dim f As Excel.Worksheet 'Feuille1 Excel
            Dim f2 As Excel.Worksheet 'Feuille2 Excel
     
            app.Workbooks.Open(leBonChemin & "\algo.xlsx")
            cl = app.Workbooks.Item(1)
            '--- Ci dessous deux façons différentes de typer une feuille Excel.
            f = CType(cl.Worksheets(1), Excel.Worksheet)
            f2 = CType(app.Worksheets.Item(2), Excel.Worksheet)
     
            app.Visible = True
            app.ScreenUpdating = True
     
            '--- On déclare deux objets de type Range, soit une cellule ou un groupe de cellules d'un classeur Excel.
            '--- Avec Option Strict=On VB refuse les liaisons tardives.
            '--- C'est à dire que VB veut savoir quel type de variable est dans l'objet et ne veut pas avoir à le deviner.
            '--- castRange pour une cellule ou un groupe de cellules de Feuil1 et castRange2 pour Feuil2.
            Dim castRange As Excel.Range
            Dim castRange2 As Excel.Range
     
            If RadioButton1.Checked = True Then
                '--- On réinitialise les valeurs de j et i.
                i = 1 : j = 1
                Do
                    '--- On Spécifie la cellule exacte sur feuil1.
                    '--- Ici, il faudra tester ce que contient réellement cette cellule.
                    castRange = CType(f.Cells(j, 5), Excel.Range)
                    If n < Convert.ToDecimal(castRange.Value) Then
     
                        '--- On copie les valeurs.
                        castRange2 = CType(f2.Cells(j, i), Excel.Range)
                        castRange2.Value = castRange.Value
     
                        '--- Si on doit traiter le rendu, autant le faire quand on tient la cellule.
                        If castRange.Value IsNot Nothing AndAlso Decimal.Parse(castRange2.Value.ToString) > 0 Then
                            castRange2.Font.Color = RGB(95, 125, 175)
                        End If
     
                    End If
     
                    '--- On incrémente nos indices de cellules.
                    i += 1
                    cpt += 1
                    j += 1
                Loop Until castRange.Value Is Nothing
            End If

Discussions similaires

  1. Réponses: 6
    Dernier message: 20/06/2015, 10h18
  2. trier et copier des données sur une autre feuille excel
    Par mirage37 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 09/07/2012, 17h08
  3. [XL-2003] copier un feuille excel sur une autre feuille excel
    Par facteur dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/08/2010, 13h31
  4. Excel-copier des lignes sur une autre feuille
    Par petecul dans le forum Excel
    Réponses: 7
    Dernier message: 13/09/2007, 02h56
  5. Réponses: 6
    Dernier message: 03/02/2007, 05h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo