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

VBScript Discussion :

[VBS-Excel] Ecrire à partir de la dernière ligne


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut [VBS-Excel] Ecrire à partir de la dernière ligne
    Bonjour le forum,
    mon script ouvre excel et doit ajouter des informations à partir de la dernière ligne.

    La seconde ligne de code ne fonctionne pas en VBS (mais fonctionne en VBA sans "objExcel."):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
    objExcel.cells(2,5).value = "Taille"
    objExcel.Range("A1").End(xlDown).Offset(1,0).Select  
    ...
    Erreur : Erreur d'exécution inconnue"
    code : 800A03EC
    Si la seconde ligne est mise en remarque, le remplissage se fait depuis "A1".


    Avez-vous une proposition de solution ?
    Merci.

  2. #2
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut complément
    le fait de changer en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    objExcel.cells(2,5).value = "Taille"
    'objExcel.cells(1,1).End(xlDown).Offset(1,0).Select
    objexcel.cells(1,1).value="eeeeeee"
    le code fonctionne en commençant à la cellule "F19" !

    ESVBA

  3. #3
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonsoir,
    on ne voit pas comment tu ouvre ton fichier excel. .. si objExcel est ton objet application, améliore ton code en précisant classeur et feuille ..

    évite d'utiliser select et Activate c'est source de problèmes..., comme il est source de problème en VBA d'utiliser Cells sans préciser classeur et feuille...

  4. #4
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut bonsoir et merci bbil,
    bonsoir et merci bbil,

    le but est de récupérer la liste des logiciels installés sur le poste et à mettre les infos dans une feuille excel.

    Voici un peu plus de 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
        '--- Déclaration
        Dim objExcel, objClasseur
        Set objExcel = CreateObject("Excel.Application")
        Set objClasseur = objExcel.Workbooks.Open("RecupInstallation.xlsm")
     
        '--- Création de la feuille si besoin
        Dim strNomFeuille
        strNomFeuille = "Liste logiciels tout poste"
     
        '--- si erreur => n'existe pas
        If objExcel.IsError(objExcel.Evaluate("='" & strNomFeuille & "'!A1")) Then
            objExcel.Sheets.Add ,objExcel.Sheets(objExcel.Sheets.Count) 
            objExcel.ActiveSheet.Name = strNomFeuille
        Else
            '--- Active la feuille
            objExcel.Sheets(strNomFeuille).Activate
        End If
     
        objExcel.cells(1,1).value = "Applications installées"
        objExcel.cells(2,1).value = "Ordinateur"
        objExcel.cells(2,2).value = "Logiciels"
        objExcel.cells(2,3).value = "Date"
        objExcel.cells(2,4).value = "Version"
        objExcel.cells(2,5).value = "Taille"
        '---- Erreur ci-dessous
        objExcel.workbooks("RecupInstallation.xlsm").Sheets(strNomFeuille).Range("A1").End(xlDown).Offset(1,0).Select 
        ''---------------------
     
        ' List All Installed Software
        Const HKLM = &H80000002
        strKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
     
        If GetCompName = vbNullString Then Quit
        If trim(GetCompName) = "" Then StrComputer = "."
     
        Set objReg = GetObject("winmgmts://" & StrComputer & "/root/default:StdRegProv")
     
        objReg.EnumKey HKLM, strKey, arrSubkeys
     
        '--- Recherche
        For Each strSubkey In arrSubkeys
             ...
    Ca ne fonctionne toujours pas en déclarant tout.
    Ce code fonctionne en VBA. Pour le convertir en vbs, j'ai simplement créer l'objet Excel et ajouter sa déclaration aux fontions.

    Y a-t-il d'autres choses à savoir ?

    ESVBA

  5. #5
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonjour,
    il te faut déclarer la constante xlDown .., tout en haut du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Option Explicit 
    Const xlDown  = -4121
    j'ai aussi rajouter l'option explicit qui t'aurais permit de détecter l'erreur plus tôt.



    Ce code fonctionne en VBA. Pour le convertir en vbs, j'ai simplement créer l'objet Excel et ajouter sa déclaration aux fontions.
    Peu être cela n'empêche qu'utiliser les variables, collections.. pointant sur le classeur actif, la feuille active , la cellule active ... est source de problème...

    Ainsi lors de l'ouverture du classeur tu affecte celui-ci à une variable, c'était bien parti...
    utilise ensuite cette variable pour accéder à ton classeur par exemple pour la ligne qui te cause problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objClasseur.Sheets(strNomFeuille).Range("A1").End(xlDown).Offset(1,0).Select
    (bon j'ai laissé le select .. qui ne me plait pas trop mais ne connaissant pas la suite de ton code je ne peu le supprimer.)



    Pour accéder à ta feuille plutôt qu'utiliser l'objet cellules du classeur actif.. utilise directement la feuille en rajoutant une référence à celle-ci.. pour le principe :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim objExcel, objClasseur,oshLstLog
      (...)
        If objExcel.IsError(objExcel.Evaluate("='" & strNomFeuille & "'!A1")) Then
           set oshLstLog = objExcel.Sheets.Add (,objExcel.Sheets(objExcel.Sheets.Count) )
            oshLstLog.Name = strNomFeuille
        Else
            '--- Active la feuille 
            set oshLstLog = objExcel.Sheets(strNomFeuille)
        End If
     
        oshLstLog.cells(1,1).value = "Applications installées"
        oshLstLog.cells(2,1).value = "Ordinateur"
    (...)

  6. #6
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut Trouvé
    Il faut vraiment tout déclarer entièrement. Voici la solution fonctionnant pour moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        oshLstLog.Activate  'Nécessaire pour pointer ailleurs que sur la dernière feuille !
        oshLstLog.Range("A1").End(xlDown).Offset(1,0).Select 'Nécessite la ligne précédente
    En effet, sans la première ligne, la seconde ligne pointe uniquement sur la dernière feuille même en la déclarant complétement (Objet.Classeur.feuille.plage) l'instruction.



    Voir le résultat dans les contibutions VBS.

    Merci à vous bbil.


    ESVBA

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/05/2014, 13h30
  2. Réponses: 5
    Dernier message: 12/02/2014, 10h41
  3. [XL-2000] Copier données à partir de la dernière ligne remplie
    Par chouki60 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/07/2011, 17h45
  4. Réponses: 3
    Dernier message: 07/07/2009, 17h47
  5. Ajouter/supprimer ligne à partir de la dernière ligne d'une plage
    Par jedimaster10 dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 22/02/2008, 15h18

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