Résultat end(xldown).cells.count Incomprehensible
Bonjour,
C'est mon tout premier post je vais essayer de faire au mieux pour être clair
J'ai la macro suivante qui fonctionne très bien et qui me renvoi la bonne valeur soit 203.
Sub Macro3()
Sheets("DATA").Select
DerLigne = Range("M1", Selection.End(xlDown)).Cells.Count
MsgBox DerLigne
End SubSeulement lorsque je met le code suivant dans ma macro il me renvoi la valeur 60.
J'ai donc vérifier toute ma macro toute mes variable, la colonne en question juste avant l'éxécution du code.
la feuille n'est pas caché, il n'y a pas d'autres variables du même nom.
Et il n'y a rien de notable en ligne 60 sur la feuille DATA et sur les autres feuilles.
Je ne comprends pas d'où peut venir cette valeur, il y a surement un autre moyen d'obtenir la bonne valeur mais j'aimerais comprendre pourquoi cette valeur ressort.
Sheets("DATA").Select
DerLigne = Range("M1", Selection.End(xlDown)).Cells.Count
MsgBox DerLigneVoici la macro, elle est appelée depuis une autre macro.
Sub test_enregistrement(ByVal fournisseur As String, ByVal file As String)
Dim annee As Integer
Dim chemin As String
Dim derligne As Integer
annee = Year(Sheets("TRAME TRAVAIL").Range("c2").Value)
chemin = "P:\Achats\TARIF\TARIF " & annee & "\"
Dim nomFichier As String, extension As String
nomFichier = "TRAME TRAVAIL v1.1 " & fournisseur & " " & Format(Sheets("TRAME TRAVAIL").Range("c2").Value, "dd mm yyyy")
extension = ".xlsm"
If annee = 2023 Then
If Not MsgBox("souhaitez vous enregister ce tarif dans TARIF 2024 ?", vbYesNo, "Enregistrer Tarif 2024 ?") = vbYes Then
MsgBox "VEUILLEZ ENREGISTRER LA TRAME SANS MODIFIER LE NOM"
Application.Dialogs(xlDialogSaveAs).Show nomFichier & extension
Exit Sub
Else
chemin = "P:\Achats\TARIF\TARIF " & 2024 & "\"
End If
End If
If file = "dossier non créé" Then
recup_File:
file = InputBox("Nous ne trouvons pas le dossier du fournisseur, merci de préciser la File :" & vbCrLf & vbCrLf & "BASE 1" & vbCrLf & "BASE 2" & vbCrLf & "BOF" & vbCrLf & "SURGELES" & vbCrLf & "SNACKING" & vbCrLf & "BOISSONS CONFISERIE" & vbCrLf & "NON ALIMENTAIRE", "Nom de la File")
If file = "BOF" Or file = "BASE 1" Or file = "BASE 2" Or file = "SNACKING" Or file = "BOISSONS CONFISERIE" Or file = "SURGELES" Or file = "NON ALIMENTAIRE" Then
Else
MsgBox "File incorrect"
GoTo recup_File
End If
Sheets("DATA").Select
derligne = Range("M1", Selection.End(xlDown)).Cells.Count
MsgBox derligne
Sheets("DATA").Range("M" & derligne + 1).Value = fournisseur
Sheets("DATA").Range("N" & derligne + 1).Value = file
If Dir(chemin & file & "\" & fournisseur) = "" Then
MkDir chemin & file & "\" & fournisseur
End If
End If
fichier = chemin & file & "\" & fournisseur & "\" & nomFichier & ".xlsm"
ActiveWorkbook.SaveAs Filename:=fichier
MsgBox ("le fichier est enregistrer dans " & chemin & file & "\" & fournisseur)
End SubSalut,
Alambiqué cette formule pour une dernière ligne.
Range("A1", Selection.End(xlDown)).Cells.Count va s’arrêter à la première cellule vide, qui ne sera pas forcément la dernière cellule de la colonne.
Tu dois utiliser xlUp ou mieux un tableau structuré
Merci jean-Paul pour ta réponse
Je suis preneur d'autres solutions , je dois avouer que j'ai suivi l'enregistreur de macro pour cette ligne
J'avais bien vérifier si il y avait des cellules vide mais il n'y en a pas.
Encore plus étonnant lorsque je change le ".Cells" par ".Rows" cela me renvoi la valeur 12...
Range("A1", Selection.End(xlDown)).Cells.Count => Renvoi 60
Range("A1", Selection.End(xlDown)).Rows.Count => Renvoi 12Alors qu'en testant ces deux lignes sur une macro toute simple elles me revoient bien la valeur 203.
Ca dépend de la cellule active et nulle part je ne vois de sélection de cellule. Pour trouver la denière cellule remplie de la colonne A, utilise :
derlig = Cells(Rows.Count, 1).End(xlUp).RowDaniel
Merci Daniel
oui effectivement c'était bien du a une autre cellule sélectionnée en I12 qui vient d'une autre macro en amont.
le code Range("M1", Selection.End(xlDown)).Cells.Count
doit renvoyer le nombre de cellule du tableau M1:I12 soit 60
Suffit de mettre un Range("M1").Select avant et le compte est bon.
Merci beaucoup !!!