Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

code pour repérer la dernière ligne écrite et incrémenter

24 réponses
Avatar
Greg
Bonjour à toutes et à tous,

Dans ce classeur (http://cjoint.com/?kduSqBGpKX), je cherche à produire une
ligne supplémentaire avec les mêmes caractéristiques que la dernière ligne
utilisée.

Ca donnerait qqchose dans le genre:

A B C
...
7 S1 blabla blablabla
8

et en cliquant sur un bouton macro, on pourrait générer la même ligne que la
dernière, même forme et même bordure, avec la suite logique en colonne A (S2
dans l'exemple) et dans les autres colonnes.

A B C
...
7 S1 blabla blablabla
8 S2

Mon problème: J'arrive à m'en sortir avec mes modestes compétences en
produisant une macro qui sélectionne la dernière ligne de B7:AV7, puis qui
incrémente sur la ligne du dessous et efface le contenu de E8 à AV8
(sauvegardant ainsi l'incrémentation de B7:D7 à B8:D8) et pour finir se
place en cellule E8 prêt à travailler.

1) Ca me parait un peu lourd
2) Ca ne génère que la ligne 8, et je dois recommencer une nouvelle macro
pour chaque nouvelle ligne. Il faudrait donc lui indiquer la dernière ligne
écrite dans la feuille, mais je ne sais pas le faire.

Pourriez-vous m'aider?

PS: Je suis novice en VB

Greg

10 réponses

1 2 3
Avatar
LSteph
Bonsoir,

Que veux tu dire sur l'exemple
on voit des carrés plus bas un titre..et en dessous
séance1 à gauche..
...de quelles lignes parles tu?

--
lSteph

Greg a écrit :
Bonjour à toutes et à tous,

Dans ce classeur (http://cjoint.com/?kduSqBGpKX), je cherche à produire une
ligne supplémentaire avec les mêmes caractéristiques que la dernière ligne
utilisée.

Ca donnerait qqchose dans le genre:

A B C
...
7 S1 blabla blablabla
8

et en cliquant sur un bouton macro, on pourrait générer la même ligne que la
dernière, même forme et même bordure, avec la suite logique en colonne A (S2
dans l'exemple) et dans les autres colonnes.

A B C
...
7 S1 blabla blablabla
8 S2

Mon problème: J'arrive à m'en sortir avec mes modestes compétences en
produisant une macro qui sélectionne la dernière ligne de B7:AV7, puis qui
incrémente sur la ligne du dessous et efface le contenu de E8 à AV8
(sauvegardant ainsi l'incrémentation de B7:D7 à B8:D8) et pour finir se
place en cellule E8 prêt à travailler.

1) Ca me parait un peu lourd
2) Ca ne génère que la ligne 8, et je dois recommencer une nouvelle macro
pour chaque nouvelle ligne. Il faudrait donc lui indiquer la dernière ligne
écrite dans la feuille, mais je ne sais pas le faire.

Pourriez-vous m'aider?

PS: Je suis novice en VB

Greg




Avatar
Jacquouille
Bonsoir:
Dim derL As Long
derL = Sheets("feuil1").[B65536].End(xlUp).Row
pourrait peut-être t'aider?
--
Bien amicalmement,
"Le vin est au repas ce que le parfum est à la femme."

Jacquouille.

"Greg" a écrit dans le message de news:
48e66c74$0$13030$
Bonjour à toutes et à tous,

Dans ce classeur (http://cjoint.com/?kduSqBGpKX), je cherche à produire
une ligne supplémentaire avec les mêmes caractéristiques que la dernière
ligne utilisée.

Ca donnerait qqchose dans le genre:

A B C
...
7 S1 blabla blablabla
8

et en cliquant sur un bouton macro, on pourrait générer la même ligne que
la dernière, même forme et même bordure, avec la suite logique en colonne
A (S2 dans l'exemple) et dans les autres colonnes.

A B C
...
7 S1 blabla blablabla
8 S2

Mon problème: J'arrive à m'en sortir avec mes modestes compétences en
produisant une macro qui sélectionne la dernière ligne de B7:AV7, puis qui
incrémente sur la ligne du dessous et efface le contenu de E8 à AV8
(sauvegardant ainsi l'incrémentation de B7:D7 à B8:D8) et pour finir se
place en cellule E8 prêt à travailler.

1) Ca me parait un peu lourd
2) Ca ne génère que la ligne 8, et je dois recommencer une nouvelle macro
pour chaque nouvelle ligne. Il faudrait donc lui indiquer la dernière
ligne écrite dans la feuille, mais je ne sais pas le faire.

Pourriez-vous m'aider?

PS: Je suis novice en VB

Greg



Avatar
Greg
Re!

Que veux tu dire sur l'exemple?
on voit des carrés plus bas un titre..


Ces carrés serviront à entrer des données qui seront tirées d'une base de
données avec nom d'école ... Ce n'est pas une feuille organisée sous le
modèle habituel Excel (champs...)

et en dessous séance1 à gauche..
...de quelles lignes parles tu?


Je parle de cette ligne (la 7). C'est ici que les profs entreront leurs
différentes séances, pour atteindre un objectif. Ces compétences peuvent
être variables selon les objectifs. Voilà pourquoi (toujours une question de
présentation, à mon niveau) ils pourront ajouter les séances ligne par
ligne.

Voilà ce que ça peut donner:

http://cjoint.com/?kdxpzs7Ron

J'ai écrit le projet dans une zone de texte. Je pense m'en sortir pour tout
sauf pour le premier point, autrement dit celui que j'évoque sur ce fil.

Merci pour votre contribution... même si j'ai l'impression d'abuser un
peu...

NB: Je me suis embarqué dans une série de documents pour aider les collègues
donc vous risquez de me voir de temps en temps... J'espère ne pas être trop
envahissant.

Greg
Avatar
Greg
Désolé Jacqouille mais mon petit niveau en VB ne me permet pas de savoir ce
que je dois faire de ce code...

Merci quand meme ;-(

Greg

"Jacquouille" a écrit dans le message de
news:
Bonsoir:
Dim derL As Long
derL = Sheets("feuil1").[B65536].End(xlUp).Row
pourrait peut-être t'aider?


Avatar
Fredo P
Bonsoir Greg
http://cjoint.com/?kebdkottGi

Sub Plus_une()
Application.ScreenUpdating = False
Application.EnableEvents = False
Dim Lg#
Lg = Feuil1.Range("A65536").End(3).Row
Cells(Lg, 1).DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay,
Step:=1, Stop:Îlls(Lg, 1) + 1, Trend:úlse
Range("B" & Lg).AutoFill Destination:=Range("B" & Lg & ":B" & Lg + 1)
Range("C" & Lg + 1 & ":D" & Lg + 1).Value = Range("C" & Lg & ":D" &
Lg).Value
'Range("D5:D28").Select
Application.ScreenUpdating = False
Application.EnableEvents = False
End Sub

"Greg" a écrit dans le message de news:
48e66c74$0$13030$
Bonjour à toutes et à tous,

Dans ce classeur (http://cjoint.com/?kduSqBGpKX), je cherche à produire
une ligne supplémentaire avec les mêmes caractéristiques que la dernière
ligne utilisée.

Ca donnerait qqchose dans le genre:

A B C
...
7 S1 blabla blablabla
8

et en cliquant sur un bouton macro, on pourrait générer la même ligne que
la dernière, même forme et même bordure, avec la suite logique en colonne
A (S2 dans l'exemple) et dans les autres colonnes.

A B C
...
7 S1 blabla blablabla
8 S2

Mon problème: J'arrive à m'en sortir avec mes modestes compétences en
produisant une macro qui sélectionne la dernière ligne de B7:AV7, puis qui
incrémente sur la ligne du dessous et efface le contenu de E8 à AV8
(sauvegardant ainsi l'incrémentation de B7:D7 à B8:D8) et pour finir se
place en cellule E8 prêt à travailler.

1) Ca me parait un peu lourd
2) Ca ne génère que la ligne 8, et je dois recommencer une nouvelle macro
pour chaque nouvelle ligne. Il faudrait donc lui indiquer la dernière
ligne écrite dans la feuille, mais je ne sais pas le faire.

Pourriez-vous m'aider?

PS: Je suis novice en VB

Greg



Avatar
Jacquouille
Bonjour,
Dans un tableau, il y a deux manières d'arriver à la dernière ligne non
vide.
-Soit on part de la ligne 1 et on descend, avec le hadicap de tomber sur la
dernière cellule non vide, avant une cel vide, mais qui n'est pas
nécessairement la dernière du tableau
- ou, pour pallier à cet inconvénient, on part de la dernière ligne (65536)
et on remonte jusqu'à ce que l'on rencontre une cel non vide.
DerL = dernière ligne.
Tu peux vérifier cela avec la touche CTRL et les flèches haut et bas.
Bonne chance

--
Bien amicalmement,
"Le vin est au repas ce que le parfum est à la femme."

Jacquouille.

"Greg" a écrit dans le message de news:
48e68cf7$0$14101$
Désolé Jacqouille mais mon petit niveau en VB ne me permet pas de savoir
ce que je dois faire de ce code...

Merci quand meme ;-(

Greg

"Jacquouille" a écrit dans le message de
news:
Bonsoir:
Dim derL As Long
derL = Sheets("feuil1").[B65536].End(xlUp).Row
pourrait peut-être t'aider?






Avatar
LSteph
Bonjour Greg,

A condition de virer toutes ces M... de fusions!
Si c'est possible..!!!

http://cjoint.com/?kemRTYZvI1

Sub AjoutSeance()

Dim lig As Long
lig = [b65536].End(xlUp).Row

With Range(Cells(lig, 2), Cells(lig, 48))
.Copy Range(Cells(lig + 1, 2), Cells(lig + 1, 48))
End With

Cells(lig, 2).AutoFill _
Destination:=Range(Cells(lig, 2), Cells(lig + 1, 2)), _
Type:=xlFillDefault
Range("e" & lig + 1).Activate
End Sub


'lSteph

Si tu veux faire quelquechose avec excel vire toutes ces fusions
en VBA c'est de la merge on dit mergecells mais pour moi dans ce
mot seul le début du g anglais se prononce.

Utilise Format Cellule Alignement centrer sur plusieurs colonnes
SANS cocher fusion

Lire tout le bien qui est dit dans ce forum sur les fusions de cellules.

--
lSteph
( Pourfendeur des Fusions)

Greg qui a écrit :

Voilà ce que ça peut donner:



http://cjoint.com/?kdxpzs7Ron


Avatar
LSteph
...et voici pour suivre dans l'idée ce qui me semblerait plus simple:

http://cjoint.com/?keomvj2aRj

----
Le conseil: favoriser la facilité de gestion des données et du tableau

Prévoir toujours d'abord la largeur dont on a besoin dans le tableau
fonctionnel.
Ainsi , faire en sorte de n'avoir pas dans ce dernier de colonnes vides
ni de fusions de cellules (qui sont par la mauvaise organisation des
données qu'elles impliquent source de perte des fonctionnalités du tableur)
Un titre par colonne et pas de colonnes sans titre.
Une ligne=>un enregistrement, pas de lignes vides dans le tableau;pas de
fusions!

Après on se débrouille toujours pour la présentation de ce qu'on veut
voir au dessus!
Moins de prise de tête avec qu'avec 48 réf de colonnes dont 90% inutiles.
----

Le code aussi est dès lors bien plus simple:

'''Code Feuil1
Private Sub CommandButton1_Click()
Call AjoutSeance
End Sub

'''Module1
Sub AjoutSeance()

Dim lig As Long
lig = [b65536].End(xlUp).Row

With Range(Cells(lig, 2), Cells(lig, 4))
.Copy Range(Cells(lig + 1, 2), Cells(lig + 1, 4))
End With

Cells(lig, 2).AutoFill _
Destination:=Range(Cells(lig, 2), Cells(lig + 1, 2)), _
Type:=xlFillDefault
Range("C" & lig + 1).Activate
End Sub

'lSteph
Avatar
Greg
Bonsoir à tous et merci!

Stef, j'ai lu ton message sur le portable d'Emma. Sur le miens, ton message
n'est pas (encore?) arrivé... très bizarre...

Bref. Je me suis servi du code de Stef (mais les infos laissées par
Jacquouille m'ont bien guidées) pour bidouiller la suite et ça coince...
étonnant, non?

Je vous montre, avec pudeur. Ne vous moquez pas, ce sont quasiment mes
premières lignes et je dois être très lourd:

Sub AjoutSeance()

' lig=première ligne que tu croises en partant d'en bas
Dim lig As Long
lig = [b65536].End(xlUp).Row


With Range(Cells(lig, 2), Cells(lig, 4))
.Copy Range(Cells(lig + 1, 2), Cells(lig + 1, 4))
End With

Cells(lig, 2).AutoFill _
Destination:=Range(Cells(lig, 2), Cells(lig + 1, 2)), _
Type:=xlFillDefault

'sélectionne dans la dernière ligne de données la 3eme et 4eme colonne
Range(Cells(lig, 3), Cells(lig, 4)).Select

'Supprime le contenu de cette sélection
Selection.ClearContents

' Place toi en colonne 3 de cette dernière ligne
Range(Cells(lig, 3)).Activate


End Sub

Ca coince, oui... mais où?

Merci à vous
Avatar
Greg
Non, j'ai bien un problème avec mon serveur ou avec outlook puisque je vois
déjà mon message mais pas celui de Stef (qui est arrivé sur celui d'Emma...
Je suis très embêté car certains ont dû me répondre et se sont certainement
sentis ignorés...

Je vais chercher une solution!
1 2 3