VBA et End(xlDown).Row

xerios123

XLDnaute Nouveau
bonjour

Je fais un logiciel permettant de gerer une liste de matériel

Je peu en rajouter et en supprimer
Lorsque je supprime une ligne dans un tableau, elle se retrouve donc vide, puis lorsque je rajoute un outil elle vient remplacer la ligne vide.

Cependant parfois... cela ne fonctionne pas et se met sur une ligne vide suivante?

Voici ma procédure

Sub enregistrerprev(g1 As String, g2 As String, g3 As String, g4 As Date, g5 As String, g6 As String, g7 As String, g8 As String, g9 As Date, g10 As String, g11 As String, g12 As String, g13 As String, g14 As Date, g15 As String, g16 As String, g17 As String, g18 As String, g19 As Date, g20 As String, g21 As String, g22 As String, g23 As String, g24 As Date, g25 As String, g26 As String, g27 As String, g28 As String, g29 As Date, g30 As String)

Worksheets(3).Activate

Ligne = Worksheets(3).Range("a1").End(xlDown).Row
If Not Ligne = 1 Then Ligne = Ligne + 1



Cells(Ligne, 1).Value = 1

Cells(Ligne, 9).Value = compteura

Cells(Ligne, 10).Value = g1
Cells(Ligne, 11).Value = g2
Cells(Ligne, 12).Value = g3
Cells(Ligne, 13).Value = g4
Cells(Ligne, 14).Value = g5
Cells(Ligne, 15).Value = g6
Cells(Ligne, 16).Value = g7
Cells(Ligne, 17).Value = g8
Cells(Ligne, 18).Value = g9
Cells(Ligne, 19).Value = g10
Cells(Ligne, 20).Value = g11
Cells(Ligne, 21).Value = g12
Cells(Ligne, 22).Value = g13
Cells(Ligne, 23).Value = g14
Cells(Ligne, 24).Value = g15
Cells(Ligne, 25).Value = g16
Cells(Ligne, 26).Value = g17
Cells(Ligne, 27).Value = g18
Cells(Ligne, 28).Value = g19
Cells(Ligne, 29).Value = g20
Cells(Ligne, 30).Value = g21
Cells(Ligne, 31).Value = g22
Cells(Ligne, 32).Value = g23
Cells(Ligne, 33).Value = g24
Cells(Ligne, 34).Value = g25
Cells(Ligne, 35).Value = g26
Cells(Ligne, 36).Value = g27
Cells(Ligne, 37).Value = g28
Cells(Ligne, 38).Value = g29
Cells(Ligne, 39).Value = g30

Worksheets(1).Activate

End Sub
 

Papou-net

XLDnaute Barbatruc
Re : VBA et End(xlDown).Row

Bonjour xerios123, et bienvenue à toi,

Par quelle méthode supprimes-tu les lignes ? Car si tu te contentes d'effacer les valeurs, il me semble qu'Excel considère que la ligne contient une valeur (nulle mais une valeur quand-même), ce qui explique le saut de ligne.

Par ailleurs, si tu as lu la charte, tu aurais dû retenir le conseil de joindre un fichier exemple à ta demande. Ce fichier peut-être allégé et, surtout, il ne doit contenir aucune donnée confidentielle.

A te lire.

Cordialement.
 

francedemo

XLDnaute Occasionnel
Re : VBA et End(xlDown).Row

bonjour le fil,

une piste pour simplifier la macro:
Code:
Sub enregistrerprev(g1 As String, g2 As String, g3 As String, g4 As  Date, g5 As String, g6 As String, g7 As String, g8 As String, g9 As  Date, g10 As String, g11 As String, g12 As String, g13 As String, g14 As  Date, g15 As String, g16 As String, g17 As String, g18 As String, g19  As Date, g20 As String, g21 As String, g22 As String, g23 As String, g24  As Date, g25 As String, g26 As String, g27 As String, g28 As String,  g29 As Date, g30 As String)

 dim i as integer
    
    with Worksheets(3)
   .Activate
    Ligne = .Range("a2").End(xlDown).Row
        for i = 1 to 30
       Cells(Ligne, 1).Value = 1
           Cells(Ligne, 9).Value = compteura
           Cells(Ligne, i + 9).Value = g & i
        next i
end with
Worksheets(1).Activate
    
End Sub

la commande VBA .End(xlDown).Row va chercher la première ligne non nulle en partant de la fin, donc suivant la méthode utilisée pour "effacer" ta ligne, tu auras un résultat différent.
avec un fichier, j'aurai pu tester la simplification proposée...
 

xerios123

XLDnaute Nouveau
Re : VBA et End(xlDown).Row

Merci de votre réponse rapide,
Pour supprimer une ligne , je remplace simplement les valeurs dans mes tableaux par ""

C'est un très gros fichier avec une vingtaine d'userforms et 3 tableaux, je sais pas si je dois vous lenvoyer....

Les valeurs que je rajoute sont à la bonne ligne mais la , après que j'ai supprimer une ligne et sauvegarder mon fichier.
Je le réouvre ce matin et il décale toute mes valeurs sur la prochaine cellule vide
 

Papou-net

XLDnaute Barbatruc
Re : VBA et End(xlDown).Row

RE :

C'est un très gros fichier avec une vingtaine d'userforms et 3 tableaux, je sais pas si je dois vous lenvoyer....

Peux-tu établir une copie de ton fichier, en supprimant tout ce qui n'est pas en liaison avec le coeur du problème ? En fait, tu ne garderais que les onglets et formulaires concernés par la question.

