Excel 2003 - Ajout automatique de lignes

Résolu/Fermé
jullian jacques - 14 mai 2009 à 17:07
 jullian jacques - 19 mai 2009 à 18:14
Bonjour,
Je cherche à créer un document de base pour effectuer un diagnostic d'un site. Voila mon problème :
Je cherche à automatiser l'insertion de nouvelles lignes dans les différentes feuilles d'excel d'un même classeur.
Je m'explique.
Dans la première feuille, on rentre les données de base issue du terrain, une ligne = une zone homogène.
Les feuilles suivantes traitent les données. Je voudrais que les lignes correspondantes à chaque zone se créent automatiquement avec les formules et en mise en page la mise en page prédéfinie (sur la ligne au-dessus par exemple).

Est-ce possible ? Si oui pouvez vous m'aidez ?
Merci
A voir également:

12 réponses

Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
14 mai 2009 à 18:35
Salut,

Du crées une ligne avec tes formules, que tu peux ensuite masquer, par exemple ligne 1
et tu colles ce code dans un module associé à un bouton

ce code copie la ligne 1 ou une portion de ligne si tu libéres le code exemple de A1 à F1, crée une ligne à la suite et colle les données de la ligne 1

Sub Macro1()
Dim derlig As Long
' [A1:F1].Select 'si tu sors l'apostrophe la sélection se fera de A1 à F1
Rows("1:1").Select 'mais bloques cette ligne avec une apostrophe
Selection.Copy
derlig = Range("A65536").End(xlUp).Offset(1).Select
Selection.Insert Shift:=xlDown
Application.CutCopyMode = False
[A2].Select
End Sub


A+
Mike-31

Un problème sans solution est un problème mal posé  (Einstein)
2
jullian jacques
15 mai 2009 à 10:32
Merci mike

Je vais te déranger quelque peu car je suis novice en programmation.

Je ne comprends pas ton code mais il fonctionne. Petit bémol la copie/insertion s'effectue mal si la case de la colonne A est vide (dans mon tableau c'est une case à remplir sans formule) J'ai résolu le problème en incrivant XX mais si il existe un moyen simple pour toi de corriger cet inconvénient ce serait super.

Par ailleurs, je sais lancer une macro depuis l'interface VBA mais je ne sais pas comment créer un bouton sous excel (seulement sous access). Peut tu m'aider?

Autre chose, le code que tu m'a fourni crée la ligne sur la feuille active. Est il possible de le généraliser pour qu'il crée dans le même tps une ligne dans d'autres feuilles (non active) ou faut il répéter l'opération sur chaque feuille individuellement?

Merci encore. Si tu n'as pas le tps de te pencher plus avant sur la question dis le moi je me débrouillerais autrement.

A plus
0
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
19 mai 2009 à 14:44
Re,

Récupères ton fichier avec ce lien et on en reparle dans la soirée

https://www.cjoint.com/?ftoKOt0AES

Lorsque tu crées une macro qui doit fonctionner pour toutes tes feuilles, places la dans un module, c'est ce qui plantai le code lorsque le code changeait de feuille.

J'aurais pu écrire le code différemment mais si un décalage venait à arriver entre les feuilles ton code aurait planté alors là il agit différemment sur chaque feuille

Sub Ajout_Lg1()
Dim derlig As Long
Sheets("Diagnostic visuel").Select
[A9:DG9].Select
Selection.Copy
derlig = Range("A65536").End(xlUp).Offset(1).Select
Selection.Insert Shift:=xlDown
Sheets("Informations complémentaires").Select
[A9:Z9].Select
Selection.Copy
derlig = Range("A65536").End(xlUp).Offset(1).Select
Selection.Insert Shift:=xlDown
Sheets("Indices de criticité").Select
[A9:BL9].Select
Selection.Copy
derlig = Range("A65536").End(xlUp).Offset(1).Select
Selection.Insert Shift:=xlDown
Sheets("Indice global - Hiérarchisation").Select
[A9:S9].Select
Selection.Copy
derlig = Range("A65536").End(xlUp).Offset(1).Select
Selection.Insert Shift:=xlDown
Sheets("Diagnostic visuel").Select
Application.CutCopyMode = False
[A2].Select
End Sub


A+
Mike-31

Un problème sans solution est un problème mal posé  (Einstein)
1
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
15 mai 2009 à 11:09
Salut,

Quelques explications sur le problème s'insertion de la ligne, la ligne de code ci-dessous, permet de rechercher la première cellule non vide en partant de la cellule A65536 et remonte jusqu'à cette cellule et sélectionnes la cellule directement dessous qui par définition est vide. on pourrait prendre référence sur une autre colonne qui ne comporte pas de cellule vide, sinon la solution est celle que tu as trouvé, c'est mettre une saisie dans la dernière cellule même un espace suffit ou encore dire que c'est toujours à la ligne 10 par exemple que la ligne doit être insérer

derlig = Range("A65536").End(xlUp).Offset(1).Select

Pour insérer une ligne dans une autre feuille, il te suffit de mettre un bouton sur chaque feuille que tu associes à la macro, et le même code fonctionnera sur toutes les feuilles.
Maintenant si l'insertion de ligne est systématique sur toutes les feuilles, il est possible d'allonger le code pour l'automatiser, si la ligne que l'on rajoute est sur le même index de ligne, il suffit d'activer dans le code les feuilles concernées

A+
Mike-31

Un problème sans solution est un problème mal posé  (Einstein)
0
jullian jacques
15 mai 2009 à 11:21
Merci pour ta rapidité de réponse.
Maintenant que je connais la signification de la ligne de code je vais pouvoir modifier pour que ca "colle" vis à vis de mon fichier.

Pour la deuxième partie, Pour insérer une ligne dans une autre feuille, il te suffit de mettre un bouton sur chaque feuille que tu associes à la macro, et le même code fonctionnera sur toutes les feuilles.
Maintenant si l'insertion de ligne est systématique sur toutes les feuilles, il est possible d'allonger le code pour l'automatiser, si la ligne que l'on rajoute est sur le même index de ligne, il suffit d'activer dans le code les feuilles concernées

J'ai compris le principe mais je ne sais pas faire. Peut tu me détailler ?

Comment on créé un bouton ?

Merci vraiment
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
15 mai 2009 à 11:55
Re,

Pour créer un bouton, deux possibiltés, Affichage/Barre d'outils/ coches Formulaire, sélectionnes un bouton que tu déssine sur ta feuille, la première fois il t'ouvre directement un menu contextuel sélectionnes Affecter à une macro cliques simplement sur le nom de la macro.
Plus tard si tu veux changer de macro ou le nom de la macro à changé clic droit sur le bouton etc ...

Deuxième possibilité avec la barre visual basic ou clic directement avec la barre contrôle dans le menu Affichage/barre d'outils

Dans ce cas double clic sur le bouton et placer le code dans les propriétés du bouton sans Sub Macro1()
et End If

pour le reste du code dans la soirée, je dois m'absenter

A+
Mike-31

Un problème sans solution est un problème mal posé  (Einstein)
0
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
15 mai 2009 à 21:17
Re,

testes ce code qui insére une ligne à la suite de la dernière cellule non vide colonne A feuille 1, feuille2 et feuille3
copie dans cette ligne la ligne 1 qui sert de modéle et contient les formules, éventuellement masquée

Sub test()
Dim derlig As Long
Sheets("Feuil1").Select
derlig = Range("A65536").End(xlUp).Offset(1).Select
Selection.Insert Shift:=xlDown
Sheets("Feuil2").Select
derlig = Range("A65536").End(xlUp).Offset(1).Select
Selection.Insert Shift:=xlDown
Sheets("Feuil3").Select
derlig = Range("A65536").End(xlUp).Offset(1).Select
Selection.Insert Shift:=xlDown
Sheets(1).Rows("1:1").Copy Sheets(1).Range("A65536").End(xlUp).Offset(1)
Sheets(1).Rows("1:1").Copy Sheets(2).Range("A65536").End(xlUp).Offset(1)
Sheets(1).Rows("1:1").Copy Sheets(3).Range("A65536").End(xlUp).Offset(1)
End Sub

A+
Mike-31

