Problème avec .Row en VBA

Résolu/Fermé
gaignon Messages postés 6 Date d'inscription lundi 14 janvier 2013 Statut Membre Dernière intervention 15 janvier 2013 - 14 janv. 2013 à 14:15
gaignon Messages postés 6 Date d'inscription lundi 14 janvier 2013 Statut Membre Dernière intervention 15 janvier 2013 - 15 janv. 2013 à 12:12
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

Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
Modifié par Heliotte le 14/01/2013 à 14:33
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
gaignon Messages postés 6 Date d'inscription lundi 14 janvier 2013 Statut Membre Dernière intervention 15 janvier 2013
14 janv. 2013 à 15:55
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
14 janv. 2013 à 15:13
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
gaignon Messages postés 6 Date d'inscription lundi 14 janvier 2013 Statut Membre Dernière intervention 15 janvier 2013
14 janv. 2013 à 15:56
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
14 janv. 2013 à 17:25
curieux.... chez moi, ça marchait

utilises tu une autre fois dans ton projet la fonction "find" ?
0
gaignon Messages postés 6 Date d'inscription lundi 14 janvier 2013 Statut Membre Dernière intervention 15 janvier 2013
15 janv. 2013 à 11:05
je trouve aussi celà curieux. J'ai n'ai pas compris ce que tu me demande, je suis débutant en VBA
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
15 janv. 2013 à 11:57
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
gaignon Messages postés 6 Date d'inscription lundi 14 janvier 2013 Statut Membre Dernière intervention 15 janvier 2013
15 janv. 2013 à 12:04
Merci, ça marche impécable.
Pourrais-tu m'expliquer la seconde ligne?
0