Enregistrer des données dans une nouvelle ligne

dimitri59

XLDnaute Nouveau
Bonjour,

Je cherche à créer une macro associer à un bouton qui me permette d'enregistrer les données contenus dans une feuille1 vers une feuille2.

Pour détailler,

En cliquant sur mon bouton une première fois,
Copier la valeur contenue dans A1 Feuil1
Coller cette valeur dans A1 Feuil2
Copier la valeur contenue dans C3 Feuil1
Coller cette valeur dans B1 Feuil2

En cliquant sur mon bouton une deuxième fois,
Copier la valeur contenue dans A1 Feuil1
Coller cette valeur dans A2 Feuil2
Copier la valeur contenue dans C3 Feuil1
Coller cette valeur dans B2 Feuil2

En cliquant sur mon bouton une troisième fois,
Copier la valeur contenue dans A1 Feuil1
Coller cette valeur dans A3 Feuil2
Copier la valeur contenue dans C3 Feuil1
Coller cette valeur dans B3 Feuil2

Etc...

Quelqu'un a-t-il une idée?

Merci
 

Robert

XLDnaute Barbatruc
Re : Enregistrer des données dans une nouvelle ligne

Bonjour Dimitri, bonjour le forum,

En pièce jointe un exemple...
 

Fichiers joints

dimitri59

XLDnaute Nouveau
Re : Enregistrer des données dans une nouvelle ligne

Salut Robert,

Je te remercie pour ton code, c'est ce qu'il me fallait.
Par contre, je me demande si ça va fonctionner dans tous les cas et éventuellement voir, si on peut simplifier.

Je m'explique, car je pense n'avoir pas pas assez détaillé la problématique :
Pour chaque enregistrement, toutes les données que je vais chercher Feuil 1, en cellule A1, B3, C3, D3, B5, C5, D5, E5, F5, G5..., sont recopiées sur une seule et même ligne en Feuil 2. Peut-on simplifier la programmation?
Que se passe-t-il si une case est vide lors de l'enregistrement? Est-ce que je ne risque pas de décaler mes valeurs pour les enregistrements suivants?

En tout cas, merci pour le coup de pouce.

Dimitri:) :)
 

Robert

XLDnaute Barbatruc
Re : Enregistrer des données dans une nouvelle ligne

Bonjour Dimitri, bonjour le forum,

Oui on peut simplifier mais es-tu sûr que tu ne vas pas encore rajouter des cellules ? Je te fais ça dès que j'ai un moment...
 

dimitri59

XLDnaute Nouveau
Re : Enregistrer des données dans une nouvelle ligne

Salut Robert,

Non, a priori on ne rajoute pas de cellule (je pense que tout a bien été ficelé dès le départ). De toute façon, je pourrais modifier le code par la suite..

J'attends de tes news pour le code.

A+ et bonne journée:) :)
 

dimitri59

XLDnaute Nouveau
Re : Enregistrer des données dans une nouvelle ligne

J'ai noté un problème que je n'avais pas testé : :eek:
La fonction recopie le contenu de la cellule mais pas la valeur. Quelle ligne de code faut-il modifier pour l'obtenir? Je me retrouve avec les copies de mes formules plutôt qu'avec les valeurs.

Merci

Dimitri:)
 

Robert

XLDnaute Barbatruc
Re : Enregistrer des données dans une nouvelle ligne

Bonjour Dimitri, bonjour le forum,

Essaie ce code :

Code:
Private Sub CommandButton1_Click()
Dim ori As Range 'déclare la variable ori
Dim cel As Range 'déclare la variable cel
Dim dest As Integer 'déclare la variable dest
Dim tabl() As Variant 'déclare le tableau de valeurs tabl
Dim x As Integer 'deçlare la variable x
 
Set ori = Application.Union(Range("A1"), Range("B3:D3"), Range("B5:G5")) 'définit la variable ori
 
If Sheets("Feuil2").Range("A1") = "" Then 'Condition : si A1 est vide
    dest = 1 'définit la variable dest
Else 'sinon
    dest = Sheets("Feuil2").UsedRange.End(xlDown).Rows.Count + 1 'définit la variable dest
End If 'fin de la condition
ReDim tabl(ori.Cells.Count) 'redimensionne le tableau de valeurs tabl
 
'**************************************
'remplissage du tableau de valeurs tabl
'**************************************
x = 0 'de'finit la variable x
For Each cel In ori 'boucle sur toutes les cellules de la plage ori
    tabl(x) = cel.Value
    x = x + 1