Cordialement.

Oups, bonjour pierrejean, francedemo.
 
Dernière édition:

xerios123

XLDnaute Nouveau
Re : VBA et End(xlDown).Row

Voila j'ai essayer de faire le plus simple possible

alt f11 et lancer l'userform maintajout

Cette partie la n'ajoute que des dates dans la feuille 3

Je n'ai pas mit mon autre parti qui permet de rajouter les données dans la feuille 1

Ce qui est bizzare c'est que dans la partie 1 je prend la meme fonction que pour changer les dates, il n'y a que pour les dates que c'est décalé...
 

Pièces jointes

  • essai.xls
    104 KB · Affichages: 99
  • essai.xls
    104 KB · Affichages: 104
  • essai.xls
    104 KB · Affichages: 110

francedemo

XLDnaute Occasionnel
Re : VBA et End(xlDown).Row

re pierrejean, papou-net, xerios,

effectivement, la ligne Cells(Ligne, i + 9).Value = g & i ne donne pas ce que je veux, il faudrait l'écrire comment pour une boucle ?
j'ai essayé plusieurs écriture mais aucune ne fonctionne...
à+
 

Papou-net

XLDnaute Barbatruc
Re : VBA et End(xlDown).Row

RE,

effectivement, la ligne Cells(Ligne, i + 9).Value = g & i ne donne pas ce que je veux, il faudrait l'écrire comment pour une boucle ?
j'ai essayé plusieurs écriture mais aucune ne fonctionne...
En attendant de répondre à xerios, voici comment corriger la boucle de francedemo :

Code:
Sub enregistrerprev()
    
    Worksheets(3).Activate

    Ligne = Worksheets(3).Range("a1").End(xlDown).Row
    If Not Ligne = 1 Then Ligne = Ligne + 1
    
    Cells(Ligne, 1).Value = 1
    
    Cells(Ligne, 9).Value = compteura
    For i = 1 To 30
      Cells(Ligne, i + 9) = maintajout.Controls("Textbox" & i)
    Next
    Worksheets(1).Activate
    
End Sub
On peut donc supprimer le passage des paramètres à la procédure.

Cordialement.
 

francedemo

XLDnaute Occasionnel
Re : VBA et End(xlDown).Row

ok merci, et en plus, on doit pouvoir remplacer:
Code:
    Ligne = Worksheets(3).Range("a1").End(xlDown).Row
    If Not Ligne = 1 Then Ligne = Ligne + 1

par:
Code:
    Ligne = Worksheets(3).Range("A2").End(xlDown).Row + 1

à +
 

Papou-net

XLDnaute Barbatruc
Re : VBA et End(xlDown).Row

ok merci, et en plus, on doit pouvoir remplacer:
Code:
    Ligne = Worksheets(3).Range("a1").End(xlDown).Row
    If Not Ligne = 1 Then Ligne = Ligne + 1

par:
Code:
    Ligne = Worksheets(3).Range("A2").End(xlDown).Row + 1

à +

C'est exact, sauf que si la première cellule de la colonne est vide, alors la ligne démarrera à la seconde, ce que la condition de test évite.

Cordialement.
 

Efgé

XLDnaute Barbatruc
Re : VBA et End(xlDown).Row

Bonjour à tous, juste pour dire que
VB:
Ligne = Worksheets(3).Range("A1").End(xlDown).Row
ne renverra jamais 1. Si la cellule A2 est vide nous aurons 65536, même remarque pour
VB:
Ligne = Worksheets(3).Range("A2").End(xlDown).Row
Une version en pièce jointe avec une ligne magique :
VB:
Application.Worksheets(3).UsedRange
qui réinitialise le UsedRange de la feuille.Cordialement
 

Pièces jointes

  • essai(2).xls
    99 KB · Affichages: 90
  • essai(2).xls
    99 KB · Affichages: 98
  • essai(2).xls
    99 KB · Affichages: 100

xerios123

XLDnaute Nouveau
Re : VBA et End(xlDown).Row

enfaite j'ai toujours le même problème, ma ligne est décallé

J'ai 2 procédure, une qui fait correctement les modifs :
Sub Enregistrer(n1 As String, n2 As String, n3 As String, n4 As String, n5 As String, n6 As String, n11 As String, n13 As String, n18 As String, n23 As String, ouicon As Boolean, ouic As Boolean, ouip As Boolean)

Worksheets(1).Activate

Ligne = Range("g1").End(xlDown).Row
If Not Ligne = 1 Then Ligne = Ligne + 1
Cells(Ligne, 3).Value = n1
Cells(Ligne, 4).Value = n2
Cells(Ligne, 5).Value = n3
Cells(Ligne, 6).Value = n4
Cells(Ligne, 7).Value = n5
Cells(Ligne, 8).Value = n6
Cells(Ligne, 11).Value = n11
Cells(Ligne, 13).Value = n13
Cells(Ligne, 18).Value = n18
Cells(Ligne, 23).Value = n23


Cells(Ligne, 39).Value = ouicon

Cells(Ligne, 41).Value = ouic

Cells(Ligne, 43).Value = ouip


End Sub


alors que la deuxième procédure ( La votre), elle rentre les valeurs mais dans la ligne en dessous
 

Discussions similaires

Réponses
26
Affichages
1 K
  • Résolu(e)
Microsoft 365 Autorisation
Réponses
2
Affichages
770
Réponses
0
Affichages
1 K

Statistiques des forums

Discussions
312 749
Messages
2 091 623
Membres
105 009
dernier inscrit
aurelien76110