Erreur "La méthode range de l'objet _worksheet a échoué"

Bonjour à tous,

Bien que j'ai lu la discussion concernant cette erreur sur le forum, je n'arrive pas à régler mon problème . Je suis toute nouvelle utilisatrice de VBA puisque mon premier code date d'hier, donc c'est sûrement une faute très bête...

Les données sur lesquelles je travaille sont confidentielles donc je ne peux malheureusement pas les poster, mais voilà en gros de quoi il s'agit : c'est un classeur excel tout simple constitué d'une seule feuille ("Feuil1") dont les colonnes sont des dates et les lignes des individus. Une ligne décrit la trajectoire d'un individu, c'est-à-dire ça position (type numéro de salle) à chaque date. Des changements de statut sont renseignés par un changement de police (passage d'une police normale à gras). Je souhaite détecter ces changements et reporter la date correspondante dans une nouvelle colonne.

Mon code est le suivant :

Option Explicit

Sub findbold()

Dim Cel As Range
Dim i As Integer

For i = 3 To 420
    For Each Cel In Sheets("Feuil1").Range("Ei:HYi")
        If Cel.Font.Bold = True & Cel.Font.Color = vbBlack & Cel.Offset(, -1).Font.Bold = False Then
        Range("HZi").Value = Cel.Offset(i - (i - 2), 0).Value
        End If
    Next Cel
Next i

End Sub

Le problème vient peut-être du fait que je ne sélectionne/active pas la feuille sur laquelle je travaille ? Ou bien d'une erreur de syntaxe ?

Merci beaucoup pour votre aide !!

Tu peux nous envoyer le fichier excel sans tes données confidentielles ? (tu les remplaces par durand, richard etc etc)

Bonjour,

Pour un démarrage ... c'est un très joli démarrage ...

Le signe & n'existe pas en VBA ... tu as besoin de le remplacer par And

Option Explicit
Sub findbold()
Dim Cel As Range
Dim i As Integer
For i = 3 To 420
    For Each Cel In Sheets("Feuil1").Range("Ei:HYi")
        If Cel.Font.Bold = True And Cel.Font.Color = vbBlack & Cel.Offset(, -1).Font.Bold = False Then
           Range("HZi").Value = Cel.Offset(i - (i - 2), 0).Value
        End If
    Next Cel
Next i
End Sub
12forum.xlsm (123.56 Ko)

Ok, j'ai remplacé par 1,2,3,4,.... les observations.

J'ai déjà corrigé qqs erreurs de syntaxe (les & en And et les indications de couleurs par leur index). Mon nouveau code est

Option Explicit

Sub findbold()

Dim Cel As Range
Dim i As Integer

For i = 3 To 420
    For Each Cel In Sheets("Feuil1").Range("Ei:HYi")
        If Cel.Font.Bold = True And Cel.Font.ColorIndex = 1 And Cel.Offset(, -1).Font.Bold = False Then
        Range("HZi").Value = Cel.Offset(i - (i - 2), 0).Value
        End If
    Next Cel
Next i

End Sub

Maintenant il "tourne" pendant quelques secondes avant de me mettre la même erreur...

Voici l'excel

12forum.xlsm (123.56 Ko)

Re,

Dans la mesure où dans ton fichier joint ... il n'y a aucune police en gras ... je ne sais pas très bien ce que tu recherches ...

Le code tourne sans erreur !

Bon par contre il ne me renvoie pas la date du changement qui est à la 2ème ligne de la même colonne (d'où le "i-(i-2)" comme tu l'as compris), mais le contenu de la cellule située deux lignes en dessous ce qui veut dire qu'il fait Cel.Offset(2,0) au lieu de ce que je voudrais. Est-ce-qu'il y aurait une erreur dans mon écriture ?

C'est un très bon début en tout cas, merci James

Re,

Si cela ne t'embête pas ... peux-tu me décrire ce que tu veux que le code fasse pour toi ...

Pour l'instant ... ce que je comprends est la chose suivante : balayer la plage E3:HZ420 et si trois condtions sont remplies, inscrire le contenu de la ligne 2 de la même colonne ... dans la colonne HZ ...

Option Explicit

Sub findbold()
Dim Cel As Range
  For Each Cel In Sheets("Feuil1").Range("E3:HZ420")
      If Cel.Font.Bold = True And Cel.Font.ColorIndex = 1 And Cel.Offset(, -1).Font.Bold = False Then
        Range("HZ" & Cel.Row).Value = Cells(2, Cel.Column).Value
      End If
  Next Cel
End Sub

Ah bon tu ne vois pas de police gras ? Par exemple en AE6 ?

Normalement sur une ligne il y a des numéros écris en police normale, puis pour certaines lignes des numéros deviennent écris en gras (toujours en noir) et enfin écris en gras rouge. Ce que je voudrais c'est, pour chaque ligne, détecter le changement de police de noir à noir+gras et écrire dans une nouvelle colonne la date correspondante (qui est renseignée sur la 2e ligne de cette même colonne) ; i.e. récupérer les "dates charnières" à chaque ligne.

Désolée je ne sais pas si c'est très clair...


Pardon je n'avais pas vu ton dernier message, oui c'est exactement ça que je veux faire.

Je vien de tester ton code, il marche SUPER !

Merci beaucoup pour ton aide je vais enfin pouvoir avancer

Re,

Merci pour tes explications ...

Du coup à propos de tes dates charnières (de changement de police ...)

Veux-tu toutes les dates charnières de la même ligne ...ou ... uniquement la dernière date charnière ...???

Je veux juste la date de passage de noir à noir+gras (pas les autres dates où la police est noir+gras).

Ensuite j'ai une autre Sub pour récupérer la date de passage de noir (gras ou pas) à rouge, que je n'ai pas mise car elle fonctionne exactement comme la première donc si je réussis à faire marcher la première je réussirai à faire marcher la deuxième.

D'ailleurs il faut que j'ajoute une condition du genre "cellule non vide", car le code me retourne aussi la date si la cellule est vide mais que le "G" est sélectionné.

Re,

Ci-joint ton fichier test ... avec la macro modiiée ...

Tu peux amender les conditions comme tu le veux ...

16forum.xlsm (124.55 Ko)
Rechercher des sujets similaires à "erreur methode range objet worksheet echoue"