Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
756 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  VBA Excel 2007 Problème de variable objet. Erreur 91

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

VBA Excel 2007 Problème de variable objet. Erreur 91

n°2060374
Akhane
Posté le 01-03-2011 à 13:51:07  profilanswer
 

Bonjour à tous,
 
Je suis actuellement en stage dans le cadre de ma 2ème année de BTS Informatique de Gestion, option développeur d'applications.
 
Je dois réaliser des macros afin de générer un tableau de bord sous excel.
 
Cette portion de code appelle des fonctions qui servent à remplir mon tableau de bord.  
Mon main fait défiler un par un les fichiers excel servant de "bdd" pour créer le tableau de bord. Je lis les fichiers excel sans les ouvrir. (autre portion de code)
 
Portion du main :  

Code :
  1. 'Affectation ligne par ligne par année par année...       
  2.                     'Appel de la fonction recupAnnees
  3.                    
  4.                     monTableau = recupAnnees(nomClasseur(0))
  5.                    
  6.                     'Vérification du type de monTableau
  7.                     If IsArray(monTableau) Then
  8.                         'Va faire défiler les années entrées dans le tableau une par une
  9.                         For i = 1 To UBound(monTableau)
  10.                             'Appel de la fonction remplirSelonAnnee qui va remplir les cases selon l'année envoyée en paramètre
  11.                             Call remplirSelonAnnee(monTableau(i), k)
  12.                         Next i
  13.                     End If


 
