Erreur 1004 - méthode 'Rows' de l'objet '_Global' à échoué

Bonjour à tous,

Je viens afin que vous m'éclairiez par vos connaissances SVP.

Lors de l'ouverture de mon fichier sur un autre poste, celui-ci me met l’erreur indiqué en objet, puis une fois la dite fenêtre d'erreur fermée, tout fonctionne, macros compris.

Voici la macro qui bugue :

Option Explicit

Dim i&, ln&, lgn&, col&, Y As Range, f As Worksheet

Private Sub Workbook_Open()

For i = 1 To Sheets.Count

Set f = Sheets(i)

Set Y = f.Cells.Find(Date)

'n = f.Range("A:B").Find("EQUIPE1)", lookat:=xlWhole).Row

If Not Y Is Nothing Then

col = Y.Column

lgn = f.Range("A:B").Find("EQUIPE 1", lookat:=xlWhole).Row

For ln = lgn To Range("A" & Rows.Count).End(xlUp).Row Step 6

f.Cells((3 * ln - 3 * lgn + 24) / 6, 13).Value = f.Cells(ln, col).Value

f.Cells((3 * ln - 3 * lgn + 24) / 6, 14).Value = f.Cells(ln + 2, col).Value

f.Cells((3 * ln - 3 * lgn + 24) / 6, 15).Value = f.Cells(ln + 4, col).Value

Next ln

Exit For

End If

Next i

f.Activate

For i = 1 To Sheets.Count

Worksheets(i).ScrollArea = "A1:V200"

'

'

'

'

'

Next

f.Activate

End Sub

A priori, c'est la ligne en rouge (Rows.Count)qui poserait problème.

Merci pour votre aide.

Bonjour,

Curieux en effet que ce soit sur Rows... ! Mais il n'est pas rare que le message d'erreur soit erroné (sur des erreurs de compilation d'une part et des erreurs 1004, qui sont des erreurs Excel et non VBA d'autre part.

Essaie déjà de mettre f.Range... dans cette ligne, car ça cela devrait te provoquer une erreur à un moment ou un autre ! Et éventuellement tu peux mettre aussi f.Rows.Count.

Mais tu devrais faire un premier essai sur f.Range seulement, histoire de voir si cela lève l'erreur sans modifier Rows (et si erreur persiste, essai avec f.Rows en plus, mais ce n'est pas là-dessus que devrait se déclencher une erreur...)

Cordialement.

merci pour ce retour.

j'ai mis f.Range -> pbm identique.

Mais en modifiant également f.Rows Count, l'erreur 1004 a été déplacé plus bas dans le code visiblement et indique maintenant

méthode 'Activate' de l'objet'_Worksheet' a échoué

Revoici le code :

Option Explicit

Dim i&, ln&, lgn&, col&, Y As Range, f As Worksheet

Private Sub Workbook_Open()

For i = 1 To Sheets.Count

Set f = Sheets(i)

Set Y = f.Cells.Find(Date)

'n = f.Range("A:B").Find("EQUIPE1)", lookat:=xlWhole).Row

If Not Y Is Nothing Then

col = Y.Column

lgn = f.Range("A:B").Find("EQUIPE 1", lookat:=xlWhole).Row

For ln = lgn To f.Range("A" & f.Rows.Count).End(xlUp).Row Step 6

f.Cells((3 * ln - 3 * lgn + 24) / 6, 13).Value = f.Cells(ln, col).Value

f.Cells((3 * ln - 3 * lgn + 24) / 6, 14).Value = f.Cells(ln + 2, col).Value

f.Cells((3 * ln - 3 * lgn + 24) / 6, 15).Value = f.Cells(ln + 4, col).Value

Next ln

Exit For

End If

Next i

f.Activate

For i = 1 To Sheets.Count

Worksheets(i).ScrollArea = "A1:V200"

'

'

'

'

'

Next

f.Activate

End Sub

Merci

Là je ne comprends pas ! Déjà qu'il faille mettre f.Rows pour passer la ligne c'est illogique et f.Activate l'est également.

Ceci dit j'ai déjà eu sur des formulations de commandes... Une qui bloque , une formulation alternative passe... J'en ai eu que je n'ai jamais pu expliquer mais celles-ci c'est la première fois que je les vois.

Pour Activate, commande superflue pour l'opération, tu peux la supprimer carrément !

si je supprime activate, les macros ne sont plus fonctionnels

Bizarrement, ce problème survient sur Office 2010 au boulot, car à la maison en 2016, pas de pbm

