Enregistrer le format d'une valeur textbox en monétaire

gbstyle

XLDnaute Impliqué
Bonjour, voila je souhaiterai lors de l'enregistrement sur mon tableau que le format nombre soit monétaire
ci joint mon bout de code
Private Sub BtnAenregistrer_Click()
Ref = Me.TxtARefArticles
With Sheets("Base_Articles")
Set trouvé = .Range("TblBaseArticles").Columns(1).Find(Ref, lookat:=xlWhole, LookIn:=xlValues)
If trouvé Is Nothing Then 'il s'agit d'un nouvelle articles
derlig = .Range("A" & .Rows.Count).End(xlUp).Row + 1 'on se positionne sur la dernière ligne
Else 'existe déjà
derlig = trouvé.Row
If MsgBox("Souhaitez vous modifier l'article ?", vbYesNo) = vbNo Then Exit Sub
End If

.Range("A" & derlig) = TxtARefArticles
.Range("B" & derlig) = CboAFamille
.Range("C" & derlig) = CboASousfamille
.Range("D" & derlig) = TxtADesignation
.Range("E" & derlig) = CboAFournisseur
.Range("F" & derlig) = TxtALongueurcolisage
.Range("G" & derlig) = TxtALargeurcolisage
.Range("H" & derlig) = TxtAHauteurcolisage
.Range("I" & derlig) = TxtACréele
.Range("J" & derlig) = TxtANotes
.Range("K" & derlig) = TxtADelaislivraison
.Range("L" & derlig) = TxtAFraistransport
.Range("M" & derlig) = TxtAFacturation
.Range("N" & derlig) = CboAModedegestion
.Range("O" & derlig) = TxtAminicommande
.Range("P" & derlig) = TxtAPrixUnitHT ' => données à afficher en format Euros lors de la saisie dans le text box et lors de l'enregistrement que sont format se mette en monétaire dans le tableau source
J'ai essaye un code avec .NumberFormat = "#,##0.00 $" mais je n'y arrive pas, il me manque une déclaration de variable je pense


End With

End Sub

D'avance merci
 

gbstyle

XLDnaute Impliqué
Non la a prioris je n'ai pas de fusion mais des calcul de stock en fonction des mouvement saisie entrée / sortie
je voyais un résultat de ce type en terme de tableau
upload_2018-4-26_10-45-54.png


J'ai juste quelque doute sur comment réussir a définir la formule de calcul en fonction du critère de la feuille mouvement sur entrée +, sortie -, réservé,
 

Dranreb

XLDnaute Barbatruc
Ce sera juste un test, par exemple :
If Détail(…) = "Entrée" Then T(L, 3) = T(L, 3) + Détail(…) Else T(L, 3) = T(L, 3) - Détail(…)
(Mettre les bons n° de colonnes de la base mouvements à la place des "…")
Si vous spécifiez une dernière colonne pour ce critère vous pourrez utiliser la méthode Somme de l'objet SsGr qui contient ces lignes pour n'avoir pas besoin d'explorer vous même sa propriété Co.
Seule celle du SsGr correspondant à la dernière colonne spécifiée contient les valeurs des lignes Détail. Celle de celui de chaque colonne spécifiée devant contient chaque fois l'ensemble des SsGr de la suivante, l'ensemble de la collection renvoyée par la fonction Gigogne contenant ceux de la 1ère colonne spécifiée.
Dans le cas général, la propriété Co d'un SsGr est une collection semblable à la collection complète renvoyée par la fonction. Elles sont emboités les unes dans les autres comme des poupées russes, encore appelées gigognes, d'où le nom de la fonction.
Ça s'explore donc par des boucle For Each In, imbriquées elles aussi.
Conseil: soignez l'indentation pour vous y retrouver plus facilement: après chaque For décaler les instruction qui suivent vers la droite, et après chaque Next décalez celles qui suivent vers la gauche, au même niveau que le For Each qui inaugurait la boucle qu'il termine.
 
Dernière édition:

gbstyle

XLDnaute Impliqué
Bonjour Dranreb, tout ne me parait pas clair j'ai commencé par ceci, mais à mon avis pas bon du tout
VB:
Private Sub Worksheet_Activate()
Dim Données As Collection, TR(), LR&, RefCmd As SsGr, Détail, PremièreLigne As Boolean
Set Données = Gigogne(TableUnique(Me.ListObjects(1), WshSuivES), 1)
ReDim TR(1 To Données.Count, 1 To 5)
For Each RefArt In Données
    LR = LR + 1
    TR(LR, 1) = RefArt.Id ' Identification de l'article
    PremièreLigne = True
    For Each Détail In RefArt.Co
    If Détail(5) = "Entrée" Then T(L, 3) = T(L, 3) + Détail(8) Else T(L, 3) = T(L, 3) - Détail(8)
'(5) colonne mouvement de la base mouvement, (8) colonne qte de la base mouvement
    End If
End Sub
 

Dranreb

