Mettre la valeur de la cellule sur la même ligne de saisie

Bonjour j'ai un problème quand je lance mon formulaire et que j'entre mes données toutes mes données se mettent sur la ligne de ma base de données sauf la valeur du poids qui se met dans la bonne colonne mais pas sur la ligne qui vient d'être renseigné.

Et je n'arrive pas a trouver une solution pour mettre ma valeur sur la ligne correspondante au fur et à mesure de la saisie des données

image image

Bonjour,

En mettant un point d'arrêt sur le dernier Plg.Offset que vous renvoie la fenêtre d'exploration des variables pour la valeur de trouvecellule ?

Peut-être un fichier à nous proposer ?

Cdlt,

Oui j'ai un fichier

Bonjour à tous,

Pour poster du code, vous pouvez utiliser les balises </> du ruban d'icônes. C'est plus simple à modifier qu'une image .

Je comprends que vous avez un tableau structuré ? Il faut essayer de coder par rapport à ce tableau. Je pense que c'est la raison du problème car le résultat de votre fonction ne tient pas compte du tableau structuré...

function trouvecellule(NomTableau as string, scherche as string) as range
set trouvecellule = range(NomTableau).find(scherche)
end function

A utiliser ainsi ensuite :

set rtrouve = trouvecellule("_baseMétaux", ComboBox_cat.value)
if not rtrouve is nothing then
    rtrouve.value = cdbl(...)
...
end if

Edit : Je viens de regarder le fichier... Donc j'ai l'impression que vous cherchez une colonne en fait... La fonction trouvecellule est donc à oublier et il faut une fonction trouvecolonne à la place. Mais il faut un tableau structuré avant tout !

function NColonne(NomTableau as string, scherche as string) as long
NColonne = application.match(scherche, range(NomTableau).rows(0), 0)
end function

Cdlt,

Merci,

par contre dès que j'entre mes valeurs de poids les valeurs s'affichent dans les entêtes au lieu de la ligne de saisie ?

Et quand vous dites tableau structuré il faudrait que je le modifie ?

Bonjour à tous, bonjour 3GB,

Un essai. vous n'avez pas besoin de la fonction trouvecellule.

J'en ai profité pour modifier les propriétés du combox afin que vous n'ayez pas besoin de cette fonction, vous ne pouvez pas sélectionner autre chose qu'un matériel déjà présent sur le tableau, comme ça pas besoin de gestion d'erreur.

Bonne journée.

Oui, c'est normal, j'ai répondu avant de voir votre fichier et j'ai pensé que baseMetaux était le nom d'un tableau structuré...

Voici donc une proposition nécessitant toutefois pas mal de réorganisations :

- mettre les données sous forme de tableau structuré et le nommer "Base",

- enlever les textbox inutiles et les remplacer par des labels,

- bien nommer toutes les textbox et combobox qui seront reportées dans la base : elles doivent contenir un "_" (avec le code ci-dessous mais il est possible d'ajuster et de trouver un autre dénominateur commun). Les autres, qui ne seront pas archivées, ne doivent pas contenir le dénominateur commun. Il faut aussi changer l'ordre de tabulation des contrôles de manière à reporter dans les bonnes cases les données. Et changer un peu la disposition de certains de ces contrôles ne ferait pas de mal.

Voici un code :

Private Sub CommandButton_ajout_click()

Dim t(), ctrl As Control, n&, col&, nvl&

For Each ctrl In Me.Controls 'pour chaque control
    If ctrl.Name Like "*_*" Then 'si le control contient "_"
        n = n + 1: ReDim Preserve t(1 To n) 'on prépare un nouvel item à notre tableau dynamique
        t(n) = ctrl.Value 'il prend la valeur du control en cours
    End If
Next ctrl

With Range("Base") 'avec tab. struc. "Base"
    col = nColonne(TextBox_poids_prod.Value, .Name) 'renvoie la colonne de correspondance
    nvl = .Rows.Count + 1 'nouvelle ligne (nécessite de ne pas avoir de lignes vides)
    .Cells(nvl, 1).Resize(, n - 2) = t 'on colle les valeurs "fixes"
    .Cells(nvl, 12) = t(n - 1) 'observations
    If col > 0 Then .Cells(nvl, col) = CDbl(t(n)) 'poids
End With

End Sub

Voici la fonction à mettre dans un module normal :

Function nColonne(scherche As String, Ref As String) As Long
If Application.CountIf(Range(Ref).Rows(0), scherche) > 0 Then
    nColonne = Application.Match(scherche, Range(Ref).Rows(0), 0)
End If
End Function

Donc le plus important déjà, c'est le tableau structuré. Ensuite le code marchera (mais les données seront pas reportées comme espéré tant que les petites opérations, dont le changement de l'ordre de tablulation, ne seront pas effectuées).

Pour mettre sous forme de tableau structuré, il faut aller sur une cellule du tableau, puis dans Accueil/mettre sous forme de tableau structuré/cochez avec entêtes. Puis, dans le nouvel onglet Création qui apparait (en jaune en principe), allez dans renommer et entrez Base.

Edit : j'ai rajouté les variables pour éviter les erreurs de compilation.

Cdlt,

Merci beaucoup tous fonctionne à merveille.

merci beaucoup!!!!

Bien que ça fonctionne, je vous conseille d'appliquer en parallèle, la méthode de 3GB (que je salue) qui rendra la lecture et la maîtrise du fichier/code plus simple et robuste. Même si ça prend du temps; c'est un investissement pour l'avenir.

Cdlt,

Je te salue aussi Ergotamine !

Je n'ai pas regardé ce que tu as fait. Mais je pense en effet qu'il faut au moins le tableau et les labels... Le reste est moins primordial sans le code qui suit derrière.

Rechercher des sujets similaires à "mettre valeur meme ligne saisie"