Next cel
 
'*******************************************
'copie des valeurs du tableau tabl en Feuil2
'*******************************************
For x = 0 To UBound(tabl, 1)
    Sheets("Feuil2").Cells(dest, x + 1).Value = tabl(x)
Next x
 
End Sub
 

dimitri59

XLDnaute Nouveau
Re : Enregistrer des données dans une nouvelle ligne

Salut Robert,

J'ai testé ton code et je rencontre 2 problème :
1) Les valeurs sont copiés systématiquement en A1 quand je clique sur le bouton
2) Je n'arrive pas à décaler la copie des valeurs afin que celle-ci se fasse en cellule G1

Peux tu m'éclairer sur ce que fait la fonction :
For x = 0 To UBound(tabl, 1)

Et, à titre informatif (une idée pour un autre projet), sur le premier code, que faudrait-il faire pour copier la valeur de la cellule et non la cellule elle-même? je suppose qu'il doit y avoir un .value quleque part mais je ne m'y connais pas bcp.

Merci

Dimitri:)
 

Robert

XLDnaute Barbatruc
Re : Enregistrer des données dans une nouvelle ligne

Bonsoir Dimitri, bonsoir le forum,

Ha je suis bien content de t'avoir trouvé car depuis que le poulpe est parti, ce forum manquait de comiques...

Non, a priori on ne rajoute pas de cellule (je pense que tout a bien été ficelé dès le départ)
Et si tu disais clairement ce que tu veux... Ça m'éviterait de faire et refaire des codes qui ne conviennent pas. Je sais pas moi ! Un petit fichier exemple, bien ficelé lui aussi... Du style je veux copier les cellules (ta liste de cellules) de l'onglet Feuil1 dans l'onglet Feuil2 à partir de la cellule (ta cellule), ligne par ligne les unes en dessous des autres. Trop dur ?

Autre chose, quand tu ne connais pas un mot de VBA, tu peux dans VBE, le sélectionner et appuyer la touche F1. Une rubrique d'aide s'affiche. Comme je suis colère je te fais un copier/coller :

UBound, fonction

Renvoie une valeur de type Long contenant le plus grand indice disponible pour la dimension indiquée d'un tableau.
Syntaxe
UBound(arrayname[, dimension])
La syntaxe de la fonction UBound comprend les éléments suivants :
ÉlémentDescriptionarraynameNom de la variable de tableau. Respecte les conventions standard d'affectation de noms aux variables. dimensionFacultatif. Donnée de type Variant (Long). Nombre entier définissant la dimension dont la limite supérieure est renvoyée. Utilisez 1 pour la première dimension, 2 pour la deuxième, etc. Si l'argument dimension est omis, la valeur supposée est 1.

Remarques
La fonction UBound est utilisée avec la fonction LBound pour déterminer la taille d'un tableau. Utilisez la fonction LBound pour connaître la limite inférieure d'une dimension de tableau.
La fonction UBound renvoie les valeurs ci-dessous pour un tableau dont les dimensions sont les suivantes :
Dim A(1 To 100, 0 To 3, -3 To 4)
UBound(A, 1) = 100 / UBound(A, 2) = 3 / UBound(A, 3) = 4
Et pour finir dans le code de la version V1 il faudrait remplacer ces deux lignes :
Code:
[COLOR=black]Range("A1").Copy Destination:=dest1 'copie C3[/COLOR]
[COLOR=black]Range("C3").Copy Destination:=dest2 'copie C3[/COLOR]
Par ceci :
Code:
[COLOR=black]Range("A1").Copy[/COLOR]
[COLOR=black]dest1.PasteSpecial (xlPasteValues)[/COLOR]
[COLOR=black]Range("C3").Copy[/COLOR]
[COLOR=black]dest2.PasteSpecial (xlPasteValues)[/COLOR]
 
[COLOR=black]Application.CutCopyMode = False[/COLOR]
 

dimitri59

XLDnaute Nouveau
Re : Enregistrer des données dans une nouvelle ligne

Salut Robert,

Merci pour le compliment, il est vrai que je ne manque pas d'humour...:)
Effectivement, la formulation de ma demande aurait pu être plus précise. A ma décharge, je dirai qu'il y a eu 3 points de départ relatif à des projets différents.

Je vais suivre tes explications et me mettre à découvrir VBA.

Merci pour les conseils en tout cas.


Dimitri:)
 

Discussions similaires


Haut Bas