La 1ère fonction recupAnnees récupère toutes les années où le fichier actif comporte des subventions (Dans A8:A200 il n'y a que des années, et elle n'apparaissent qu'une seule fois).
 

Code :
  1. 'Cette fonction récupère les années du contrat.
  2. Function recupAnnees(ByRef nomClasseur As Variant) As Variant
  3.     Dim monTexte As Variant
  4.     Dim i As Integer
  5.     Dim maListe() As Variant
  6.     Dim maPlage As Variant
  7.    
  8.     'myWorkbook est un objet Workbook, var globale, définie dans l'en-tête du module.
  9.     myWorkbook = nomClasseur
  10.    
  11.     'Initialisation du compteur
  12.     i = 0
  13.        
  14.     With myWorkbook.Sheets("Dépenses prévisionnelles" )
  15.         'Boucle sur les années à trouver
  16.         For monTexte = 2006 To 2020
  17.             'Initialisation de ma plage selon le mot cherché
  18.             Set maPlage = .Range("A8:A200" ).Find(monTexte, LookIn:=xlValues)
  19.             'Si une année est trouvée
  20.             If Not maPlage Is Nothing Then
  21.                 'Alors on l'inclut dans le tableau
  22.                 MsgBox monTexte 'Vérif temp
  23.                 maListe(i) = monTexte
  24.                 'Et on incrémente le compteur
  25.                 i = i + 1
  26.             End If
  27.         Next monTexte
  28.     End With
  29.    
  30.      'La fonction renvoit recupAnnees s'il existe au moins une année
  31.     If i > 0 Then
  32.         recupAnnees = maListe
  33.     End If
  34.    
  35. End Function


 
La 2ème fonction remplie les cellules du tableau de bord en fonction de certaines données recherchées à un endroit précis dans les fichiers excel annexes,et ce selon l'année.
(La fonction n'est pas finie et ne servira à rien pour mon problème présent).
 
Voilà pour l'explication succinte de mon code.
 
J'ai une erreur 91 : variable objet ou de bloc with non définie sur la ligne en gras et rouge.
 
Quelqu'un aurait-il une idée?
 
Merci d'avance,
 
Cdt
 
Akhane.

mood
Publicité
Posté le 01-03-2011 à 13:51:07  profilanswer
 

n°2060380
Arwon
Posté le 01-03-2011 à 13:59:19  profilanswer
 

Hello,
 
essaie avec  
 

  •    'myWorkbook est un objet Workbook, var globale, définie dans l'en-tête du module.
  •    Set myWorkbook = nomClasseur

 
au lieu de  
 

  •    'myWorkbook est un objet Workbook, var globale, définie dans l'en-tête du module.
  •    myWorkbook = nomClasseur

 
 
mais ca parait bizarre car normalement tu aurais du avoir l'erreur lors de la modification de la variable myWorkbook

n°2060385
Akhane
Posté le 01-03-2011 à 14:04:59  profilanswer
 

Du coup j'ai une erreur sur la ligne que tu m'as dis de modifier.
 
Erreur 424 , objet requis.
 
Pourtant dans l'en-tête j'ai mis :
Public myWorkbook As Workbook
 
....
Merci

n°2060587
SuppotDeSa​Tante
Aka dje69r
Posté le 02-03-2011 à 10:17:52  profilanswer
 

Si nomClasseur est le nom du classeur en type Chaine ca ne peut pas marcher...
 
Si c'est le cas, je passerai par un truc comme ca :
With Workbooks(nomClasseur).Sheets ("Dépenses prévisionnelles" )
 
 
ou si vraiment tu veux passer par 'myWorkbook'
Set myWorkbook = Workbooks(nomClasseur)


Message édité par SuppotDeSaTante le 02-03-2011 à 10:19:32

---------------
Soyez malin, louez entre voisins !
n°2060607
Akhane
Posté le 02-03-2011 à 11:16:00  profilanswer
 

C'est ce que j'ai finis par faire hier le :
With Workbooks(nomClasseur).Sheets("Dépenses prévisionnelles" )
 
Mais maintenant ça me dit que l'indice n'appartient pas à la sélection sur cette ligne là...
 
:(

n°2060609
SuppotDeSa​Tante
Aka dje69r
Posté le 02-03-2011 à 11:17:09  profilanswer
 

Erreur dans le nom de l'onglet ? "Dépenses prévisionnelles"


---------------
Soyez malin, louez entre voisins !
n°2060614
Akhane
Posté le 02-03-2011 à 11:33:43  profilanswer
 

pour éviter toutes erreurs, j'ai pour habitude de faire des copier coller des noms.
Là je l'ai pris directement de l'onglet...
 
Et dans une autre portion de code j'arrive à l'atteindre cette feuille, mais je ne fais pas la même méthode car je ne recherche pas sur une plage, je prends la valeur d'une cellule particulière pour la copier dans mon tableau de bord. (ADODB)

n°2060639
SuppotDeSa​Tante
Aka dje69r
Posté le 02-03-2011 à 12:50:40  profilanswer
 

L'erreur est sur ta ligne 14 ?
 
Et myWorkbook.name renvoie bien le nom de ton classeur ?


Message édité par SuppotDeSaTante le 02-03-2011 à 12:51:39

---------------
Soyez malin, louez entre voisins !
n°2060643
Akhane
Posté le 02-03-2011 à 13:06:04  profilanswer
 

Je ne sais pas car finalement j'ai opté pour :  
With Workbooks(nomClasseur).Sheets("Dépenses prévisionnelles" )
 
que je trouve plus simple finalement de compréhension et de lecture pour les autres développeurs qui suivront mon projet après mon stage...
 
Mais lorsque je fais en F8, j'affiche les variables et nomClasseur porte bien le nom du classeur en question...


Message édité par Akhane le 02-03-2011 à 13:06:45
n°2060646
SuppotDeSa​Tante
Aka dje69r
Posté le 02-03-2011 à 13:10:56  profilanswer
 

[:mr mala:1]  
Donc ? Ca marche ?


---------------
Soyez malin, louez entre voisins !
mood
Publicité
Posté le 02-03-2011 à 13:10:56  profilanswer
 

n°2060657
Akhane
Posté le 02-03-2011 à 14:10:09  profilanswer
 

Non... ça me dit que l'indice n'appartient pas à la sélection sur cette ligne là :
With Workbooks(nomClasseur).Sheets("Dépenses prévisionnelles" )  
 
:S

n°2060662
SuppotDeSa​Tante
Aka dje69r
Posté le 02-03-2011 à 14:48:12  profilanswer
 

Et juste avant un
Msgbox nomClasseur
Te donne quoi ?


---------------
Soyez malin, louez entre voisins !
n°2060686
Akhane
Posté le 02-03-2011 à 15:58:29  profilanswer
 

Fiche INFO  0000 - unNomDeSubventionneur
Ce qui est le nom du classeur :s

n°2060687
SuppotDeSa​Tante
Aka dje69r
Posté le 02-03-2011 à 16:05:26  profilanswer
 

Hum, je pense avoir compris, il te manque le ".xls" ou ".xlsx"
 
Avec un truc de ce genre :

Code :
  1. Set myWorkbook = ActiveWorkbook
  2. With Workbooks(myWorkbook.Name).Sheets("Feuil2" )
  3.     .Cells(1, 1).Value = 0
  4. End With


myWorkbook.Name renvoie bien MonClasseur.xls et le code passe sans souci
 
 
Et si je fais :

Code :
  1. With Workbooks("MonClasseur" ).Sheets("Feuil2" )

Ca me met la meme erreur que toi
 
 
Et si je fais :

Code :
  1. With Workbooks("MonClasseur.xls" ).Sheets("Feuil2" )

Ca passe
 
:jap:


Message édité par SuppotDeSaTante le 02-03-2011 à 16:08:03

---------------
Soyez malin, louez entre voisins !
n°2060757
galopin01
Posté le 02-03-2011 à 22:12:49  profilanswer
 

Bonjour,
Hum... Je pratique pas beaucoup ce genre de sport ! mais Akhane a dit  
 
Je lis les fichiers excel sans les ouvrir
ça ne m'étonne donc pas trop que " l'indice n'appartient pas à la sélection"
 
En effet, je suppose que Workbooks(...) ne considère que les classeurs ouverts.
Il doit donc y avoir une autre manière de lire dans le classeur non ouvert.
 
A+

n°2060796
Akhane
Posté le 03-03-2011 à 09:38:49  profilanswer
 

Citation :

Hum, je pense avoir compris, il te manque le ".xls" ou ".xlsx"
 
Avec un truc de ce genre :
Code :
 
   1. Set myWorkbook = ActiveWorkbook
   2.
   3. With Workbooks(myWorkbook.Name).Sheets("Feuil2" )
   4.     .Cells(1, 1).Value = 0
   5.
   6.
   7. End With
 
 
myWorkbook.Name renvoie bien MonClasseur.xls et le code passe sans souci
 
 
Et si je fais :
Code :
 
   1. With Workbooks("MonClasseur" ).Sheets("Feuil2" )
 
Ca me met la meme erreur que toi
 
 
Et si je fais :
Code :
 
   1. With Workbooks("MonClasseur.xls" ).Sheets("Feuil2" )
 
Ca passe
 
:jap:


 
Alors en fait je me suis arrangée pour que le .xls soit directement dans le nom du classeur, et je fais un msgBox juste avant le with et le nom du classeur est bien complété du .xls
Cependant l'erreur persiste!
 

Citation :

Bonjour,
Hum... Je pratique pas beaucoup ce genre de sport ! mais Akhane a dit  
 
Je lis les fichiers excel sans les ouvrir
ça ne m'étonne donc pas trop que " l'indice n'appartient pas à la sélection"
 
En effet, je suppose que Workbooks(...) ne considère que les classeurs ouverts.
Il doit donc y avoir une autre manière de lire dans le classeur non ouvert.
 
A+


 
Ce que j'appelle lire un fichier excel sans l'ouvrir c'est le fait de pouvoir aller chercher des informations dans ce dossier sans pour autant qu'il s'ouvre de manière visuelle pour l'utilisateur. Et j'y suis arrivée dans une autre portion de code à lire une information dans cette feuille précisément et à copier la valeur de la cellule dans mon tableau de bord...
Donc je pensais procéder de la même façon pour cette portion de code :

n°2060806
Arwon
Posté le 03-03-2011 à 09:54:35  profilanswer
 

Si je me trompe pas pour le problème d'extension, il peut etre résolu en modifiant les parametres des dossiers.
 
si tu es sous XP :
 
Démarrer -> Panneau de configuration -> Option des dossiers -> Affichage -> décocher "Masquer les extensions des fichiers dont le type est connu"

n°2060885
SuppotDeSa​Tante
Aka dje69r
Posté le 03-03-2011 à 11:29:21  profilanswer
 

Bah là, je ne vois pas...


---------------
Soyez malin, louez entre voisins !
n°2060904
Akhane
Posté le 03-03-2011 à 12:32:29  profilanswer
 

:(
 
Je vais continuer à chercher.
 
Merci quand même :)
C'est sympa pour l'aide!

n°2060947
SuppotDeSa​Tante
Aka dje69r
Posté le 03-03-2011 à 15:18:55  profilanswer
 

Sinon, envoie moi le fichier, je zieuterai avec des fichiers appelés fictifs...


---------------
Soyez malin, louez entre voisins !

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  VBA Excel 2007 Problème de variable objet. Erreur 91

 

Sujets relatifs
Problème lors de l'import de GTKAide : VBA SELECTION une colonne entière sous condition bug
Cherchez l'erreur : access check failed.[C++] erreur : no matching function for call
Problème à l'importation B.D.D MySQLretransmettre l'erreur à l'appliation au dessus
Menu déroulant et tableur excelVBA - Selections lignes tableau sous Excel
Probléme language C 
Plus de sujets relatifs à : VBA Excel 2007 Problème de variable objet. Erreur 91


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR