Macro de rajout d'une ligne modèle

Brigitte

XLDnaute Barbatruc
Bonsoir,

J'aurais bien besoin d'avoir un bouton de "rajout de lignes" (j'ai ca dans deux autres fichiers et ca marche du tonnerre) comme une ligne modèle située en fin de tableau qui contient notamment :

- une MFC dans trois cellules
- une formule dans une autre
- une liste déroulante dans une autre
- à terme un format date...

J'ai donc créé :

- une ligne modèle en fin de tableau (que j'ai définie : insertion/nom...)
- une macro (enfin pompé sur mon fichier archives : merci Hervé)

Et bien entendu, ca ne fonctionne pas, j'ai dû mal adapter.

Voici la macro qui ne bugge pas, mais elle ne fonctionne pas.

Code:
Public Sub RajoutLignes()
Dim nbligne As Long
Dim t As String
Dim derligne As Integer
 
Application.ScreenUpdating = False
nbligne = Application.InputBox("Nombre de lignes à insérer (maximum 20)", "Insertion ligne", 20, , , , , 1)
Select Case nbligne
    Case Is > 20: t = "Maximum 20, SVP"
    Case 0: Exit Sub
    Case Is < 1: t = "Supérieur à 0, SVP"
End Select
If t <> "" Then
    t = t & vbNewLine & vbNewLine & "Procédure arrêtée."
    MsgBox t, , "Attention..."
    Exit Sub
End If
derligne = Range("a2").End(xlDown).Row + 1
[COLOR=seagreen]'là j'ai mis range("a2") mais je préférerais b2 car j'ai l'habitude de mettre en B la date de la prochaine séance alors que la colonne A du ZIP ne peut se remplir qu'une fois la séance passée[/COLOR]
If derligne = 4 Then derligne = 5
[COLOR=seagreen]'ca j'ai fait ainsi car  je crois que ca signifie le nombre de lignes de titres... enfin c ma déduction...[/COLOR]
Rows(derligne & ":" & derligne + nbligne - 1).Insert
Range("modele").Copy Destination:=Range("a" & derligne & ":a" & derligne + nbligne - 1)
[COLOR=seagreen]'Range("f" & derligne & ":f" & derligne + nbligne - 1).ClearContents à rajouter quand ca marchera[/COLOR]
 
Application.ScreenUpdating = True
End Sub

En fait, la macro que j'ai faite me les rajoute en haut du tableau sous la première ligne saisie (ligne 4) et EN PLUS en décalé (contenu de F en G que je laisse volontairement pour l'instant) et je vois même pas la formule de la colonne K... Mais bon... Ce que je dis est à prendre avec prudence... vu mon niveau. Je pense que le souci se situe dans la définition de DERLIGNE ou/et de row+1... et d'autres choses aussi surement.

Je crois aussi que ce fichier par rapport aux autres comporte des cellules vides en A et B qui font que ca le fait bugger... Si on met des croix par exemple en A et B là où c vide, déjà ca met les lignes en dessous... C'est déjà ca. Reste le pb du décalage vers la droite donc.

J'ai ensuite une deuxième question. J'aimerais que le bouton affecté à cette macro soit "volant", à savoir soit tjs à la fin du tableau et si je descends, descende aussi plutôt que d'être dans la barre de titres.

Et j'aimerais que lorsque je rajoute des lignes, mon curseur soit tjs en bas, que je remonte pas tout en haut du tableau.

Merci d'avance.
 

Pièces jointes

  • Délibérations - Historique MACRO.zip
    95.6 KB · Affichages: 64
Dernière édition:

Brigitte

XLDnaute Barbatruc
Re : Macro de rajout d'une ligne modèle

Re,

Histoire de remonter mon petit souci.

Mais aussi pour dire que je continue de chercher et que je viens de voir que CE fichier (par rapport aux autres) comporte des cellules vides en A et B et si j'y mets une croix... ca résoud déjà le pb de l'emplacement du rajout... Ca rajoute bien en bas, et non plus en haut.

En revanche demeure le problème du décalage vers la droite et de l'absence de la formule en K (même pas décalée en L =annee(Bxx) ).

Si vous avez des idées... même pour un autre rajout de ligne conforme à la ligne modèle je suis assez preneuse... Et avec le systeme de me demander combien, ca me plairait bien.

Merci.
 
C

Compte Supprimé 979

Guest
Re : Macro de rajout d'une ligne modèle

Salut p'tites couettes adorée ;)

Plusieurs petits problèmes :

1) Une variable pour mémoriser une ligne dois être en "Long"
Sinon à un moment tu auras un gros message d'erreur

