Connaître la ligne sur laquelle je suis dans un for each line

Bonjour à tous,

Je voudrais copier un ligne en dessous d'elle-même si ma condition est respectée mais je ne sais pas sur laquelle je suis.

Le but est dans un fichier avec une colonne date, heure d'arrivée et heure de fin, exporté de notre système de pointage, j'ai certaines heures supérieures à 24 si le pointage a lieu après minuit.

J'ai donc fait un filtre sur les heures >= "24:00:00"

deux lignes sont concernées la 14 et la 17

Si le deux heures (arrivée et départ) sont après minuit, pas de problème, j'enlève 24 aux heures et j'ajoute 1 à la date

TPOINTAGE_TUHD_N°_____TPOINTAGE_Date____TPOINTAGE_Code___TPOINTAGE_HeureArrivée___TPOINTAGE_HeureDépart

35_________________________07-11-18_____________FO__________________24:39:28____________________25:27:11

35_________________________08-11-18_____________FO__________________23:22:14____________________24:08:22

For Each Ligne In rMaPlage.Rows

sHeure = Mid(Ligne.Cells(5).Value, 1, 1)

If Mid(Ligne.Cells(5).Value, 1, 1) = "T" Then

GoTo Suivant

End If

If Ligne.Cells(4).Value >= dHeure24 And Ligne.Cells(5).Value >= dHeure24 Then

Ligne.Cells(4).Value = Ligne.Cells(4).Value - dHeure24

Ligne.Cells(5).Value = Ligne.Cells(5).Value - dHeure24

Ligne.Cells(2).Value = Ligne.Cells(2).Value + 1

Else

Dim lLigne As Long

lLigne = Ligne.Row

lligne = ActiveCell.Row

'Ligne.Selection.Copy

Selection.Insert Shift:=xlDown

Range("E17").Select

Application.CutCopyMode = False

ActiveCell.FormulaR1C1 = "1/1/1900 23:59"

Range("D18").Select

ActiveCell.FormulaR1C1 = "0:00:00"

Range("E18").Select

End If

Suivant:

NextFO 23:22:14 24:08:22

Résultat après mon if

TPOINTAGE_TUHD_N°_____TPOINTAGE_Date____TPOINTAGE_Code___TPOINTAGE_HeureArrivée___TPOINTAGE_HeureDépart

35_________________________08-11-18_____________FO__________________00:39:28____________________01:27:11

35_________________________08-11-18_____________FO__________________23:22:14____________________24:08:22

La ligne 17 passe dans mon else car l'heure de début est < 24:00:00

là je coince car je ne sais pas comment lui dire de copier ma ligne concernée.

résultat attendu: copy et insert ligne 17 en ligne 18

TPOINTAGE_TUHD_N°_____TPOINTAGE_Date____TPOINTAGE_Code___TPOINTAGE_HeureArrivée___TPOINTAGE_HeureDépart

35_________________________08-11-18_____________FO__________________00:39:28____________________01:27:11

35_________________________08-11-18_____________FO__________________23:22:14____________________23:00:00

35_________________________09-11-18_____________FO__________________00:00:00____________________00:08:22

voici le code

For Each Ligne In rMaPlage.Rows

sHeure = Mid(Ligne.Cells(5).Value, 1, 1)

'test si je ne suis pas sur le titre

If Mid(Ligne.Cells(5).Value, 1, 1) = "T" Then

GoTo Suivant 'skip à la ligne suivant

End If

If Ligne.Cells(4).Value >= dHeure24 And Ligne.Cells(5).Value >= dHeure24 Then

Ligne.Cells(4).Value = Ligne.Cells(4).Value - dHeure24

Ligne.Cells(5).Value = Ligne.Cells(5).Value - dHeure24

Ligne.Cells(2).Value = Ligne.Cells(2).Value + 1

Else

Dim lligne As Long

lligne = Ligne.Row????erreur

'j'ai essayé plusieurs commande mais rien ne fonctionne, activecell.row me donne 1 c'est à dire la ligne de titre.

lligne = ActiveCell.Row ??????

Ligne.Selection.Copy ???? erreur compilation

End If

Suivant:

Next

Bonjour et sur le forum,

Ouf, ton code n'est pas lisible, tu devrais penser à utiliser les balises de code proposées par le forum pour le faire apparaitre clairement, je t'invite également à mettre des tabulations suivant les conventions de code, ça le rendrait plus lisible, pour nous et pour toi

Ensuite, je vois que tu as beaucoup de soucis avec : For Each Ligne In rMaPlage.Rows

Ce que j'aurais fait à ta place c'est :

For i = rMaPlage.Row To rMaPlage.Row + rMaPlage.Rows.Count - 1
    'Ton code
    Range("a" & i) 'etc etc...
Next i

Ce sera plus simple pour toi, et comme ton numéro de ligne sera directement contenu dans i, tu pourras directement l'utiliser, tu peux renommer i en "lig" ou" ligne" si tu le souhaites

Salut,

Ta demande n'est vraiment pas claire et tu n'as pas joint ton fichier ou du moins un fichier modèle.

Afin de séparer les codes du reste du texte, tu peux utiliser les balises ''Codes'' (passe ton curseur sur les différentes options possibles au-dessus du texte que tu écris).

Une plage concernée par un ''For Each xxxxx / Next'' concerne très souvent plusieurs lignes et plusieurs colonnes. Dans le fichier ci-joint, je te montre comment ma macro trouve deux fois la ligne 2 et 2 fois la ligne 3 en passant en revue la plage concernée.

Sub Essai()
Dim i As Integer, Cellule As Range, MaPlage As Range

Set MaPlage = Range("B2:C3")

For Each Cellule In MaPlage
    MsgBox ("La cellule " & Cellule.Address & " se trouve sur la ligne " & Cellule.Row)
Next

End Sub

Cordialement.

1essai.xlsm (20.50 Ko)

merci pour les infos, cela fonctionne avec vos propositions.

désolée, c'est la première fois que je poste sur le site.

j'essaierai de faire mieux la prochaine fois.

Rechercher des sujets similaires à "connaitre ligne laquelle suis each line"