XLDnaute Barbatruc
Bonjour.
En effet.
Déjà on avait dit qu'il n 'y aurait pas de fusion.
Alors pourquoi le TableUnique ?
Et je m'attendais à ce qu'il y ait une seconde colonne de regroupement spécifiée pour l'emplacement.
Ensuite il n'y a aucun versement de tableau résultant dans des cellules à la fin.
 

gbstyle

XLDnaute Impliqué
Peux tu m'expliquer ce que tu entend par fusion, je pense ne pas avoir compris son sens
Le code n'était qu'une ébauche de démarrage car ca ne me parait pas simple à mettre en forme tous ces filtres entre références, mouvement (entrée sortie réservé) et emplacement :/
 

Dranreb

XLDnaute Barbatruc
La fusion consiste avec mon système à mettre bout à bout plusieurs sources dans un tableau unique au moyen de la fonction TableUnique, en comptant sur Gigogne pour mettre ensemble, dans de mêmes SsGr, les données de mêmes identifications venant de ces diverses sources.
 

gbstyle

XLDnaute Impliqué
D'accord donc si je comprend bien la fusion est utilisé a partir du moment ou tu vient récupérer plusieur source (par exemple 2 Tableau différent sur 2 feuilles différentes)
Donc oui en effet pas de fusion.
je remplace donc :
VB:
Set Données = Gigogne(TableUnique(Me.ListObjects(1), WshSuivES), 1)
par
VB:
Set Données = Gigogne(Me.ListObjects(1), WshSuivEs), 1)
 

Dranreb

XLDnaute Barbatruc
Non, pas bon. Il va penser devoir travailler d'après les données présentes dans la feuille résultante, et va essayer en vain d'interpréter le second paramètre WshSuivES comme un numéro de colonne de regroupement.
Ensuite sans doute une erreur de syntaxe après la parenthèse fermante.
 

Dranreb

XLDnaute Barbatruc
Ici à Belfort, le temps est est resté clair jusqu'à maintenant.

Et à part ça, ça avance notre affaire ?
De mon coté j'ai écrit une procédure qui me paraît donner le résultat souhaité.
Elle commence comme ça :
VB:
Private Sub Worksheet_Activate()
Dim TR(), RefArt As SsGr, DsgnArticle As String, Emplac As SsGr, _
   LR As Long, TypMvt As SsGr, Détail
ReDim TR(1 To 100000, 1 To 5)
For Each RefArt In Gigogne(WshSuivES, 1, 9, 5)
   DsgnArticle = RefArt.Co(1).Co(1).Co(1)(2) ' Colonne 2 de la _
      1ère ligne détail du 1er TypMvt du 1er Emplac de l'article.
VB:
   For Each Emplac In RefArt.Co
      LR = LR + 1
      TR(LR, 1) = RefArt.Id
      TR(LR, 2) = DsgnArticle
      TR(LR, 4) = Emplac.Id
      For Each TypMvt In Emplac.Co
         Select Case TypMvt.Id
            Case "Entrée": TR(LR, 3) = TR(LR, 3) + TypMvt.Somme(8)
            Case "Sortie": TR(LR, 3) = TR(LR, 3) - TypMvt.Somme(8)
            End Select
         For Each Détail In TypMvt.Co
            If Not IsEmpty(Détail(10)) Then TR(LR, 5) = Détail(10)
Et se termine comme ça :
VB:
            Next Détail, TypMvt, Emplac, RefArt
Me.Rows(2).Resize(100000).Delete
Me.[A2].Resize(LR, 5).Value = TR
End Sub
La boucle la plus interne (qui tourne donc le plus souvent) sur Détail ne me sert qu'à récupérer en TR(LR, 5) la dernière remarque non vide trouvée en Détail(10)
Pour les cumuls j'utilise TypMvt.Somme(8)
 
Dernière édition:

gbstyle

XLDnaute Impliqué
Bonjour Dranreb, ce n'était qu'une expression signifiant que ca s'annonçait compliqué mon affaire.

sinon je n'ai pas encore bien avancé sur le sujet je te lis que maintenant sur ta proposition que je n'avais pas du tout démarrer comme tel, je vais donc essayer de m'y atteler cet après midi, et je reviens vers toi des que j'ai réussis à ressortir quelque chose ;)
Encore merci
 

gbstyle

XLDnaute Impliqué
Bonjour Dranreb alors après quelque essais j'ai essayé d'obtenir le résultat mais en vain j'ai donc pris ton code qui fonctionne a merveil ce qui n'est pas une surprise cependant je souhaiterai bien comprendre la démarche j'ai ajouté quelque commentaire à chaque ligne pour bien comprendre le fonctionnement cependant j'ai quelque manque :/ et j'aimerai que tu m'aide à bien comprendre chaque ligne.

VB:
Private Sub Worksheet_Activate()
Dim TR(), RefArt As SsGr, DsgnArticle As String, Emplac As SsGr, _
    LR As Long, TypMvt As SsGr, Détail