"Les variables de type Integer sont stockées sous la forme de nombres de 16 bits (2 octets) dont la valeur est comprise entre -32 768 et 32 767"
A 32768 tu auras un beau message d'erreur, bon d'accord ça en fait de la ligne
Mais vaux mieux toujours être prévoyant ;)

"Les variables de type Long (entier long) sont stockées sous la forme de nombres signés de 32 bits (4 octets) dont la valeur est comprise entre -2 147 483 648 et 2 147 483 647"
Là, tu as de quoi faire .... surtout dans 2003

2) Tu allais rechercher la dernière ligne à partir de la ligne 2 de ton tableau
Problème la ligne 3 est vide, donc dernière ligne ;)
Le code
Code:
DerLigne = Range("B4").End(xlDown).Row + 1
C'est comme si tu faisais dans Excel : CTRL+Flèche bas

3) La copie de ta ligne "Modèle" se faisait uniquement dans la colonne "A"
d'ou ton problème de décalage.

Voici le bon code :
Code:
Public Sub RajoutLignes()
Dim NbLigne As Long
Dim t As String
Dim DerLigne As Long
NbLigne = Application.InputBox("Nombre de lignes à insérer (maximum 20)", "Insertion ligne", 20, , , , , 1)
Application.ScreenUpdating = False
Select Case NbLigne
    Case Is > 20: t = "Maximum 20, SVP"
    Case 0: Exit Sub
    Case Is < 1: t = "Supérieur à 0, SVP"
End Select
If t <> "" Then
    t = t & vbNewLine & vbNewLine & "Procédure arrêtée."
    MsgBox t, , "Attention..."
    Exit Sub
End If
' Se positionner sur la première ligne remplie des données
' Mais le faire sur la colonne "B"
DerLigne = Range("B4").End(xlDown).Row + 1
' Insérer le nombre de ligne saisie
Rows(DerLigne & ":" & DerLigne + NbLigne - 1).Insert
' Le modèle utilise les colonnes de A à K
Range("modele").Copy Destination:=Range("A" & DerLigne & ":K" & DerLigne + NbLigne - 1)
'Range("f" & derligne & ":f" & derligne + nbligne - 1).ClearContents
Application.ScreenUpdating = True
End Sub

Pleins de gros bisous
yaisse3.gif
 
Dernière modification par un modérateur:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Macro de rajout d'une ligne modèle

Bonsoir Brigitte, bonsoir le forum,

En pièce jointe ton fichier modifié. J'ai supprimé le bouton et maintenant tu double-cliques dans la colonne B à l'endroit où tu veux ajouter les lignes. J'espère que ça te conviendra.

C'est un plaisir de faire ça pour toi. Bisous.

Édition:

Bonsoir Bruno on s'est croisé
 

Pièces jointes

  • Brigitte_v01.zip
    92.7 KB · Affichages: 80
Dernière édition:
C

Compte Supprimé 979

Guest
Re : Macro de rajout d'une ligne modèle

Bonsoir mon cher Robert ;)

Commes tu le dis si bien : "c'est un plaisir" de faire ça pour notre brigitte Nationale ...

Nationale ... que dis-je, pour notre brigitte Internationale :D

A+
 

Brigitte

XLDnaute Barbatruc
Re : Macro de rajout d'une ligne modèle

Bonjour bonjour,

Ouha les garçons que de gentillesse, décidément je suis gâtée depuis vendredi avec tous ces gars qui me secourent, et principalement mon JNP qui a passé le dimanche avec moi (sisi...) et vous deux..

Bon j'avoue que j'ai été tentée de suite par la macro de sieur Robert... qui me convient on ne peut mieux...

