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 SubLa 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 SubA+
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 SubMerci à tous pour vos réponses !!!!!!!!!!!!!!!!!!!!!!!!!!