Transfert ligne suivante

Bonjour à tous

Je cherche à transférer les données de la feuille "données" à la feuille "base" . Cette dernière est une archive.

Ma difficulté est la suivante, j'aimerai que lorsque j'appuie sur le bouton, les données transfèrent d'une feuille à l'autre , en incrémentant à la ligne suivante. .

Je souhaiterai qu'il y ai un contrôle de la dernière ligne non vide. En me renseignant j'ai appris que des fonctions comme endxlup existaient mais je n'arrive pas à les adapter à mon programme.

Range("base!b65536").End(xlUp).Row

Range("base!b65536").End(xlUp)(2).Row

J'ai bidouillé un morceau de programme en définissant des variables correspondant aux cellules de la feuille "données".

Le problème est que rien ne se passe.

Je demande de l'aide car je n'ai plus d'idée

Merci a vous

Merci d'avance

Julia

PS : Je vous joins un fichier excel pour clarifier ma demande.

Bonjour,

Tu es sur la bonne voie

Utilise la fonction .End(xlUp).Row pour connaitre la dernière non vide.

Merci à toi

Je n'avais pas pensé à déclarer les variables .

Par contre la variable "dernlin" dans l'offset je ne connaissais pas. 8)

Que veut dire cette partie Sheets("base").Range("A" & Rows.Count).End(xlUp).Row ?

Encore une fois merci à toi

Bonjour,

Une autre proposition à étudier.

Cdlt.

Option Explicit

Private Sub CommandButton1_Click()
'Déclaration des variables
Dim ws As Worksheet, tbl, n As Long
    'Tableau des entrées
    tbl = Array([A5], [C5], [E5], [A11])
    'Initialisation variable
    Set ws = Worksheets("base")
    With ws
        'Nouvelle ligne pour la restitution des données
        n = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
        'Définition de la plage de restitution
        .Cells(n, 2).Resize(, 4) = tbl
        With .Cells(n, 1)
            'Compteur
            .Value = .Row - 4
            'Format cellule
            .NumberFormat = "000"
        End With
        .Cells(n, 2).NumberFormat = "m/d/yyyy"
    End With
    Range("A5,C5,E5,A11").ClearContents
End Sub

[quote="julia^^"]Merci à toi

Je n'avais pas pensé à déclarer les variables .

Par contre la variable "dernlin" dans l'offset je ne connaissais pas. 8)

Que veut dire cette partie Sheets("base").Range("A" & Rows.Count).End(xlUp).Row ?

Encore une fois merci à toi[/quote]

Cette ligne de code va chercher le numéro de ligne de la dernière cellule non vide dans la feuille "base" en parcourant la colonne A.

Faut penser à déclarer les variables pour optimiser la mémoire. Avec un petit projet ca va mais quand tu te lances avec un grand projet avec des centaines de variable là tu va voir l'effet.

Bonjour,

Propositions : nommer la base... J'ai nommé Arch la première colonne en incluant l'en-tête (ce qui permet que la plage soit définie dès le départ), nom dynamique qui s'adaptera à l'extension.

On suppose que les en-têtes sont préalablement mises, on ne s'en occupe donc plus par la suite.

J'ai supposé que N° est un numéro d'ordre, incrémenté d'office à partir de 1.

Private Sub CommandButton1_Click()
    Dim Td(4), d, i%
    d = Split("A5 C5 E5 A11")
    For i = 0 To UBound(d)
        If Me.Range(d(i)) <> "" Then
            Td(i + 1) = Me.Range(d(i))
        Else
            MsgBox "Saisir toutes les données demandées !", vbInformation, "Saisie incomplète"
            Exit Sub
        End If
    Next i
    With [Arch]
        Td(0) = .Rows.Count
        .Cells(Td(0) + 1, 1).Resize(, 5).Value = Td
    End With
    With Me
        For i = 0 To UBound(d)
            .Range(d(i)).ClearContents
        Next i
    End With
End Sub

La macro vérifie que toutes les données demandées sont saisies, les prèlève pour les constituer en tableau, ajoute le N° dans le tableau, affecte ce tableau à la ligne suivante de la base, vide la zone de saisie.

Cordialement.

Bonjour Julia,

une proposition à tester et une formule (renseignée ci-dessous) à placer dans 'Données' [A11].

Private Sub CommandButton1_Click()
'
'     FORMULE A PLACER DANS 'Données' EN [A11]
'     =SI(A5<>"";ENT(AUJOURDHUI()-A5)/365;"")
'
Dim wks1, wks2 As Worksheet
'
Set wks1 = Worksheets("Données")
Set wks2 = Worksheets("Base")
'
If [A5] <> "" And [C5] <> "" And [E5] <> "" Then
    With wks2
        iRow = .Range("A" & Rows.Count).End(xlUp).Row + 1
        .Cells(iRow, 1) = iRow - 4
        For x = 1 To 3
            sFlag = Choose(x, "A5", "C5", "E5")
            .Cells(iRow, x + 1) = wks1.Range(sFlag).Value
            wks1.Range(sFlag).Value = ""
        Next
        '=SI(A5<>"";ENT(AUJOURDHUI()-A5)/365;"")
        .Cells(iRow, 5).FormulaLocal = "=SI(B" & iRow & "<>"""";ENT(AUJOURDHUI()-B" & iRow & ")/365;"""")"
    End With
Else
    MsgBox "Vos données ne sont pas complètes !"
End If
'
End Sub

A+

Re,

Et une nouvelle proposition !

Julia est gâtée ce jour.

Cdlt.

Private Sub CommandButton1_Click()
'Déclaration des variables
Dim ws As Worksheet, tbl, n As Long, I As Long
    'Tableau des données d'entrée
    tbl = Array([A5], [C5], [E5], [A11])
    'Check des données d'entrée
    For I = 0 To 3
        If tbl(I) = "" Then MsgBox "Données d'entrée incomplètes !": Exit Sub
    Next I
    'Initialisation variable
    Set ws = Worksheets("base")
    With ws
        'Nouvelle ligne pour la restitution des données
        n = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
        'Restitution dans plage 1 ligne et 4 colonnes
        .Cells(n, 2).Resize(, 4) = tbl
        With .Cells(n, 1)
            'Compteur
            .Value = .Row - 4
            'Format cellule 001, 002, etc...
            .NumberFormat = "000"
        End With
        'Format date dd/mm/yyyy
        .Cells(n, 2).NumberFormat = "m/d/yyyy"
    End With
    'RAZ données d'entrée
    Range("A5,C5,E5,A11").ClearContents
End Sub

Merci à tous pour vos réponses !!!!!!!!!!!!!!!!!!!!!!!!!!

Rechercher des sujets similaires à "transfert ligne suivante"