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 :

VB.NET utilisant Excel : Le serveur RPC n'est pas disponible


Sujet :

VB.NET

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 91
    Points : 50
    Points
    50
    Par défaut VB.NET utilisant Excel : Le serveur RPC n'est pas disponible
    Bonjour à tous,
    Je rencontre un bugge dans mon programme, qui selon moi n'a aucun rapport avec mes instructions. Le code est le suivant :

    feuilexcel1 représent un classeur Excel d'étalonnage pour un produit étalon.
    feuilexcel2 est la base de données de ces étalons, dont la colonne B contient le nom des étalons (ce même nom est utilisé pour nommer les classeurs d'étalonnage)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For i=5 to 316
    If feuilexcel2.Worksheets("feuil1").range("B" & i).Value <> "" then 'sert à ignorer les cellules vides
    feuilexcel1 = GetObject ("C:\Etalons\" & feuilexcel2.Worksheets("feuil1").range("B" & i).Value
    feuilexcel2.Worksheets("feuil1").range("F" & i).Value = feuilexcel1.Worksheets("feuil1").range("A12").Value  
    End if
    Next
    A la ligne : If feuilexcel2.Worksheets("feuil1").range("B" & i).Value <> "", j'ai le message d'erreur suivant : Le serveur RPC n'est pa disponible !!
    Je ne vois pas le rapport entre mes instructions et le message d'erreur. Quelqu'un a-t-il une idée, merci d'avance.

  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
    Arrives-tu à reproduire l'erreur systématiquement ?

    A quel pas de boucle l'erreur survient-elle ? i=5 ? i=6 ?...

    Essaie d'exécuter la boucle sans code. Ensuite essaie d'ajouter petit à petit des instructions pour voir à quel moment exactement ça bloque.

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 91
    Points : 50
    Points
    50
    Par défaut
    Merci de la suggestion,
    Hélas pour moi, le programme ne fonctionne même pas lorsque i=5, dons l'erreur doit provenir de la syntaxe plus que du fichier Excel.

  4. #4
    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
    Montre-nous plus de code, le problème se trouve peut-être ailleurs.

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 91
    Points : 50
    Points
    50
    Par défaut
    Merci de me répondre,
    Voici la totalité du code de ce formulaire sachant que si j'execute le programme en enlevant la boucle For Next, tout fonctionne. Je ne pense donc pas que le reste du code soit impliqué dans ce disfonctionnement.
    Le plus curieux est qu'il ne se produit pas systématiquement...

    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
     Private Sub F99_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load
     
            feuilexcel2 = GetObject("c:\Etalaq\commun\base de donnée etalons.xls")
     
            'Transfert des données du PV Etalonnage de l'étalon vers la base de données étalon
            'Etalons de travail
            For i = 5 To 263
                If (i >= 5 And i <= 104) Or (i >= 108 And i <= 157) Or (i >= 161 And i <= 210) Or (i >= 214 And i <= 263) Then 'pression
                    If feuilexcel2.Worksheets("feuil1").range("B" & i).Value <> "" Then 'ne prend pas en compte les lignes vides
    feuilexcel1 = GetObject("C:\Etalaq\Etalons\" & feuilexcel2.Worksheets("feuil1").range("B" & i).Value & " " & feuilexcel2.Worksheets("feuil1").range("C" & i).Value & " " & feuilexcel2.Worksheets("feuil1").range("D" & i).Value & ".xls")
    feuilexcel2.Worksheets("feuil1").range("F" & i).Value = feuilexcel1.Worksheets("releve des points").range("E24").Value
    feuilexcel2.Worksheets("feuil1").range("H" & i).Value = feuilexcel1.Worksheets("releve des points").range("B150").Value
    feuilexcel2.Worksheets("feuil1").range("I" & i).Value = feuilexcel1.Worksheets("releve des points").range("C150").Value
    feuilexcel2.Worksheets("feuil1").range("E" & i).Value = feuilexcel1.Worksheets("releve des points").range("E22").Value
    feuilexcel2.Worksheets("feuil1").range("L" & i).Value = feuilexcel1.Worksheets("releve des points").range("E123").Value
    feuilexcel2.Worksheets("feuil1").range("M" & i).Value = feuilexcel1.Worksheets("releve des points").range("G123").Value
    feuilexcel2.Worksheets("feuil1").range("K" & i).Value = feuilexcel1.Worksheets("releve des points").range("H113").Value
                    End If
                End If
            Next
            'Etalons de référence
            For i = 267 To 316
                If feuilexcel2.Worksheets("feuil1").range("B" & i).Value <> "" Then
    feuilexcel1 = GetObject("c:\Etalaq\Etalons\" & feuilexcel2.Worksheets("feuil1").range("B" & i).Value & " " & feuilexcel2.Worksheets("feuil1").range("C" & i).Value & " " & feuilexcel2.Worksheets("feuil1").range("D" & i).Value & ".xls")
    feuilexcel2.Worksheets("feuil1").range("F" & i).Value = feuilexcel1.Worksheets("releve des points").range("C3").Value
    feuilexcel2.Worksheets("feuil1").range("H" & i).Value = feuilexcel1.Worksheets("releve des points").range("A32").Value
    feuilexcel2.Worksheets("feuil1").range("I" & i).Value = feuilexcel1.Worksheets("releve des points").range("B32").Value
    feuilexcel2.Worksheets("feuil1").range("E" & i).Value = feuilexcel1.Worksheets("releve des points").range("F3").Value
    feuilexcel2.Worksheets("feuil1").range("L" & i).Value = feuilexcel1.Worksheets("releve des points").range("B30").Value
    feuilexcel2.Worksheets("feuil1").range("M" & i).Value = feuilexcel1.Worksheets("releve des points").range("D30").Value
    feuilexcel2.Worksheets("feuil1").range("K" & i).Value = feuilexcel1.Worksheets("releve des points").range("H30").Value
                End If
            Next
     
    'recherche d'éventuels retards d'étalonnage
            For i = 5 To 316
                If CStr(feuilexcel2.Worksheets("feuil1").range("J" & i).Value) <> "" Then
                    If feuilexcel2.Worksheets("feuil1").range("J" & i).Value <= Today Then
                        MsgBox("La date du prochain étalonnage de l'étalon " & feuilexcel2.Worksheets("feuil1").range("B" & i).Value & " " & feuilexcel2.Worksheets("feuil1").range("C" & i).Value & " " & feuilexcel2.Worksheets("feuil1").range("D" & i).Value & " est dépassée", MsgBoxStyle.Exclamation, "Etalonnage")
                        Show()
                    End If
                End If
            Next
     
            'recherche de doublons de n° de certificat
            For i = 5 To 316
                If CStr(feuilexcel2.Worksheets("feuil1").range("F" & i).Value) <> "" Then
                    mmx(i) = CStr(feuilexcel2.Worksheets("feuil1").range("F" & i).Value)
                End If
            Next
            Incert = False
            For ft = 1 To 315
                For fp = ft + 1 To 316
                    If mmx(ft) = mmx(fp) Then
                        Incert = True
                    End If
                Next
            Next
            If Incert = True Then
                MsgBox(" Attention, il existe deux numéros de certificat identiques ! ", MsgBoxStyle.Critical, "ALERTE")
                Show()
            End If
     
            'sauvegarde de la base de données étalons
            feuilexcel2.Application.DisplayAlerts = False 'blocage des alertes windows
            feuilexcel2.Parent.Windows(feuilexcel2.Name).Visible = True 'enlève le masquage des classeurs Excel
            feuilexcel2.SaveAs("c:\Etalaq\commun\base de donnée etalons.xls")
            feuilexcel2.Close()
     
            aide.Visible = True
            visualiser.Visible = True
            fin.Visible = True
            Label2.Visible = True
    end sub

  6. #6
    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
    Est-ce que tu as excel ouvert en même temps que tu exécutes ton programme ?

    Vérifie dans ton gestionnaire de tâches le nombre de processus EXCEL démarrés régulièrement. Il arrive souvent que le processus EXCEL ne se ferme pas correctement, encore plus quand on fait du débugage. Il ne faut pas en avoir plus que le nombre d'automation et de classeurs ouverts.

    Enfin, ce GetObject() pour ouvrir les fichiers me chiffonne. Il est possible de l'utiliser, mais je préfère utiliser la méthode Open() de l'objet application Excel qui est faite pour ça.

  7. #7
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 91
    Points : 50
    Points
    50
    Par défaut
    Je démarre mon programme avec Excel fermé, mais je vais lancer le débogage et vérifier le nombre de processus en cours.
    Réflexion faite, lorsque mon programme plante et que je suis obligé de redémarrer mon ordi, systématiquement, j'ai une alerte "Ce programme EXCEL.EXE ne répond pas", ce qui signifie bien une mauvaise utilisation de l'application durant mon programme.
    Je vais réaliser les modifs que tu me conseilles et je donne des nouvelles
    Merci

  8. #8
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 91
    Points : 50
    Points
    50
    Par défaut
    ...euh
    Quel est le code pour la méthode open ?
    feuilexcel1=Open (...)
    feuilexcel1=(...).Open
    ne fonctionnent pas.
    Par ailleurs, bien que je n'ai pas plus de processus Excel que de classeurs et automations, le processus est toujours ouvert même une fois le programme fini. Il y a t-il un moyen de s'assurer de la fermeture d'Excel une fois le programme exécuté ?
    Re-merci

  9. #9
    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
    Je pense que tu es parti(e?) d'un mauvais pied pour l'automation Excel.

    Où as-tu trouvé la méthode pour démarrer Excel avec GetObject( )?
    Quelles sont les références Excel que tu as ajoutées à ton projet ?
    Qu'as tu comme espace de noms importés ? (en haut du fichier, tu as une liste de "imports ...". Tu devrais avoir un espace de noms qui commence par Microsoft.Office...).

    Voilà un article qui pourra t'aider sur l'automation Excel : Pilotage de l'application Office Excel (Excel Automation)


  10. #10
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 91
    Points : 50
    Points
    50
    Par défaut
    Merci de m'avoir répondu mais j'ai réussi à solutionner les problèmes.
    Déjà, j'ai rajouté dans la boucle For Next, l'instruction feuilexcel1.close() pour simplifier les choses.
    Ensuite si le programme plantait, c'est que j'avais quelques erreurs dans mon fichier feuilexcel2, qui faisait que le programme n'arrivait pas à trouver la feuilexcel1, donct le nom est directement lié à la feuilexcel2 (suis-je claire ??)
    Donc, problème résolu...
    Merci de s'être penché sur mon problème
    Par contre, tout ne doit pas être bien fonctionnel car à la fin de mon programme, lorsque l'application VB se ferme, j'ai un message d'erreur d'Excel :

    "L'instruction à "0x300341b6" emploie l'adresse mémoire "0x650567f8". La mémoire ne peut pas être "read"."
    Il me suffit de faire annuler pour faire disparaître le message, mais l'erreur est toujours là et je n'en connais pas l'origine.

  11. #11
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 91
    Points : 50
    Points
    50
    Par défaut
    Pour répondre à tes questions,
    1. partie
    2. Mon projet est initialement un projet VB6 que j'ai été chargée de mettre à niveau sous Visual Studio 2005. L'instruction GetObject existait déjà dans le projet initial. Comme cela foncionnait je n'ai rien modifié
    3. Mon projet fonctionne avec 6 référence (dll) : Microsoft Data Formatting Object Library 6.0 (SP4), Microsoft.VisualBasic.Compatibility, System, System.Data, System.Drawing, System.Windows.Forms et System.XML.
    4.Enfin, concernant les espaces de noms importés, j'ai 8 espaces cochés : Microsoft.VisualBasic, Microsoft.VisualBasic.Compatibility, System, System.Collections, System.Data, System.Diagnostics, System.Drawing, System.Windows.Forms

    Voilà, voilà...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. le serveur RPC n'est pas disponible
    Par LeBabouin dans le forum Administration
    Réponses: 3
    Dernier message: 22/07/2015, 19h43
  2. Réponses: 0
    Dernier message: 29/06/2015, 22h57
  3. le service rpc n'est pas disponible
    Par fey dans le forum Windows XP
    Réponses: 0
    Dernier message: 22/03/2010, 10h54
  4. erreur: le serveur RPC n'est pas disponible (wmi)
    Par mbounou dans le forum Windows
    Réponses: 2
    Dernier message: 03/09/2007, 00h21
  5. erreur 1722 le serveur RPC n'est pas disponible
    Par StyleXP dans le forum Windows XP
    Réponses: 1
    Dernier message: 13/11/2005, 20h23

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