Transmission de lignes Excel en fin de liste
Résolu
Pino
-
Pino -
Pino -
Bonjour,
Je dois lier deux feuilles entre elles selon un système que je n'arrive pas à mettre en place. Sur la feuille 1, j'ai un formulaire duquel je peux tirer un tableau de données. Ce tableau contient des lignes dont chacune correspond à une opération (au sens atelier, pas mathématique), validée ou non par l'utilisateur. Cela implique que pour une saisie on pourra avoir 3 lignes et pour la suivante 6... Il faudrait que par une interaction de l'utilisateur (exemple : clic sur un bouton "Générer"), ces lignes soient copiées sur ma feuille 2. Le truc, c'est que ces lignes doivent être copiées à partir de la première ligne libre et non en supression des précédentes.
Une autre question concernait le fait de pouvoir choisir, dans une liste de lignes (exemple listes d'opérations), certaines lignes à copier vers ue autre feuille et à ajouter en fin de liste. Ainsi, je choisis la ligne 4, 9 et 13 de ma première liste qui vont se copier sur ma feuille 2 à la ligne 1, 2 et 3.
Je n'ai aucune idée de comment réaliser ces systèmes, étant mécanicien et non informaticien et pas franchement à l'aise avec Excel. De plus je n'ai aucune expérience de VBA.. Bref, je ne demande pas un code complet ou quoi, mais juste si quelqu'un de plus experimenté que moi peut me dire si ce que je souhaite est effectivement réalisable, si oui par quel moyens (noms de fonctions VBA si besoin est, ou quoique ce soit d'utile), je ferais bien entendu les recherche moi-même derrière ! ;)
Merci d'avance de votre aide !
Je dois lier deux feuilles entre elles selon un système que je n'arrive pas à mettre en place. Sur la feuille 1, j'ai un formulaire duquel je peux tirer un tableau de données. Ce tableau contient des lignes dont chacune correspond à une opération (au sens atelier, pas mathématique), validée ou non par l'utilisateur. Cela implique que pour une saisie on pourra avoir 3 lignes et pour la suivante 6... Il faudrait que par une interaction de l'utilisateur (exemple : clic sur un bouton "Générer"), ces lignes soient copiées sur ma feuille 2. Le truc, c'est que ces lignes doivent être copiées à partir de la première ligne libre et non en supression des précédentes.
Une autre question concernait le fait de pouvoir choisir, dans une liste de lignes (exemple listes d'opérations), certaines lignes à copier vers ue autre feuille et à ajouter en fin de liste. Ainsi, je choisis la ligne 4, 9 et 13 de ma première liste qui vont se copier sur ma feuille 2 à la ligne 1, 2 et 3.
Je n'ai aucune idée de comment réaliser ces systèmes, étant mécanicien et non informaticien et pas franchement à l'aise avec Excel. De plus je n'ai aucune expérience de VBA.. Bref, je ne demande pas un code complet ou quoi, mais juste si quelqu'un de plus experimenté que moi peut me dire si ce que je souhaite est effectivement réalisable, si oui par quel moyens (noms de fonctions VBA si besoin est, ou quoique ce soit d'utile), je ferais bien entendu les recherche moi-même derrière ! ;)
Merci d'avance de votre aide !
A voir également:
- Transmission de lignes Excel en fin de liste
- Liste déroulante excel - Guide
- Excel liste déroulante en cascade - Guide
- Partage de photos en ligne - Guide
- Aller à la ligne excel - Guide
- Mise en forme conditionnelle excel - Guide
2 réponses
Bonjour,
Votre projet est tout à fait réalisable, par vba, avec quelques notions de base...
Je peux vous y aider sans souci.
Etes vous déjà allé dans l'éditeur VBE?
On va essayer juste pour "rire" de créer une petite macro inutile.
Sous une feuille excel tapez ALT+F11, ça y est, vous êtes dans l'éditeur VBE...
Insertion/Module
Une "page" blanche s'affiche dans la fenêtre centrale.
Ecrivez dans cette page le code suivant : [les lignes commençants par une apostrophe sont des commentaires pour ta compréhension, ils apparaitront en vert dans l'éditeur]
Pour lancer cette macro, fermez Visual Basic Editor et, sous votre feuille excel tapez ALT + F8, sélectionnez MaPremiereMacro et cliquez sur Exécuter.
Ceci est juste pour vous familiariser avec l'environnement...
Les codes que vous aurez besoin de connaitre sont, pour l'essentiel :
première ligne vide (colonne A) :
Copier / coller : Copy Paste
Etc...
Tu dis!
Votre projet est tout à fait réalisable, par vba, avec quelques notions de base...
Je peux vous y aider sans souci.
Etes vous déjà allé dans l'éditeur VBE?
On va essayer juste pour "rire" de créer une petite macro inutile.
Sous une feuille excel tapez ALT+F11, ça y est, vous êtes dans l'éditeur VBE...
Insertion/Module
Une "page" blanche s'affiche dans la fenêtre centrale.
Ecrivez dans cette page le code suivant : [les lignes commençants par une apostrophe sont des commentaires pour ta compréhension, ils apparaitront en vert dans l'éditeur]
'ouverture de la procédure, on lui donne ici son nom 'plus le nom sera explicite, mieux ce sera Sub MaPremiereMacro() 'le cas échéant, on déclare, à cet endroit, les variables 'ici on va avoir besoin d'une variable "String" = chaine de caractères Dim Resultat As String 'On lance un message à l'utilisateur, celui-ci ne pourra répondre que oui ou non Resultat = MsgBox("Etes vous de bonne humeur ce matin?", vbYesNo, "Questionnement") 'On teste maintenant la réponse de l'utilisateur 's'il a cliqué oui, la messageBox a affecté à notre variable Resultat la valeur : "vbYes" 'Donc en fait, on va tester la valeur de cette variable : If Resultat = vbYes Then 'Si l'utilisateur a cliqué "oui" on envoie un message simple : MsgBox "Tant mieux pour vous" Else 'sinon 's'il a cliqué "non" on envoie un message différent MsgBox "Et bien allez vous recoucher" End If 'fin de la macro End Sub
Pour lancer cette macro, fermez Visual Basic Editor et, sous votre feuille excel tapez ALT + F8, sélectionnez MaPremiereMacro et cliquez sur Exécuter.
Ceci est juste pour vous familiariser avec l'environnement...
Les codes que vous aurez besoin de connaitre sont, pour l'essentiel :
première ligne vide (colonne A) :
Dim PremiereLigneVide As Long PremiereLigneVide = Range("A65536").End(xlUp).Row + 1 Cells(PremiereLigneVide, 1).Select
Copier / coller : Copy Paste
Etc...
Tu dis!
Bonjour,
Merci de la réponse ! Ca me sera toujours très utile pour mes bidouillages sur Excel ;)
Néanmoins une réponse à mon problème a été apportée par aragorn88 sur les forums du site du zéro, hier.
La macro est la suivante, s'il y en a que ça peut aider après moi :
Sub Copier_coller(ligne As Integer)
'copie et colle les lignes non vides
'argument ligne = première ligne vide de la feuille de destination
With Worksheets("Feuil1")
'mise en place du filtre pour supprimer les lignes vides
'arbitrairement les cellules à copier sont entre C5 et E16
'ce qui signifie entête de colonnes en C4:E4
.Range("C4:E16").AutoFilter Field:=1, Criteria1:="<>"
'copier et coller
'les entêtes des colonnes sur la feuille 2 sont en ligne 1
'on colle sur les colonnes A et suivantes
.Range("C5:E16").Copy _
Destination:=Worksheets("Feuil2").Range("A" & ligne)
'supprimer le filtre
.AutoFilterMode = False
End With
End Sub
Function RechercheLigne() As Integer
'recherche et renvoi la première ligne vide dans
'la zone de copie des lignes
Dim ligne As Integer
ligne = 1
'les entêtes des colonnes sur la feuille 2 sont en ligne 1
'on colle sur les colonnes A et suivantes
With Worksheets("Feuil2")
While .Range("A" & ligne).Value <> ""
ligne = ligne + 1
Wend
End With
RechercheLigne = ligne
End Function
Sub Bouton1_Clic()
Application.ScreenUpdating = False
Dim ligne As Integer
ligne = RechercheLigne()
Copier_coller (ligne)
Application.ScreenUpdating = True
End Sub
Voilà, merci quand même pour la réponse, et au plaisir ! ;)
Merci de la réponse ! Ca me sera toujours très utile pour mes bidouillages sur Excel ;)
Néanmoins une réponse à mon problème a été apportée par aragorn88 sur les forums du site du zéro, hier.
La macro est la suivante, s'il y en a que ça peut aider après moi :
Sub Copier_coller(ligne As Integer)
'copie et colle les lignes non vides
'argument ligne = première ligne vide de la feuille de destination
With Worksheets("Feuil1")
'mise en place du filtre pour supprimer les lignes vides
'arbitrairement les cellules à copier sont entre C5 et E16
'ce qui signifie entête de colonnes en C4:E4
.Range("C4:E16").AutoFilter Field:=1, Criteria1:="<>"
'copier et coller
'les entêtes des colonnes sur la feuille 2 sont en ligne 1
'on colle sur les colonnes A et suivantes
.Range("C5:E16").Copy _
Destination:=Worksheets("Feuil2").Range("A" & ligne)
'supprimer le filtre
.AutoFilterMode = False
End With
End Sub
Function RechercheLigne() As Integer
'recherche et renvoi la première ligne vide dans
'la zone de copie des lignes
Dim ligne As Integer
ligne = 1
'les entêtes des colonnes sur la feuille 2 sont en ligne 1
'on colle sur les colonnes A et suivantes
With Worksheets("Feuil2")
While .Range("A" & ligne).Value <> ""
ligne = ligne + 1
Wend
End With
RechercheLigne = ligne
End Function
Sub Bouton1_Clic()
Application.ScreenUpdating = False
Dim ligne As Integer
ligne = RechercheLigne()
Copier_coller (ligne)
Application.ScreenUpdating = True
End Sub
Voilà, merci quand même pour la réponse, et au plaisir ! ;)