Problème avec .Row en VBA

Résolu
Bonjour,

J'ai un problème avec une fonction que j'ai déjà utilisé
Mon code fonctionne jusqu'au moment ou j'appelle cel.Row
Si vous avez besoin d'info sur le context n'hésitez pas

Sub TRS()
Emplacement = 3 'numéro de ligne sur laquel le premier résultat sera écrit
For Emplacement = 3 To 9
'Valeur est la valeur max de la colonne U
Valeur = Application.WorksheetFunction.Max(Range("B58:B64"))
'Sélectionne la cellule avec la valeur Valeur

With Range("B58:B64")
Set cel = .Find(Valeur)
End With

'Retrouve la catégorie de TRS
Titre = Cells(cel.Row, 1)

'Affiche le résultat colonnes O et P
Cells(Emplacement, 15).Select
ActiveCell.FormulaR1C1 = Titre
Cells(Emplacement, 16).Select
ActiveCell.FormulaR1C1 = Valeur

'Supprime la valeur de la machine sélectionnée pour qu'elle ne rentre plus dans le calcul
Cells(cel.Row, 2).Select
ActiveCell.FormulaR1C1 = ""
Next

End Sub

Merci

2 réponses

  1. Bonjour gaignon,

    Ce sont des formules en colonne "B" ?

    Edit :
    C'est cette ligne qui pose problème ? Cells(cel.Row, 2).Select

    Si oui, quel erreur ??
    1. Oui, les valeurs sont en colonne B

      Je pense en effet que c'est Cells(cel.Row, 2).Select qui pose problème, puis Cells(cel.Row, 2).Select
      L'erreur annoncée est : variable objet ou variable de bloc With non définie
  2. Contributeur
    Bonjour

    1/ toujours déclarer les variables et utiliser "option explicit"

    2/ pourquoi chercher une cellule puis une fois trouvée, chercher sa ligne alors qu'on peut le faire directement ?

    3/ Pourquoi utiliser select-sélection et formula R1C1 ?

    Option Explicit
    Sub xxx()
    Dim Emplacement As Byte, Valeur As Double, Lig As Byte, Titre As String
    
    Application.ScreenUpdating = False
    'Emplacement = 3 'numéro de ligne sur laquel le premier résultat sera écrit
    For Emplacement = 3 To 9
    'Valeur est la valeur max de la colonne U
    Valeur = Application.Max(Range("B58:B64"))
    'Sélectionne la cellule avec la valeur Valeur
    
    With Range("B58:B64")
         Lig = .Find(What:=Valeur).Row
    End With
    'Retrouve la catégorie de TRS
    Titre = Cells(Lig, 1)
    
    'Affiche le résultat colonnes O et P
    Cells(Emplacement, 15) = Titre
    Cells(Emplacement, 16) = Valeur
    
    'Supprime la valeur de la machine sélectionnée pour qu'elle ne rentre plus dans le calcul
    Cells(Lig, 2) = ""
    Next
    
    End Sub

    1. Merci, j'ai essayé avec les modifications et l'erreur est toujours la même: "variable objet ou variable de bloc With non définie"
      J'avais fais une macro quasi identique à celle-ci et il n'y avait pas de problème
    2. Contributeur
      curieux.... chez moi, ça marchait

      utilises tu une autre fois dans ton projet la fonction "find" ?
    3. je trouve aussi celà curieux. J'ai n'ai pas compris ce que tu me demande, je suis débutant en VBA
    4. Contributeur
      Bon, on va feinter
      essaies
      valeur = Application.Max(Range("B58:B64"))
      lig = Application.Match(valeur, Range("B58:B64"), 0) + 57

      tu dis...

      si ça ne marche pas, envoie ton classeur
      pour joindre une pièce
      mettre le classeur sans données confidentielles en pièce jointe sur
      https://www.cjoint.com/
      puis copier l'adresse du lien et la coller dans le message de réponse
    5. Merci, ça marche impécable.
      Pourrais-tu m'expliquer la seconde ligne?