ReDim TR(1 To 100000, 1 To 5) 'Définition de TR (ligne 1 à 100000 sur les 5 premières colonnes
For Each RefArt In Gigogne(WshSuivES, 1, 9, 5) 'définition des colonnes pour chaque article (réf, emplacement, mouvement)
    DsgnArticle = RefArt.Co(1).Co(1).Co(1)(2) ' Colonne 2 de la _
       1ère ligne détail du 1er TypMvt du 1er Emplac de l'article.
For Each Emplac In RefArt.Co  'Si je comprend bien tu viens récupérer les infos de chaque emplacement dans définition RefArt.co (qui correspond à la premiere ligne de chaque article de chaque emplacement et de chaque mouvement
       LR = LR + 1  ' ??? je ne comprend pas ce que cela signifie
       TR(LR, 1) = RefArt.Id 'Placement en colonne 1 la réf article
       TR(LR, 2) = DsgnArticle 'placement en colonne 2  la désignation article
       TR(LR, 4) = Emplac.Id ' placement en colonne 4 l'emplacement
       For Each TypMvt In Emplac.Co 'Et que pour chaque type de mouvement dans chaque emplacement tu selectionnes la case mouvement et
          Select Case TypMvt.Id 'selectionner la case mouvement
             Case "Entrée": TR(LR, 3) = TR(LR, 3) + TypMvt.Somme(8) 'si mouvement entrée ajout quantité à l'empalcement
             Case "Réservé": TR(LR, 3) = TR(LR, 3) + TypMvt.Somme(8) 'si mouvement reservé ajout quantité à l'empalcement
             Case "Sortie": TR(LR, 3) = TR(LR, 3) - TypMvt.Somme(8) 'si mouvement sortie reduction quantité à l'empalcement
             End Select  'fin de la selection
          For Each Détail In TypMvt.Co  '???
             If Not IsEmpty(Détail(10)) Then TR(LR, 5) = Détail(10) '????

            Next Détail, TypMvt, Emplac, RefArt
Me.Rows(2).Resize(100000).Delete
Me.[A2].Resize(LR, 5).Value = TR
End Sub
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Je corrige un peu :
VB:
Private Sub Worksheet_Activate()
Dim TR(), RefArt As SsGr, DsgnArticle As String, Emplac As SsGr, LR As Long, TypMvt As SsGr, Détail
ReDim TR(1 To 100000, 1 To 5) 'Définition de TR (ligne 1 à 100000 sur les 5 premières colonnes
For Each RefArt In Gigogne(WshSuivES, 1, 9, 5) 'Définition des colonnes de classement et regroupements (réf, emplacement, mouvement)
   DsgnArticle = RefArt.Co(1).Co(1).Co(1)(2) ' Colonne 2 de la 1ère ligne détail du 1er TypMvt du 1er Emplac de l'article.
   For Each Emplac In RefArt.Co ' Pour chaque SsGr d'emplacement de l'article
      LR = LR + 1 ' Nouvelle ligne résultante (Incrémente le numéro de ligne du tableau dans lequel on écrit).
      TR(LR, 1) = RefArt.Id 'Placement en colonne 1 la réf article
      TR(LR, 2) = DsgnArticle 'Placement en colonne 2 la désignation article
      TR(LR, 4) = Emplac.Id 'Placement en colonne 4 l'emplacement
      For Each TypMvt In Emplac.Co 'Pour chaque type de mouvement de cet emplacement
         Select Case TypMvt.Id 'Selon cas du type de mouvement
            Case "Entrée": TR(LR, 3) = TR(LR, 3) + TypMvt.Somme(8) 'Cas mouvement entrée: ajout somme des quantités des lignes détail
            Case "Réservé": TR(LR, 3) = TR(LR, 3) + TypMvt.Somme(8) 'Cas mouvement réservé: ajout somme des quantités des lignes détail
            Case "Sortie": TR(LR, 3) = TR(LR, 3) - TypMvt.Somme(8) 'Cas mouvement sortie: retrait somme des quantités des lignes détail
            End Select 'Fin de bloc selon cas.
         For Each Détail In TypMvt.Co 'Pour chaque ligne détail contenue dans ce type de mouvement
            If Not IsEmpty(Détail(10)) Then TR(LR, 5) = Détail(10) 'Si la remarque n'est pas vide elle est placée en colonne 5
            Next Détail, TypMvt, Emplac, RefArt
Me.Rows(2).Resize(100000).Delete
Me.[A2].Resize(LR, 5).Value = TR
End Sub
 
Dernière édition:

gbstyle

XLDnaute Impliqué
Je te remerci beaucoup pour ces explication, on va dire que je m'exprime mal mais je pense que j'avais réussis à assimiler la plupart des commentaire mais en tout cas formulé par toi c'est bien plus clair.
Petite question je ne sais pas combien de ligne seront à disposition à terme, si jamais je dépasse les 100000 lignes puis avoir un message type msgbox qui me signifierai le problème ? je ne pense pas avoir le cas mais si ça arrive que je me rappel bien qu'il y a une limite.
 

Membres actuellement en ligne

Statistiques des forums

Discussions
312 165
Messages
2 085 880
Membres
103 009
dernier inscrit
dede972