Activate c'est l'enregistreur qui l'utilise, concuremment avec Select et Selection, dont tout code enregistré est bourré... Normal de sa part parce qu'il enregistre des manipulations manuelles, au cours desquelles tu passes ton temps à activer ou sélectionner pour agir sur la sélection. Mais VBA ne travaille pas en manuel ! Aucun besoin de se rendre là où il faut opérer, il suffit de lui dire où, c'est à dire de doter les expressions destinées à produire l'effet voulu de qualificateur d'objet (selon l'expression consacrée...), ce que fait ton f.. L'Activate ou Select est toujours une action supplémentaire inutile qui n'aboutit qu'à allonger le temps d'exécution. Pour toute optimisation de code, il faut commencer par les faire disparaître...

Cordialement.

Je les ai supprimé comme tu me l'as recommandé mais le code ne fonctionne pas, sauf erreur de ma part

Le voici, ci-dessous :

Option Explicit

Dim i&, ln&, lgn&, col&, Y As Range, f As Worksheet

Private Sub Workbook_Open()

For i = 1 To Sheets.Count

Set f = Sheets(i)

Set Y = f.Cells.Find(Date)

'n = f.Range("A:B").Find("EQUIPE1)", lookat:=xlWhole).Row

If Not Y Is Nothing Then

col = Y.Column

lgn = f.Range("A:B").Find("EQUIPE 1", lookat:=xlWhole).Row

For ln = lgn To f.Range("A" & f.Rows.Count).End(xlUp).Row Step 6

f.Cells((3 * ln - 3 * lgn + 24) / 6, 13).Value = f.Cells(ln, col).Value

f.Cells((3 * ln - 3 * lgn + 24) / 6, 14).Value = f.Cells(ln + 2, col).Value

f.Cells((3 * ln - 3 * lgn + 24) / 6, 15).Value = f.Cells(ln + 4, col).Value

Next ln

Exit For

End If

Next i

For i = 1 To Sheets.Count

Worksheets(i).ScrollArea = "A1:V200"

'

'

'

'

'

Next

End Sub

Bonjour,

Il est peut-être temps de joindre un fichier !...

Cdlt.

Je veux bien mais il y a des données un peu sensibles.

Si cela ne vous dérange pas, je peux vous l'envoyer en message privé

Re,

Non pas de MP.

Tu anonymises les données.

Cdlt.

Ah flûte !

Bon bah je suis embêté alors

Bonjour, Salut Jean-Eric

Bonjour à tous,

Anonymisation de données pour Excel : https://www.excel-pratique.com/fr/utilitaires/anonymisation-donnees.php

eric

OK merci j'ai effacé des données et anonymiser d'autres.

J'ai aussi réduit le nombre d'onglets de 52 semaines pour en garder que 3 car le fichier fait 2 Mo à la base.

Le code permet de se mettre automatiquement sur la colonne du jour (même si on a enregistré autre part dans d'autres onglets) et permet également le report des données "Activité" qui sont situées en bas, dans le petit tableau aux bordures rouges en haut à droite.

Merci par avance pour votre aide

Re,

pas d'erreur sur 2010 pour moi.

eric

les macros fonctionnent ?

car comme indiqué plus haut, j'ai enlevé "f.Activate"

le voici en l'ayant ajouté et qui déclenche l'erreur en acceptant les macros sous 2010

Il a juste planté à la 1ère ouverture car il arrivait du net et était considéré comme non sûr.

Une fois tout accepté plus de problème sur les autres ouvertures.

C'est peut-être une question de sécurité.

Choisi un répertoire pour y mettre ton fichier et ajoute ce répertoire dans 'Options/ Centre de gestion de la confidentialité / Paramètres du Centre de gestion de la confidentialité... / Emplacements approuvés / Ajouter un nouvel emplacement...' et teste l'ouverture du fichier pour confirmer ou infirmer.

De toute façon, comme déjà dit, le f.Activate est inutile. Tu peux l'enlever.

eric

Si le problème est résolu... !

Les erreurs à l'ouverture en provenance du net ne sont pas significatives, il faut revérifier en conditions de travail normales, comme l'a signalé Eric.

Sinon des erreurs 1004 sur des lignes de commande auxquelles on ne trouve rien à reprocher, tout le monde en a eues. Il se peut toujours qu'on ait loupé quelque chose en cherchant l'origine, surtout quand cela est provoqué par un contexte particulier au fichier... Mais il est des cas où l'on ne trouve rien parce qu'il n'y a rien à trouver, et on ne peut que contourner en modifiant la ligne de commande, et lorsqu'on a 2 lignes de commandes équivalentes dont l'une plante et l'autre fonctionne, se poser des questions dont on n'est vraiment pas sûr de trouver des réponses...

Quelques unes récurrentes et connues relèvent très probablement de bogues que Microsoft n'a jamais pris la peine d'éliminer. Quoi qu'il en soit l'essentiel est toujours de trouver un moyen pour atteindre le résultat cherché !

Cordialement.

ok merci quand même pour vos conseils.

Cordialement

Bonne soirée

Rechercher des sujets similaires à "erreur 1004 methode rows objet global echoue"