Questions :

- pour adapter sans faire de bêtises : je copie le code

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column <> 2 Then Exit Sub
Dim nbligne As Long.... etc

dans la feuille de mon VRAI fichier, c tout ... ou y a autre chose à faire ?

- le double clic dans la colonne B, il marche même sur les lignes rajoutées ? pas essayé, pas osé.

Mille mercis

PS : Bruno (adoré.... ouille Fanny, non pas taper) je vais regarder aussi ton code, tout promis...


Bisous et mercis pour vos paroles gentilles en prime.
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Macro de rajout d'une ligne modèle

Bonjour Brigitte, Bruno, bonjour le forum,

Alors oui Brigitte il te suffit de copier le code. Vérifie aussi que la ligne modèle contient bien la formule (il me semble que je l'ai rajoutée sur ton fichier exemple mais je ne suis pas sûr). je te confirme le double-clic marchera aussi sur les lignes rajoutées puisque c'est toute la colonne B qui est prise en compte sur cette macro événementielle.

Bonne journée, bisous.
 

Brigitte

XLDnaute Barbatruc
Re : Macro de rajout d'une ligne modèle

Bonsoir,

Je reviens un peu ce soir (je ferai mieux une autre fois) pour regarder la macro de Bruno. Tout d'abord merci pour ce cours magistral et surtout pour avoir la patience de tenter d'essayer d'arriver.... pouah... à me faire comprendre qqchse.

1) Une variable pour mémoriser une ligne dois être en "Long"

Bien sûr je te crois sur parole, mais la macro d'Hervé fonctionne bien. Donc j'en déduis que quand j'arriverai à la ligne fatidique (j'en suis à 6650) faudra soit changer le "integer" en "long" (au début seulement ?) ou alors arrêter d'archiver... Je serai sans doute à la retraite, remarque...

2) Tu allais rechercher la dernière ligne à partir de la ligne 2 de ton tableau
Problème la ligne 3 est vide, donc dernière ligne

Ouah, je suis contente, car j'avais vu ca, voir mes posts... et j'avais contourné en mettant une croix dans les cases vides. Enfin quand je dis "j'avais vu", je m'étais dit : ces cases vides doivent l'embêter, sans savoir la raison... juste un feeling, un instinct féminin...

3) La copie de ta ligne "Modèle" se faisait uniquement dans la colonne "A"
d'ou ton problème de décalage.

Là je vois pas... si je compare aux fichiers où je l'utilisais

Range("modele").Copy Destination:=Range("a" & derligne & ":a" & derligne + nbligne - 1)

Pourquoi ca marche là ???

Ben en tout cas, j'ai appris des choses, dis donc... que je vais m'empresser d'oublier, sinon je vais mal dormir, hi hi (je blague... quoique).

Et le bouton volant, ca existe ?

Mais la soluce de ROBERT est idéale... donc je garde. Merci en tout cas, c'est vraiment sympa d'être rentré dans la macro de titours Hervé qui est aux abonnés absents.

Bises

... Mais je zyeute ta macro...
 

Brigitte

XLDnaute Barbatruc
Re : Macro de rajout d'une ligne modèle

Bonjour tout le monde,

Je réutilise dans mon boulot actuel un fichier que j'avais commis pour lister mes délibérations... Et dans ce fichier, j'ai le précieux sésame de JN pour chercher un titre particulier.
Dans ce fichier, figure également une macro fournie en son temps par ROBERT pour rajouter des lignes formatées comme une ligne modèle par double clic en dessous de la dernière cellule saisie en B.

Mais ca ne marche plus. Une idée auriez vous ? Je vous joins un bout de fichier (sans la macro de JN).

Merci d'avance.

Et le plein de gros bisous à Robert si il passe par ce fil (par hasard, hihi...)
 

Pièces jointes

  • Délib rajouts lignes.xls
    274.5 KB · Affichages: 80
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Macro de rajout d'une ligne modèle

Bonjour Brigitte, bonjour le forum,

Le code de cette macro commenté :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim nbligne As Long 'déclare la variable nbligne (NomBre de LIGNEs)
Dim t As String 'déclare la variable t (Texte du message)
Dim derligne As Integer 'déclare la variable derligne (DERnière LIGNE)

