XL 2013 Conception d'un bouton remplissage ligne/colonne

A2pFlo

XLDnaute Nouveau
Bonjour,

J'ai créer le petit bouton suivant :

Code:
Private Sub CommandButton1_Click()
Dim i As Integer
i = Worksheets("Poids").Range("A65536").End(xlUp).Row + 1
    If i <> Empty Then
        Sheets("Poids").Range("A" & i) = TextBox1.Value
    Else
        Sheets("Poids").Range("A" & i + 1) = TextBox1.Value
End If
Unload Me
End Sub
Qui me permet de rentrer une valeur (texte ou nombre) et de l'insérer dans une autre feuille.
Actuellement le bouton permet d'enregistrer plusieurs valeurs les une à la suite des autres.
La fonction que j'aimerais obtenir est la suivante :

Au click on entre une valeur qui s'enregistrera dans une cellule (quelconque)
à partir de cette valeur à chaque nouveau click les nouvelles valeurs s'enregistrerons sur la colonne voisine, jusqu'à la cinquième colonne.
Arrivé à la cinquième colonne on passe à la ligne du dessous et on répète les étapes précédentes. (si la première cellule était B5 la sixième valeur ce trouverai donc sur B6).
jusqu'à un nombre de ligne définis.

Mes problèmes sont les suivant:
Je n'arrive pas à enregistrer les valeurs d'une colonne à une autre.
Je suppose que pour répéter l'expérience plusieurs fois je vais devoir utiliser une boucle For ou While mais je n'arrive pas à l'écrire (quand je le fais ça me remplis toutes les lignes colonnes...).

Je débute dans le langage VBA si vous avez des conseils et/ou suggestions je suis preneurs.
Merci d'avance !

Florian
 

vgendron

XLDnaute Barbatruc
Bonjour et bienvenu

pour commencer, il faudrait que tu postes un fichier exemple avec quelques data (NON confientielles) qui nous permettent de bien voir et comprendre la structure de ton fichier final

ajouter le résultat attendu, en explicitant le qui quoi comment

enfin,
cette ligne
i = Worksheets("Poids").Range("A65536").End(xlUp).Row + 1
va TOUJOURS te renvoyer quelque chose.. si ta feuille est vide; ce sera 2
si il y a des data, ce sera la dernière ligne NON vide +1
d'ou ce test inutile en l'état
If i <> Empty Then
Sheets("Poids").Range("A" & i) = TextBox1.Value
Else
Sheets("Poids").Range("A" & i + 1) = TextBox1.Value
End If

peut etre voulais tu vérifier le contenu de la cellule Ai ?
 

A2pFlo

XLDnaute Nouveau
Bonjour,

Merci pour tas réponse j'ai joint au message mon fichier.
J'y ai joint également le résultat que j'attend de mon bouton.

A chaque clique du bouton on entre une valeur dans la boite de texte qui insère cette valeur dans une case choisie dans le tableau ( la case sera pré-définie dans le programme).
Ensuite au clique suivant on viendra inscrire une nouvelle valeur qui sera inséré à la droite de la première cellule. Ainsi de suite sur X colonne.(un nombre de colonne défini dans le programme également) une fois arrivé au bout on passe à la ligne du dessous et on répète l'opération.

Pour te répondre : Je souhaitais vérifier la case Ai en effet (j'en aurais besoin par la suite) mais pour être honnête je ne pensait pas que "i = Worksheets("Poids").Range("A65536").End(xlUp).Row + 1" faisait déjà cette vérification. Heureux hasard on va dire ^^.

Merci pour tas réactiviter

Florian
 

Fichiers joints

vgendron

XLDnaute Barbatruc
Hello
essaie ceci
VB:
Private Sub CBValider_Click()
Dim i As Integer
CelDebut = "C5" 'info à modifier par l'utilisateur
NbMaxColonnes = 5 'info à modifier par l'utilisateur

LigneDebut = Sheets("Poids").Range(CelDebut).Row 'récupère le numéro de ligne de la CelDebut
ColonneDebut = Sheets("Poids").Range(CelDebut).Column 'récupère le numéro de colonne de la CelDebut

With Sheets("Poids")
    LigneDest = .Cells(.Rows.Count, ColonneDebut).End(xlUp).Row 'on récupère la dernière ligne du tableau
    ColonneDest = .Cells(LigneDest, .Columns.Count).End(xlToLeft).Column + 1 'on récupère la dernière colonne du tableau
    If .Range(CelDebut) = "" Then 'si la cellule de départ est vide on la remplit
        .Range(CelDebut) = TextBox1.Value
    ElseIf ColonneDest < ColonneDebut + NbMaxColonnes Then 'si le nombre maxi n'est pas atteint sur la ligne on inscrit à coté
        .Cells(LigneDest, ColonneDest) = TextBox1.Value
    Else 'sinon, on passe à la ligne et on inscrit à gauche
        LigneDest = LigneDest + 1
        .Cells(LigneDest, ColonneDebut) = TextBox1.Value
    End If

End With
Unload Me
End Sub
 

A2pFlo

XLDnaute Nouveau
Salut,

A part parfait je n'ai rien à dire ^^
C'est exactement le résultat auquel je voulais parvenir.
J'aurais une question (qui va paraître un peu bête mais que je n'ai pas trouver dans les tutos) concernant l'écriture, l'opérateur point (.) que tu utilise dans les lignes de codes. Quel est son rôle ?

Merci beaucoup pour ton aide!

Florian
 

vgendron

XLDnaute Barbatruc
Hello

le (.) est une sorte de raccourci:
on est dans un bloc With - End with
le (.) remplace sheets("Poids")
ca évite de le réécrire à chaque fois
et l'intérêt du with end with, c'est que pour écrire dessus, la feuille "Poids" n'a pas besoin d'être la feuille active (celle qui est affichée à l'écran)
 
Haut Bas