XL 2016 [VBA] erreur 424 objet requis [Résolu]

tangiwankenobi44

XLDnaute Nouveau
Bonjour,
J'ai une erreur 424 'objet requis' sur un bout de code et je ne comprends pas. L'erreur survient lors du positionnement sur la premiere ligne vide (en gras). Pourtant, ca a l'air de bien se positionner. Alors je me suis dit que ca pouvait venir du fait que je venais d'ouvrir un fichier different, donc j'ai fait dans le meme classeur et j'ai la meme erreur puis j'ai bidouillé pour éviter ma ligne qui coince et du coup j'ai une erreur 1004, erreur definie par l'application ou l'objet, que je comprend encore moins, sur la ligne suivante (celle ou j'assigne dateJourOperation à la premiere cellule)
La je ne sais plus quoi essayer.. Alors si quelqu'un saurait me donner des idées.
J'ai deja pourtant utilisé ce genre de positionnement sur la derniere ligne occupee avec ce meme code...
Merci d'avance
[...]
'Pour préparer la copie de ce qu'on veut, on utilise la fonction recupereUCESO qui renvoie un tableau en fonction
'du nom de la feuille et de quoi (c'est le nom du parametre)on veut
recupereUCESO "SchémaJ-6", "Prep"
'du coup la dans le tableau UCESO(110) il y a la lign Prep de 00h00 a 3h00 la nuit suivante.
'en String car meme si ce sont de nb, on les recupere en tableau de String
'on a rempli les 3 premieres heures avec 1 et a
'partir de 3h TU on remplit avec ce qu'il y a dans la feuille ScémaJ-6 ligne de prep
'On va donc ouvrir le fichier cible qui est UCESO BV+RCY.xlsx

Dim nomCompletUCESO_BVRCY As String
nomCompletUCESO_BVRCY = cheminPrincipal + "\archives\Besoins\UCESO BV+RCY.xlsx"
Workbooks.Open Filename:=nomCompletUCESO_BVRCY

Dim premiereLigne As Integer
premiereLigne = (Worksheets("UCESO_BV+RCY").Cells(Row.Count, 1).End(xlUp).Row) + 1

'On se positionne sur la première cellule de la premiere ligne vide
'On y copie la dateJourOperation
Worksheets("UCESO_BV+RCY").Cells(premiereLigne, 1).Value = dateJourOperation
'On y met aussi la dateAujourdhui
Worksheets("UCESO_BV+RCY").Cells(premiereLigne, 2).Value = dateAujourdhui
'Ensuite on va copier ce qu'on a recupere dans UCESO()
For i = 1 To 96
Worksheets("UCESO_BV+RCY").Cells(premiereLigne, i + 2).Value = UCESO(i)
Next i
 
Dernière édition:

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonjour tangiwankenobi, Dranreb, le forum

Bonjour et bienvenue sur XLD, tangiwankenobi44 , si tu ne l'as pas déjà fait, un petit tour par la Charte Xld t'expliquera comment fonctionne le forum !
Pour ton code, plusieurs choses :
Comme l'a dit Dranreb, il faut utiliser Rows.Count, au lieu de Row.Count, qui renverra le nombre de lignes maximum de la feuille active.
ensuite tu as défini premiereLigne en Integer ce qui limite les importations à 32767 lignes et provoque une erreur sur un nombre de lignes importé plus conséquent, renvoyer le nombre de lignes maximum avec Rows.Count est inutile dans ce cas, autant écrire 32767. Pour un code plus correct, il faut définir premiereLigne en Long avec Dim premiereLigne as Long ou Dim premiereLigne& ce qui est la même chose en plus court.
Ensuite, tu ne mets pas de qualificateur à Rows il est donc rattaché à la feuille active ce qui ne pose pas problème dans le cas précis de ton code car tu ouvres un classeur Xlsx qui devient le classeur actif.
Dans certains cas, cela pourrait pourtant poser problème sur un grand nombre de données (supérieur à 65536) sur un classeur Xlsx (1048576 lignes par feuille) si le classeur actif au moment de la définition de premiereLigne est un fichier Xls (65536 lignes par feuille) ou provoquer une erreur 1004 dans le cas inverse en renvoyant lors de la commande un nombre de lignes supérieur à celui de la feuille examinée.
Pour un code globalement plus générique et re utilisable :
VB:
Dim premiereLigne&
With Worksheets("UCESO_BV+RCY"): premiereLigne = .Cells(.Rows.Count, 1).End(xlUp).Row + 1: End With

Je te souhaite une Excellente journée sur Xld.

Bien cordialement, @+
 

tangiwankenobi44

XLDnaute Nouveau
Bonjour tangixankenobi, Dranreb, le forum

Bonjour et bienvenue sur XLD, @tangixankenobi, si tu ne l'as pas déjà fait, un petit tour par la Charte Xld t'expliquera comment fonctionne le forum !
Pour ton code, plusieurs choses :
Comme l'a dit Dranreb, il faut utiliser Rows.Count, au lieu de Row.Count, qui renverra le nombre de lignes maximum de la feuille active.
ensuite tu as défini premiereLigne en Integer ce qui limite les importations à 32767 lignes et provoque une erreur sur un nombre de lignes importé plus conséquent, renvoyer le nombre de lignes maximum avec Rows.Count est inutile dans ce cas, autant écrire 32767. Pour un code plus correct, il faut définir premiereLigne en Long avec Dim premiereLigne as Long ou Dim premiereLigne& ce qui est la même chose en plus court.
Ensuite, tu ne mets pas de qualificateur à Rows il est donc rattaché à la feuille active ce qui ne pose pas problème dans le cas précis de ton code car tu ouvres un classeur Xlsx qui devient le classeur actif.
Dans certains cas, cela pourrait pourtant poser problème sur un grand nombre de données (supérieur à 65536) sur un classeur Xlsx (1048576 lignes par feuille) si le classeur actif au moment de la définition de premiereLigne est un fichier Xls (65536 lignes par feuille) ou provoquer une erreur 1004 dans le cas inverse en renvoyant lors de la commande un nombre de lignes supérieur à celui de la feuille examinée.
Pour un code globalement plus générique et re utilisable :
VB:
Dim premiereLigne&
With Worksheets("UCESO_BV+RCY"): premiereLigne = .Cells(.Rows.Count, 1).End(xlUp).Row + 1: End With

Je te souhaite une Excellente journée sur Xld.

Bien cordialement, @+
Bonjour Yeahou,
MERCI Beaucoup aussi pour ta réponse très complète qui me montre d'autres potentielles sources d'erreurs (pour la porchaine fois j'espère)
Alors, avant d'arriver à 65000 lignes dans ce fichier, il va se passer quelques années mais c'est bien d'avoir conscience des potentiels trucs qui vont merder. D'autant que j'essaie de proscrire les xls et met xlsx tant que je peux. Mais je vais mettre un long à la place d'integer, ce sera plus propre ;)
Et je vais aussi ajouter la 2e modif que tu proposes. Je me suis posé d'ailleurs la question de faire un select sur le workbook avant mais comme je venais de l'ouvrir, ca ne posais pas de pb à excel ;).
Vraiment merci beaucoup de votre aide.
Je vous souhaite une excellente journée (pluvieuse et devant l'ordi du coup pour moi)
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 115
Messages
2 085 453
Membres
102 890
dernier inscrit
selkis