Aller à la ligne en conservant les données

Bonjour,

Je suis vraiment novice en VBA !

J'ai créé un fichier EXCEL avec 2 feuilles. Sur la première feuille un formulaire nouveau client que je rempli à chaque nouveau client avec NOM, PRENOM....

Sur la feuille 2 un carnet d'adresse qui conserve les données du formulaire de la feuille 1.

J'ai réussi à faire une macro avec un bouton qui fait cela mais j'aimerais que les données de la feuille 2 soit conservées et que lorsque je rempli à nouveau le formulaire de la feuille 1 les données aille sur la 2ème ligne de ma feuille 2, puis sur la troisième ligne et ainsi de suite

Merci pour votre aide

Bonjour Talbot et bienvenu, bonjour le forum,

Règle d'or en VBA, n'utiliser Select ou Activate que si c'est vraiment indispensable ! Ils ne font que ralentir l'exécution du code et son sources de nombreux bugs. On peut très bien faire un copier coller d'un onglet à l'autre sans aucun Select avec la syntaxe suivante :

Worksheets("Onglet Source").Range("Ta Cellule Source").Copy Worksheets("Onglet Destination").Range("Ta Cellule Destination")

Ça copie tout, valeurs, format etc. Pour ne récupérer la valeur, utilise plutôt :

Worksheets("Onglet Destination").Range("Ta Cellule Destination") = Worksheets("Onglet Source").Range("Ta Cellule Source")

Autre chose, Il existe dans l'éditeur VBE la possibilité de créer des formulaires (UserForm) à ta convenance. Il sont bien plus pratiques à coder qu'un tableau dans un onglet comme tu l'as fait. Enfin moi, j'en suis persuadé...

Le code commenté à affecter au bouton et à compléter :

Sub Macro1()
Dim OF As Worksheet 'déclare la variable OF (Onglet Formulaire)
Dim OL As Worksheet 'déclare la variable OL (Onglet Locataires)
Dim OC As Worksheet 'déclare la variable OC (Onglet Carnet d'adresses)
Dim TL As ListObject 'déclare la variable TL (Tableau structuré Locataires)
Dim R As Range 'déclare la variable R (Recherche)
Dim PL As Integer 'déclare la variable PL (Première Ligne vide)
Dim LI As Integer 'déclare la variable LI (Ligne)

Set OF = Worksheets("Formulaire") 'définit l'onglet OF
Set OL = Worksheets("Locataires") 'définit l'onglet OL
Set OC = Worksheets("Carnet d'adresses") 'définit l'onglet OC
Set TL = OL.ListObjects(1) 'définit le tableau structuré TL
PL = OC.Cells(Application.Rows.Count, "B").End(xlUp).Row + 1 'définit la première ligne vide PL de la colonne "B" de l'onglet OC
Set R = TL.ListColumns(2).Range.Find("") 'définit la recherche R (recherche du vide dans la colonne 2 du tableau structurée TL)
If R Is Nothing Then 'condition : si aucune occurrence trouvée
    TL.ListRows.Add 'ajoute une ligne au tableau structuré TL
    LI = TL.ListRows.Count 'définit la ligne LI (nombre de lignes de TL)
Else 'sinon
    LI = R.Row - TL.HeaderRowRange.Row 'définit la ligne LI (ligne de la première occurrence trouvée - la ligne des en-têtes de TL)
End If 'fin de la condition
TL.DataBodyRange(LI, 2).Value = OF.Range("C4") 'récupère dans la ligne LI, colonne 2 de TL la valeur de C4 de l'onglet OF
OC.Cells(PL, 2).Value = OF.Range("C4").Value 'récupère dans la cellule ligne PL colonne 2 de OC la valeur de la cellule C4 de l'onglet OF
'idem pour les autres données en adaptant les colonnes
'à la fin il te faudra vider le formulaire...
End Sub

Bonsoir Talbot et le forum,

Comme aucune suite n'est donnée à la solution de ThauThème et que le fil n'est pas signalé "Résolu", je me permets de proposer une solution avec un formulaire.
Il y a surement des améliorations à apporter mais en attendant...

Cdt

Papy Henri

3talbot.xlsm (46.30 Ko)

Bonjour Talbot et le forum
Désolé, mon fichier précédent bugue avec les dates.
D'autre part je n'avais pas prévu la saisie dans la feuille "Carnet d'adresses".
Le fichier ci-joint apporte les corrections. Le 2ème formulaire sert à rendre à nouveau disponible le box dont la location est finie, en supprimant le "X" dans la colonne du Tableau3.

3talbot-test2.xlsm (51.53 Ko)

Cdt
Papy Henri

Bonjour,

J'y suis parvenue ; merci pour votre aide si précieuse !

J'ai une nouvelle demande pour parfaire mon travail.

A la fin, j'aimerai que lorsque je veux fermer le document Word qui s'est généré ; alors on me propose systématiquement de l'enregistrer sous un nouveau ficher pour ne pas écraser mon modèle.

Voici la formule que j'ai pour la partie Word :

Application.WindowState = xlMinimized

Set WordApp = CreateObject("Word.Application") 'ouvre session word et le fichier voulu

Set WordDoc = WordApp.Documents.Open("CHEMIN+NOM DE FICHIER.dotm") 'ouvre document Word

Bonjour Talbot
Je suppose que le document word correspond à la facture du locataire. Si c'est le cas, il est plus facile d'utiliser la feuille que j'ai nommée "Facture". Bien entendu il faudra la mettre en forme à votre convenance. Si vous modifier l'emplacement des cellules destinées aux informations, il faudra modifier les macros en conséquence.
Cdt

Papy Henri

5talbot-test3.xlsm (66.61 Ko)
Rechercher des sujets similaires à "aller ligne conservant donnees"