Problème avec .Row en VBA

Résolu
gaignon Messages postés 6 Statut Membre -  
gaignon Messages postés 6 Statut Membre -
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. Heliotte Messages postés 1561 Statut Membre 92
     
    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 ??
    0
    1. gaignon Messages postés 6 Statut Membre
       
      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
      0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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

    0
    1. gaignon Messages postés 6 Statut Membre
       
      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
      0
    2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      curieux.... chez moi, ça marchait

      utilises tu une autre fois dans ton projet la fonction "find" ?
      0
    3. gaignon Messages postés 6 Statut Membre
       
      je trouve aussi celà curieux. J'ai n'ai pas compris ce que tu me demande, je suis débutant en VBA
      0
    4. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
      0
    5. gaignon Messages postés 6 Statut Membre
       
      Merci, ça marche impécable.
      Pourrais-tu m'expliquer la seconde ligne?
      0