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

VBA Excel 2007 Problème de variable objet. Erreur 91 - VB/VBA/VBS - Programmation

Marsh Posté le 01-03-2011 à 13:51:07    

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.

Reply

Marsh Posté le 01-03-2011 à 13:51:07   

Reply

Marsh Posté le 01-03-2011 à 13:59:19    

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

Reply

Marsh Posté le 01-03-2011 à 14:04:59    

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

Reply

Marsh Posté le 02-03-2011 à 10:17:52    

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 !
Reply

Marsh Posté le 02-03-2011 à 11:16:00    

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à...
 
:(

Reply

Marsh Posté le 02-03-2011 à 11:17:09    

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


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

Marsh Posté le 02-03-2011 à 11:33:43    

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)

Reply

Marsh Posté le 02-03-2011 à 12:50:40    

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 !
Reply

Marsh Posté le 02-03-2011 à 13:06:04    

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
Reply

Marsh Posté le 02-03-2011 à 13:10:56    

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


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

Marsh Posté le 02-03-2011 à 13:10:56   

Reply

Marsh Posté le 02-03-2011 à 14:10:09    

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

Reply

Marsh Posté le 02-03-2011 à 14:48:12    

Et juste avant un
Msgbox nomClasseur
Te donne quoi ?


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

Marsh Posté le 02-03-2011 à 15:58:29    

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

Reply

Marsh Posté le 02-03-2011 à 16:05:26    

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 !
Reply

Marsh Posté le 02-03-2011 à 22:12:49    

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+

Reply

Marsh Posté le 03-03-2011 à 09:38:49    

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 :

Reply

Marsh Posté le 03-03-2011 à 09:54:35    

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"

Reply

Marsh Posté le 03-03-2011 à 11:29:21    

Bah là, je ne vois pas...


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

Marsh Posté le 03-03-2011 à 12:32:29    

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

Reply

Marsh Posté le 03-03-2011 à 15:18:55    

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


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

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed