Tableau croisé dynamique ne prend pas en compte valeurs issues de Userform

Bonjour à tous,

J'espère que vous avez passé de bonnes vacances.
Je reviens vers vous car j'ai un soucis avec mon tableau croisé dynamique.

J'ai un useform qui permet déclarer des incidents qualité, le technicien remplit les différentes Textbox et vient créer une ligne avec toutes les informations.

J'ai créé un tableau croisé dyn pour étudier les stats, sauf qu'il ne prend pas en compte les valeurs issues de ce userform quand je l'actualise.
Par contre, quand je viens manuellement inscrire les valeurs dans les cellules, il les ajoute dans le tableau lors de l'actualisation.

Sauriez-vous comment résoudre ce problème?

Bonjour

Sans voir comment le code remplit le tableau source, on ne peut rien déduire

Bonjour,

Le code n'est rien d'autre que Range("L" & Ligne).Value = TextBox5

Mais voici le code complet :

Private Sub Enregistrer_Click()

Dim Ligne As Integer
Dim Ligneprec As Integer
Dim NumClaim As String
Dim num As Integer
Dim numéro As String
Dim CelluleTrouvee As Range
Dim fournisseur As String
Dim numfournisseur As String

Worksheets("Fournisseurs").Activate

'Placer le nouvel enregistrement à la première ligne de tableau non vide
Ligne = Sheets("Fournisseurs").Range("a65536").End(xlUp).Row + 1
Ligneprec = Ligne - 1 'Ligne précédent Ligne
NumClaim = (Range("A" & Ligneprec).Value) 'Récup N° Frn
num = Right(NumClaim, 3) 'Récup des 3 dernier digit
num = num + 1
numéro = Format(num, "000")

'Remplir feuille Réclamations fournisseurs
Range("E" & Ligne).FormulaLocal = "=AUJOURDHUI()"
Range("B" & Ligne).Value = Month(Date)
Range("C" & Ligne).Value = Year(Date)
Range("D" & Ligne).Value = Format(Date, "WW")
Range("A" & Ligne).Value = "Frn-" & Year(Date) & "-" & numéro
Range("A" & Ligne).Font.Color = RGB(91, 155, 213)
Range("A" & Ligne).Font.Underline = xlUnderlineStyleSingle
Range("F" & Ligne).Value = TextBox1 'N° Commande/Livraison
Range("G" & Ligne).Value = TextBox2 'Référence pièce
Range("H" & Ligne).Value = TextBox3 'Désignation
Range("I" & Ligne).Value = ComboBox1 'Fournisseur
fournisseur = ComboBox1.Value
'MsgBox (fournisseur)

With Worksheets("Données")
Set CelluleTrouvee = .Range("A2:A100").Find(fournisseur, LookIn:=xlValues, lookat:=xlWhole)
If Not CelluleTrouvee Is Nothing Then
numfournisseur = CelluleTrouvee.Offset(0, 1).Value
'MsgBox (numfournisseur)
Else
MsgBox "Fournisseur : " & fournisseur & " non trouvé"
End If
End With

Range("J" & Ligne).Value = numfournisseur 'N° Fournisseur
Range("K" & Ligne).Value = TextBox4 'Problème
Range("L" & Ligne).Value = TextBox5 'Qté Refusée
Range("M" & Ligne).Value = TextBox6 'Qté Dérogée

'Ajuster largeur colonnes
With Sheets("Fournisseurs")
.Range("A:J").Columns.AutoFit
End With

MsgBox ("Réclamation enregistrée")
PageRéclamation.Hide
Accueil.Show

End Sub

Bonjour à tous ...

  1. est-ce que tes données sont au format tableau excel ?
  2. dans ton TCD, y a t-il des données numériques ? dans ce cas, tu dois transformer tes textbox en valeurs numériques

Bref, ton code est une chose, mais le fichier excel aurait permis de mieux cerner le sujet

RE

Tu as 2010 : il serait temps de te mettre aux tableaux structurés (ListObjects) et de coder en conséquence, ce qui simplifie nettement

Depuis 13 ans Excel a plus d'un million de lignes : Range("a65536").End(xlUp) date...

Ta fonction Format(Date, "WW") donne la semaine américaine et non la semaine ISO utilisée en France

Si je reformule ton souci : ton code inscrit bien les données du UserForm sur les onglets mais le TCD ne prend pas la ligne en compte ?

Comment est définie la source du TCD ?

Edit : salut Steelson, pas raffraichi pendant que je regardais le code

Hello Chris,

je me dis quand même outre tes remarques pertinentes que si le TCD prend les valeurs manuelles et pas celles issues du userform, c'est qu'il y a aussi probablement un problème de format de données car les userform ne sont que textuels (ce que j'ai toujours regretté du reste) !

bien vu sur le WW ce que je ne savais pas ! merci

Bonjour,

Effectivement cela fonctionne avec
Range("L" & Ligne).Value = CDbl(TextBox5.Text)

Par contre, cela renvoie une incompatibilité de Type lorsque que le Textbox est vide.

Hors il y a une quantité refusée et une dérogée. J'ai besoin de garder les deux champs car on peut avoir un cas où les deux quantités sont remplies.

Connaissez vous un moyen pour régler le problème du TextBox vide?

Chris, je ne m'y connais pas en ListObjects, j'irai voir comment cela fonctionne.

Quelle est la différence entre la semaine américaine et ISO? (je viens de chercher sur Google sans trouver)

Oui je devrais utiliser un autre système que le Range("a65536").End(xlUp), mais je n'ai jamais eu besoin de plus de 1000 lignes, je n'ai jamais cherché à faire autrement..

essaie ceci ...

Range("L" & Ligne).Value = iif(TextBox5.Text="";"";CDbl(TextBox5.Text))

ou 0 à la place de ""

Quelle est la différence entre la semaine américaine et ISO? (je viens de chercher sur Google sans trouver)

le 1er janvier 2021 ... !

  • semaine 1 pour les américains
  • semaine 53 en ISO

Pourquoi ? parce que le 1er janv 2021 sera un vendredi. La norme ISO considère que la semaine commence un lundi et qu'il faut une majorité de jour de l'année considérée. Or en 2021 il n'y aura que 3 jours : vendredi, samedi, dimanche.

Idem en 2022 et en 2023 ... j'ai eu un jour un consultant qui m'a planté lors d'un changement d'année en planification !

En fait cela se produit 3 années sur 7 environ !

Oui je devrais utiliser un autre système que le Range("a65536").End(xlUp), mais je n'ai jamais eu besoin de plus de 1000 lignes, je n'ai jamais cherché à faire autrement..

Range("A" & rows.count).end(xlup)

Ah je ne savais pas, merci pour cette explication. Effectivement cela peut poser des problèmes.

Pour le code, j'ai essayé Range("M" & Ligne).Value = IIf(TextBox6.Text = "", "", CDbl(TextBox6.Text)), les ; me posant un problème de séparateur.

Mais cela ne fonctionne pas, les données sont bien inscrites mais pour les textboxs vides, j'ai toujours l'incompatibilité de type

les ; me posant un problème de séparateur.

en effet, il s'agit d'une virgule et non d'un point-virgule

mais sans fichier, c'est toujours sans filet de sécurité !

Voila le fichier, ça sera effectivement plus simple.
Je pensais que la proposition précédente fonctionnerait

13test4.xlsm (291.20 Ko)

Modules verrouillés...

projet inaccessible (se ferme de suite sur erreur)

mot de passe sur VBA

je passe mon tour ...

je n'avais pas vu la remarque de Chris

Le mot de passe est VBA.

Le projet se ferme sur erreur? je n'ai pas de problème sur mon pc.

Tant pis, je reprendrais manuellement les données pour que cela passe dans le tableau croisé dyn.

Merci pour votre aide, et bonne journée

re

If Not TextBox5.Text = "" Then Range("L" & Ligne).Value = CDbl(TextBox5.Text)
Range("D" & Ligne).Value = Format(Date, "WW", 2, 2)

Ah merci, ça fonctionne parfaitement!

Merci pour votre aide!

Rechercher des sujets similaires à "tableau croise dynamique prend pas compte valeurs issues userform"