Se connecter avec
S'enregistrer | Connectez-vous

Macro Excel: définir des ligne toujours en fin de tableau

Dernière réponse : dans Programmation

Bonjour,
j'ai réaliser une macro qui fait la mise en forme de mes facture.[img=http://img1.uplood.fr/free/thumbnails/fnn1_tableau.jpg]
mais puisqu'on ne sais pas d'avance combien de ligne pourrai contenir une facture.
j'aimerai donc connaitre le code qu'il me faudra inserer dans la macro pour définir les ligne Montant Total toujour en fin du tableau.
est ce possible ?
Merci !
Lassé par la pub ? Créez un compte

Salut;
Merci de ta réponse.

mais comment faire si nous avons deux colonnes(Montant | 51000) concerné et que nous voulons mettre en fin de tableau deux lignes (Montant et montant Net) ?
comment faire aussi pour lui dire que c'est les lignes ou il ya inscrit "montant" et " montant net" qu'il doit mettre en fin de tableau ?

Merci.
Expert Programmation

Bon, alors comment tu dirais, à une personne qui n'a pas Excel, mais juste une copie papier de ton tableau, de mettre un coup de stabilo (ben, c'est de la mise en forme basique, mais c'en est tout de même) dans la bonne cellule ?

Évidement que tu ne peux pas dire, la cellule "Montant". Imagine qu'en l'honneur d'Yves, on baptise un poisson "Montant". Si en plus, il faut le nettoyer et le désarrêter, tu risques d'avoir un produit "Montant net" :D  :D  :D 
Expert Programmation

Avec le code proposé pour déterminer la dernière ligne non vide pour une colonne donnée, en considérant la colonne A, on devrait trouver la cellule A18 de ton exemple. En se décalant de trois colonnes à droite et de deux lignes en bas, on devrait se trouver sur la case "Montant". Encore une case plus bas, et c'est la case "Montant net".

---------------------------------------

Etudie ce petit bout de code :
  1. Sub toto()
  2. Dim cell_ref As Range
  3.  
  4. ' // Se mettre sur une cellule + ou - au hasard
  5. Set cell_ref = Range("A18")
  6.  
  7. MsgBox "Bonjour, je suis la cellule de référence." & vbCrLf & _
  8. "Je pointe actuellement sur " & cell_ref.Address
  9.  
  10. ' // Descendre de 2, se décaler de 3
  11. Set cell_ref = cell_ref.Offset(2, 3)
  12.  
  13. MsgBox "Je me suis décalé de 2 lignes vers le bas et de 3 colonnes vers la droite." & vbCrLf & _
  14. "Je pointe maintenant sur " & cell_ref.Address
  15.  
  16. ' // Descendre de 1
  17. Set cell_ref = cell_ref.Offset(1, 0)
  18. MsgBox "Et hop ! On redescend." & vbCrLf & _
  19. "Je pointe maintenant sur " & cell_ref.Address
  20. End Sub
Expert Programmation

Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯\¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

Bonjour !
et merci encore pour tout tes reponses.
et oui tu as raison vaut mieu apprendre que de demander.

je crois avoir compris la logique:

-dabor je cherche la derniere ligne non vide de mon tableau
-puis j'essay de deplacer les cellules Montants deux lignes apres.
parcque en réalité voila ce que j'avais avant ma premiere macro de mise en forme

puisqu'on est certain que les champ montant serons toujours sur les même cellule au début.
donc la macro doit abord trouvé la dernière ligne non vide du tableau, puis déplacer les cellule A14:F15 deux lignes après la dernière ligne du tableau trouvé.

voici le code que j'ai faite pour cela:

  1. Sub Macro5()
  2.  
  3. cel_ref = (Cells(Rows.Count, c).End(xlUp).Row) + 2
  4. Range("A14:F15").Select
  5. Selection.Cut Destination:=Range(cel_ref)
  6. Range(cel_ref).Select
  7. End Sub


bien sur ca ne marche pas :sleep:  . c'est juste pour que tu me dise si la logique est bonne ou pas.
et peut etre que tu peut m'indiquer comment on initialise une variable qui doit contenir les coordonnées d'une cellule. car en réalité je n'ai jamais fait du VBA :??: 

Merci!
Expert Programmation

Ah, ça avance :) 

Je lirai ton code quand tu respecteras le règlement :fou:  (Va le lire, il faut utiliser la balises [code]. Pas besoin de refaire un autre message, il te suffit de modifier le premier)

A tout de suite...
Expert Programmation

Oups, je t'avais oublié. :sweat: 

Bon, alors maintenant que je peux lire ton code, je le trouve horrible. :vomi: 

Pourquoi diable fais-tu un Select suivi d'un Selection ? (T'inquiète pô, je connais la réponse [:nyghost] )
Code moche :
  1. Range(xxxx).Select
  2. Selection.Cut Destination:=yyyy

Code moins moche :
  1. Range(xxxx).Cut Destination:=yyyy


Et l'étude de code ?
  1. cel_ref = (Cells(Rows.Count, c).End(xlUp).Row) + 2
Ça, c'est n'importe quoi, mais on va y revenir.

Alors la première chose à faire, c'est de mettre Option Explicit au début de ton module. C'est non négociable.
Ensuite, on s'aperçoit qu'il y a des variables non déclarées. Ce n'est pas bien, il faut y remédier.
VBA est un langage trop moche pour que les variables non initialisées soient repérées par le compilateur.
Il va falloir le faire soi-même. Puis, tu vas mieux regarder la ligne 5 du code que je te proposai, en particulier le premier mot ;) 

Je te propose, à la lumière de ces quelques commentaires, de publier de nouveau ton code.
Tu es novice, tu as le droit à deux choses :
  • Il peut ne pas fonctionner,
  • Il peut etre très moche,
    Une chose t'es interdite :
  • Il doit prendre en compte, le plus possible, des remarques précédentes.

    Au boulot :o 
    Lassé par la pub ? Créez un compte