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

pazogueye

Nouveau membre
Bonjour,
j'ai réaliser une macro qui fait la mise en forme de mes facture.
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 !
 

zeb

Modérateur
Salut et Bienvenue.

Bien sûr que c'est possible !

Dans ce , j'explique comment aller à la fin d'un bloc. Tu pourrais t'en inspirer pour trouver où mettre tes lignes "total".
 

pazogueye

Nouveau membre
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.
 

zeb

Modérateur
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
 

zeb

Modérateur
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 :
Code:
Sub toto()
    Dim cell_ref As Range
    
    ' // Se mettre sur une cellule + ou - au hasard
    Set cell_ref = Range("A18")
    
    MsgBox "Bonjour, je suis la cellule de référence." & vbCrLf & _
           "Je pointe actuellement sur " & cell_ref.Address
    
    ' // Descendre de 2, se décaler de 3
    Set cell_ref = cell_ref.Offset(2, 3)
    
    MsgBox "Je me suis décalé de 2 lignes vers le bas et de 3 colonnes vers la droite." & vbCrLf & _
           "Je pointe maintenant sur " & cell_ref.Address
    
    ' // Descendre de 1
    Set cell_ref = cell_ref.Offset(1, 0)
    MsgBox "Et hop ! On redescend." & vbCrLf & _
           "Je pointe maintenant sur " & cell_ref.Address
End Sub
 

zeb

Modérateur
Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯\¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Vous devez être connecté pour voir les images.
 

pazogueye

Nouveau membre
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:

[cpp]Sub Macro5()

cel_ref = (Cells(Rows.Count, c).End(xlUp).Row) + 2
Range("A14:F15").Select
Selection.Cut Destination:=Range(cel_ref)
Range(cel_ref).Select
End Sub[/cpp]

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!
 

zeb

Modérateur
Ah, ça avance :)

[strike]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)[/strike]

A tout de suite...
 

zeb

Modérateur
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 :
Code:
Range(xxxx).Select
Selection.Cut Destination:=yyyy
Code moins moche :
Code:
Range(xxxx).Cut Destination:=yyyy

Et l'étude de code ?
Code:
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
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 079
Messages
6 716 715
Membres
1 586 247
Dernier membre
MrAzgarIII
Partager cette page
Haut