Probleme selection derniere ligne

floon

XLDnaute Nouveau
Bonjour le forum.
Ça faisait un petit moment que j'étais pas venu vous embêter :D

J'ai un gros souci de sélection de dernière ligne mais je comprend pas pourquoi

Voici mon code, rien de bien violent, mais mon "DerniereLigne = Range("A65536").End(xlUp).Row" me remonte a chaque fois un étonnant 257 alors que ma case A2 est vide ( j'ai utilisé cette fonction un peu partout sans jamais avoir de problème... )

Code:
Private Sub CommandButton18_Click() 
Dim Badge As String
Dim DateDebut As Date, DateFin As Date
Dim DerniereLigne As Integer
Dim Flag As Boolean
Dim TestPM As Variant

DateDebut = Range("B29").Value
DateFin = Now()
Badge = Range("A257").Value
Range("C257").Value = DateFin

'sauvegarde des donnees
Sheets("SuiviPM").Select
ActiveSheet.Range("A1").Select
Flag = True
For Each TestPM In Range("A2:A" & Range("A65536").End(xlUp).Row) 'test si pm deja presente
    If TestPM.Value = PmEnCours Then
        DerniereLigne = TestPM.Row
        Flag = False
    End If
Next
If Flag Then DerniereLigne = Range("A65536").End(xlUp).Row

Range("A" & DerniereLigne).Value = PmEnCours
Range("B" & DerniereLigne).Value = TypePm
Range("C" & DerniereLigne).Value = Badge
Range("D" & DerniereLigne).Value = DateDebut
Range("E" & DerniereLigne).Value = DateFin
Range("F" & DerniereLigne).Value = DateDiff(n, DateDebut, DateFin)
Range("G" & DerniereLigne).Value = UsureMeule
Range("H" & DerniereLigne).Value = BladeHeight
End Sub

J'ai aussi un problème de selection d'une case ( peu importe laquelle ), je comprend pas pourquoi, ça doit être lié :(

Avez-vous une idée ?
 

ROGER2327

XLDnaute Barbatruc
Re : Probleme selection derniere ligne

Bonjour à tous
D'accord avec soenda.
D'autant que
Badge = Range("A257").Value
laisse supposer que A257 n'est pas nécessairement vide...

Peut-être que
For Each TestPM In Range("A2:A" & Range("A256").End(xlUp).Row)
arrangerait la chose ?​
ROGER2327
#2868
 

floon

XLDnaute Nouveau
Re : Probleme selection derniere ligne

Re,

Y a une petite subtilité : je change de feuille avant de chercher la dernière ligne vide.
Du coup mon test se trouve sur une feuille vide sauf la première ligne ( pour le moment )
Le but étant de remplir a chaque fois la ligne en dessous de la dernière écrite.

Et non il n'y a rien en A257 de la feuille "SuiviPM"
Seule la première ligne n'est pas vide ...
 

floon

XLDnaute Nouveau
Re : Probleme selection derniere ligne

J'ai trouvé la solution : excel n'aime pas trop a priori les exécutions après un bouton.
J4ai donc appelé une fonction qui fait la même chose mais dont le code est dans un module ...
:)
 

ROGER2327

XLDnaute Barbatruc
Re : Probleme selection derniere ligne

Re...
Re,

Y a une petite subtilité : je change de feuille avant de chercher la dernière ligne vide.
Du coup mon test se trouve sur une feuille vide sauf la première ligne ( pour le moment )
Le but étant de remplir a chaque fois la ligne en dessous de la dernière écrite.

Et non il n'y a rien en A257 de la feuille "SuiviPM"
Seule la première ligne n'est pas vide ...
Certes...
Sauf que votre code de bouton travaille par défaut dans la feuille où il est placé. Par conséquent, le bloc
Code:
[COLOR="DarkSlateGray"][B]For Each TestPM In Range("A2:A" & Range("A65536").End(xlUp).Row) 'test si pm deja presente
    If TestPM.Value = PmEnCours Then
        DerniereLigne = TestPM.Row
        Flag = False
    End If
Next
If Flag Then DerniereLigne = Range("A65536").End(xlUp).Row[/B][/COLOR]
ne concerne la feuille "SuiviPM" que si le bouton est placé dans cette feuille. Or ce n'est certainement pas le cas. En réalité, cette partie du code s'applique à la même feuille que cette ligne :
Code:
[COLOR="DarkSlateGray"][B]Badge = Range("A257").Value[/B][/COLOR]
La subtilité était donc invisible pour nous, d'où ma remarque.

Si toute la fin du code s'applique à la feuille "SuiviPM", la subtilité est d'écrire
Code:
[COLOR="DarkSlateGray"][B]Private Sub CommandButton18_Click()
Dim Badge As String
Dim DateDebut As Date, DateFin As Date
Dim DerniereLigne As Integer
Dim Flag As Boolean
Dim TestPM As Variant

   DateDebut = Range("B29").Value
   DateFin = Now()
   Badge = Range("A257").Value
   Range("C257").Value = DateFin

[COLOR="SeaGreen"]'sauvegarde des donnees[/COLOR]
   Sheets("SuiviPM").Select
   [COLOR="Red"]With ActiveSheet[/COLOR]
      [COLOR="Red"].[/COLOR]Range("A1").Select
      Flag = True
      For Each TestPM In [COLOR="Red"].[/COLOR]Range("A2:A" & [COLOR="Red"].[/COLOR]Range("A65536").End(xlUp).Row) [COLOR="SeaGreen"]'test si pm deja presente[/COLOR]
         If TestPM.Value = PmEnCours Then
            DerniereLigne = TestPM.Row
            Flag = False
         End If
      Next
      If Flag Then DerniereLigne = [COLOR="Red"].[/COLOR]Range("A65536").End(xlUp).Row

      [COLOR="Red"].[/COLOR]Range("A" & DerniereLigne).Value = PmEnCours
      [COLOR="Red"].[/COLOR]Range("B" & DerniereLigne).Value = TypePm
      [COLOR="Red"].[/COLOR]Range("C" & DerniereLigne).Value = Badge
      [COLOR="Red"].[/COLOR]Range("D" & DerniereLigne).Value = DateDebut
      [COLOR="Red"].[/COLOR]Range("E" & DerniereLigne).Value = DateFin
      [COLOR="Red"].[/COLOR]Range("F" & DerniereLigne).Value = DateDiff(n, DateDebut, DateFin)
      [COLOR="Red"].[/COLOR]Range("G" & DerniereLigne).Value = UsureMeule
      [COLOR="Red"].[/COLOR]Range("H" & DerniereLigne).Value = BladeHeight
   [COLOR="Red"]End With[/COLOR]
End Sub[/B][/COLOR]
Ainsi point n'est besoin d'aller placer le code dans un module standard. Cette solution est même assez peu rationnelle car le code écrit dans un module standard est susceptible d'être appliqué à n'importe quelle feuille du projet, pourvu qu'elle soit active.​
ROGER2327
#2870
 
Dernière édition:

Discussions similaires

Réponses
1
Affichages
195
Réponses
0
Affichages
176

Statistiques des forums

Discussions
312 482
Messages
2 088 765
Membres
103 954
dernier inscrit
SirJah