Un problème sans solution est un problème mal posé  (Einstein)
0
jullian jacques
18 mai 2009 à 10:12
Merci, je teste ça dans la journée et je te tiens au courant
0
jullian jacques
18 mai 2009 à 17:01
Ecoute g un message d'erreur et je ne comprends pas :
"erreur 1004"

G essayer en partant de ta base précédente et celle de ton dernier mail de faire un mixte (selectionné et activé chaque feuille avec le code initiale) mais g le même type de réponse

En fait en regardant de plus près VBA copie comme il faut la première feuille mais refuse les suivantes.

As tu une idée ? Moi je sèche, ca fait 2h que je regarde sans résultats

NB : Ma ligne référence est la 9 et pour la sélection à copier j'ustilise dans le premier code [A9:DG9].select ce qui fonctionne bien.
0
jullian jacques
18 mai 2009 à 17:03
j'oubliai, il n'y a pas le même nbre de colonne entre les différentes feuilles (si jamais ca a une influence...)
0
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
18 mai 2009 à 17:47
Re,

C'est possible, il doit y avoir une ligne mal renseignée ou une protection,

si ton fichier n'est pas confidentiel, ou s'il comporte des noms éffaces les et mets ton fichier en piéce jointe avec ce lien

https://www.cjoint.com/

A+
Mike-31

Un problème sans solution est un problème mal posé  (Einstein)
0
jullian jacques
19 mai 2009 à 09:17
Voilà le lien :

https://www.cjoint.com/?ftjmxZR7yV

J'ai épuré VBA de mes bricolages pour ne pas embarrasser le fichier. Merci encore.

PS : si il n'est pas (encore) confidentiel sa diffusion est "limité". J'apprécierai donc une discrétion raisonnable.
Bon courage et merci
0
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
19 mai 2009 à 11:09
Salut,

J’ai récupéré ton fichier, mais explique moi clairement ce que tu souhaites faire,
A partir de la feuille Diagnostic visuel, tu cliques sur le bouton qui ajoute une ligne à ton fichier, jusque là pas de problème,
Mais après que doit faire la macro ajouter systématiquement une ligne dans chaque feuille de ton classeur, ou y a-t-il un critère !

Et cette macro doit elle également copier les formules d’une ligne modèle de chaque feuille dans chaque ligne créée !


A+
Mike-31

Un problème sans solution est un problème mal posé  (Einstein)
0
jullian jacques
19 mai 2009 à 13:55
Le but final est que le bouton ajoute une ligne aux feuilles :
- "diagnostic visuel"
- "informations complémentaires"
- "indices de criticité"
- "indice global-hiérarchisation"

Cette nouvelle ligne insérée après la dernière ligne remplie doit prendre la mise en forme et les formules des lignes 9 (ligne modèle) de chaque feuille citée ci-dessus. (les lignes correspondent les unes aux autres d'une feuille à l'autre)

Il n'y a pas de critère particulier mais le nombre de colonne varie d'une feuille à l'autre.

Voilà j'espère avoir répondu à tes interrogations.
Merci pour ton temps passé et bon courage.
0
jullian jacques
19 mai 2009 à 15:33
C'est super t géant
j'aurai du vraiment y penser c quasiment la base. J'ai encore beaucoup à apprendre.
Merci encore

Est ce que tu voudrais bien me donner ton nom pour que je puisse te citer parmi ceux qui ont contribué à mon stage?
0
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
19 mai 2009 à 17:44
Re,

Excel est monstrueux de possibilités que l'on peut traiter de façon basique et très élaborée, il suffit de vouloir apprendre

N'oublis pas de porter ton statut en résolu en haut de ton post ou demande à un modérateur de le faire pour toi en cliquant sur le triangle jaune en haut de ton post
Récupéres la pièce jointe pour ce que tu m'a demandé et dis moi dès que tu l'auras récupéré

http://dl.free.fr/getfile.pl?file=/PC0zOmbE


A+
Mike-31

Un problème sans solution est un problème mal posé  (Einstein)
0
jullian jacques
19 mai 2009 à 18:14
Merci pour tout encore une fois, c bon j'ai tout récupéré.
Bonne continuation
0