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

Macros et VBA Excel Discussion :

VBA - Méthode BrowseForFolder a échoué


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 11
    Par défaut VBA - Méthode BrowseForFolder a échoué
    Bonjour à tous,

    J'ai récupéré un script VBA permettant, via des boites de dialogue, de découper en plusieurs dalles un fichier raster. (via un programme FWtools)
    Tout marche bien sauf une chose, lorsqu'une boite de dialogue s'ouvre pour choisir le fichier raster à importer, j'obtiens l'erreur suivante :

    Erreur d'exécution '-2147024894 (80070002)':

    La méthode 'BrowseForFolder' de l'objet 'IShellDispatch4' a échoué.
    Je colle les lignes concernées lorsque je fais un débug :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set monraster_src = CreateObject("Shell.Application")
     
    Set objFichier = monraster_src.BrowseForFolder(&H0&, "Veuillez indiquer le chemin d'accès au fichier " & descrFichier & " à importer", &H4000&)
    Le plus étonnant est que ce script fonctionne sans erreur chez la personne m'ayant fourni le code.

    Quelq'un pourrait-il m'aider ?

    Merci d'avance

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 11
    Par défaut VBA - Méthode BrowseForFolder a échoué
    Re-Bonjour tout le monde !

    Bon eh bien déçu de n'avoir reçu aucune réponse...peut-être mon problème ne vous intéresse-t-il pas ou je ne suis pas assez explicite ? Pour le coup, je colle une bonne partie du script vba, cela intéressera peut-être davantage quelqu'un !
    Petit rappel, ce script permet, après exécution du UserForm :
    - d'afficher des boites de dialogues pour spécifier des coordonnées en pixel,
    - de choisir un chemin pour le dossier dans lequel seront stockés les fichiers générés,
    - d'entrer des noms de fichiers pour les batchs à générer,
    - choisir le chemin du dossier où se trouve le fichier raster à découper

    Enfin, normalement, 1 fichier.bat est généré, qui lance un utilitaire (fwtools et gdal_translate) et permet de créer des tuiles d'un raster.

    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
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    Option Explicit
    Public chemin As String
    Public monraster_2 As String
    Public chaine_gdalinfo As String
    Public T As Double
    Public L_Y As Variant
    
    Public Function RoundUp(ByVal vvaleur As Variant, Optional ByVal iNbDecimal As Integer) As Variant
       If Abs(iNbDecimal) < 5 Then RoundUp = -Int(-vvaleur * 10 ^ iNbDecimal) / 10 ^ iNbDecimal
    End Function
    Public Sub batch()
    
    Dim Coordxmin As Long
    Dim I As Long
    Dim J As Long
    Dim I2 As Long
    Dim J2 As Long
    Dim Pas As Long
    Dim Pas_Y As Long
    Dim Pas2 As Long
    Dim Pas3 As Long
    Dim CoordXvalid As Long
    Dim CoordYvalid As Long
    Dim Coordxmax As Long
    Dim Coordymin As Long
    Dim Coordymax As Long
    Dim Gdalcy2 As Long
    Dim Gdalcy1 As Long
    Dim Gdalcx1 As Long
    Dim Gdalcx2 As Long
    Dim X As Integer
    Dim Y As Integer
    Dim T As Double
    Dim L As Variant
    Dim L_Y As Variant
    Dim dossier As Object, Rep As Object
    Dim chemin As String
    Dim MonBatch As String
    Dim Monbacth_info As String
    Dim bat As String
    Dim monraster_src As Object
    Dim objFichier As Object
    Dim objAppli As Object
    Dim descrFichier As String
    Dim monraster As String
    Dim monraster_2 As String
    Dim chaine_gdalinfo As String
    Dim NomFic As String, Chaine As String, Chaine2 As String, Chaine3 As String, chaine4 As String
    Dim bat_sans_bat As String
    Dim nom_dossier As String
    Dim nom_dossier_txt As String
    Dim gdal_acces As String
    Dim gdal As String
    Dim metadonnees As String
    Dim laligne
    Dim position_pixel As Long
    Dim newHour As Variant
    Dim newMinute As Variant
    Dim newSecond As Variant
    Dim waitTime As Variant
    
    
    
    
    'fonction GDAL
    Const Gdalinfo As String = "gdalinfo"
    
    
    'taille du pixel en mètre fournit par GDALINFO
    Const Gdal_translate As String = "gdal_translate -of GTiff -srcwin "
    
    
    
    'coordo en pixel des coins nord ouest et sud est
    
    Coordxmin = Range("A2")
    Coordxmax = Range("B2")
    Coordymin = Range("C2")
    Coordymax = Range("D2")
    
    'pas terrain que l'on souhaite avoir pour découpage en mètre
    L = Range("E2")
    L_Y = Range("F2")
    
    I = 0
    J = 0
    
    
    'Initialisation des paramètres, pour de compléter le fichier batch
    
    'Active l'appli shell pour lancer l'ouverture du répertoire
    Set dossier = CreateObject("Shell.Application")
        
    'Ouvre la boîte de dialogue "sélection d'un répertoire"
        Set Rep = dossier.BrowseForFolder(&H0&, "Sélectionner un répertoire", &H1&)
        
    'Si le chemin est vide, alors prend le chemin que l'on donne
        If Not Rep Is Nothing Then
            
            Set Rep = Rep.items.Item
            chemin = Rep.Path
                  
        End If
        
    'saisir le nom du fichier batch que l'on va mettre dans le répertoire choisit précédemment
       MonBatch = InputBox("Saisir le nom du Fichier batch TRANSLATE")
       
    
    Monbacth_info = InputBox("saisir le nom du batch pour GDALINFO")
       
    'concatenation du chemin d'accès
      bat = chemin & "\" & MonBatch
    'retire au chemin d'accès l'extention du fichier .bat
     bat_sans_bat = Left(bat, Len(bat) - 4)
      
    'Active l'appli shell pour lancer l'ouverture du répertoire source des données raster
    Set monraster_src = CreateObject("Shell.Application")
    
    'Ouverture de la boîte de dialogue pour sélectionner le fichier voulu
    Set objFichier = monraster_src.BrowseForFolder(&H0&, "Veuillez indiquer le chemin d'accès au fichier " & descrFichier & " à importer", &H4000&)
     
    monraster = chemin & "\" & objFichier
    monraster_2 = chemin & "\" & Monbacth_info
    gdal = "C:\soft\FWTOOL~1.2\bin"
    
        Open monraster_2 For Output As #1
        
            gdal_acces = "cd" & " " & gdal
            chaine_gdalinfo = Gdalinfo & " " & monraster & " " & ">" & " " & monraster & ".txt"
    
    
            Print #1, gdal_acces
            Print #1, chaine_gdalinfo
       
        Close #1

    Voilà, lorsque j'en suis à l'étape de choix du chemin pour le fichier raster, je reçois une erreur que j'ai mentionné dans mon 1er post...et les lignes concernées après debug sont en rouge...

    Merci pour vos réponses si vous trouvez une solution !

    Ps : ma version d'excel est 2003 sp3

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour, et un peu en retard... bienvenue sur le forum.
    ton code doit fonctionner, seule possibilité que je vois, tu n'a pas mis la référence Ole Automation.
    A+

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 11
    Par défaut
    Bonjour LeForestier,

    Merci pour ton message de bienvenue et également merci pour ta réponse !
    Je ne suis pas encore un pro en vba, que veux-tu dire donc concernant la référence Ole Automation ? Est-ce que c'est une déclaration de variable ? Un outil à activer ?
    Merci beaucoup !

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Quand tu est dans l'éditeur VBA (IDE)
    Outils >> Références >> dans la fenêtre tu cherche Ole Automation, tu ckeck. et OK
    Tu dis.
    A+

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 11
    Par défaut
    Eh bien j'ai vérifié, et Ole Automation était bien activé...
    C'est pas vrai, je sens que je ne trouverai jamais de solution décidément...

Discussions similaires

  1. [AC-2007] Code VBA : Méthode OpenReport et Access en non visible : ShowWindow
    Par thierrylosson dans le forum Access
    Réponses: 0
    Dernier message: 28/05/2015, 10h40
  2. [XL-2007] Union(range(Tb1),range(Tb2)).find => la méthode 'Union' a échoué
    Par mouftie dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 27/05/2015, 21h20
  3. La méthode SEARCH a échoué
    Par clem200 dans le forum Général VBA
    Réponses: 2
    Dernier message: 25/04/2014, 09h01
  4. [XL-2000] Erreur 1004 méthode global a échoué
    Par Sierra dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/03/2010, 22h21
  5. Réponses: 4
    Dernier message: 20/01/2006, 15h53

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