If Target.Column <> 2 Then Exit Sub 'si le double clic a lieu ailleurs que dans la colonne B (2), sort de la procédure
Application.ScreenUpdating = False 'masque les changement à l'écran

'ouvre une boîte d'entrée nbligne
nbligne = Application.InputBox("Nombre de lignes à insérer (maximum 20)", "Insertion ligne", 20, , , , , 1)

Select Case nbligne 'agit en fonction du nombre renseigné dans la boîte d'entrée
Case Is > 20: t = "Maximum 20, SVP" 'cas supérieur à 20, définit le texte t
Case 0: Exit Sub 'cas 0, sort de la procédure
Case Is < 1: t = "Supérieur à 0, SVP" 'cas négatif, définit le texte du message
End Select 'fin de l'action en fonction du cas

If t <> "" Then 'condition : si t n'est pas vide
t = t & vbNewLine & vbNewLine & "Procédure arrêtée." 'redéfinit t (t plus deux sauts de lignes plus "Procédure arrêtée.")
MsgBox t, , "Attention..." 'message
Exit Sub 'sort de la procédure
End If 'fin de la condition

derligne = Target.Row + 1 'définit la variable derligne (la ligne de la cellule double-cliquée +1
If derligne = 4 Then derligne = 5 'si derligne = 4 redéfinit derligne = 5
Rows(derligne & ":" & derligne + nbligne - 1).Insert 'insère autant de lignes que nbligne (renseigné dans la boîte d'entrée)
'copie le modèle (plage des colonnes A à L) et le colle dans la colonne A de toutes les lignes insérees
Range("modele").Copy Destination:=Range("a" & derligne & ":a" & derligne + nbligne - 1)
Range("G" & derligne & ":G" & derligne + nbligne - 1).ClearContents 'vide le contenu de la colonne G

Application.ScreenUpdating = True 'affiche le contenu à l écran
End Sub

En rouge les contrainte a modifier si tu veux adapter cette macro à un aurte fichier :
Le double-clic ne fontionne qu'en colonne
B. Il faut qu'il y ait une plage nommée modelefaisant référence à la plage servant de modèle...
Si tu adaptes, ça devrait marcher...
Actuellement le code fonctionne parfaitement si tu double-cliques dans la colonne B.

p.s. je ne crois pas que ce code soit de moi. Il est trop bien pour ça...
 
Dernière édition:

Brigitte

XLDnaute Barbatruc
Re : Macro de rajout d'une ligne modèle

Merci Robert...

Ben pourtant je clique bien dans la colonne B. Et le fichier d'origine doit bien toujours comporter sa fameuse plage nommée MODELE...
Donc je ne sais pas ce qui se passe.

En fait, c'est vrai que la macro d'origine est dans un autre fichier (mes archives) et écrite par HERVE d'xld (coucou)... et je voulais l'utiliser dans mon fichier (délibérations)... et tu avais adapté avec succès...

Chez toi , ca marche en l'état ? Mon double clic serait il mal paramétré ?

Bisous et merci
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Macro de rajout d'une ligne modèle

Bonsoir Brigitte, bonsoir le forum,

Dans un module place la macro ci-desous et lance-la :
Code:
Sub Macro1()
Application.EnableEvents = True
End Sub
Teste maintenant le double-clic... Si ça marche toujours pas envoie ton fichier...
 

Brigitte

XLDnaute Barbatruc
Re : Macro de rajout d'une ligne modèle

Coucou,

Alors là, incroyable... Ce matin (mieux réveillée ?), est ce que c'est possible qu'excel se soit mieux installé ? mais ca marche... sans avoir rien fait... Comment est ce possible ? Juste tes ondes de sète et du pouet Jojo ?

En tous les cas, je garde tes précieux renseignements... T'as vu, je suis nulle, mais au moins j'ai réussi à déloger ce fil de la poussière ?

Bisous doublés pour la peine !
 

Discussions similaires

Statistiques des forums

Discussions
313 230
Messages
2 096 410
Membres
106 604
dernier inscrit
JulienMan