Transmission de lignes Excel en fin de liste

Résolu
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 !
A voir également:

2 réponses

pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
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]
'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!
0
Pino
 
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 ! ;)
0