XL 2019 Besoin d'aide sur diverses macros

darknigthmare

XLDnaute Nouveau
Bonjours à tous
voilà j'ai besoin de faire des tableaux avec quelque fonction macro, mais je n'arrive pas à avoir ce que je voudrais faire
je vais essayer vous décrire ce que j'aimerai avoir
-sur le tableau MaintenanceAfaire j'aimerai avoir B2:C2 & E2:H2 qui une fois que le bouton valider est appuyée cela efface les cellules et transpose les valeurs dans le tableau Historiqueoutillage sur la ligne B4:H4 et qu'à chaque fois qu'une nouvelle entrée est ajoutée, que la dernière valeur soit sur la B4:H5 et que la précédente soit sur la ligne du dessous, Etc. (tout en agrandissant le tableaux a chaque fois que ya plus de place)(chose qui est quasi fonctionnel, mais j'ai encore quelque problème sur la transposition des valeurs et de position
-si possible avec la validation des données que j'ai mises en place sur les cellules B2:H2 d'avoir la possibilité d'ajouter si une valeur qui n'existe pas est entrée de l'ajouter a la suite de ceux prises dans la plage mise en référence dans la feuille "reference'


feuille Historiqueoutillage :
-À chaque fois qu'une cellule en O dépasse les 7 utilisations la colonne passe en orange et passe sur le tableau principal "MaintenanceAfaire" (le bleu) dès que cela passe à 9 cela passe en rouge
-la quantité fabriquer + le nombre d'utilisations doivent s'incrémenter à chaque fois qu'une nouvelle ligne avec le même pt apparait


feuille Maintenance :
-avoir une copie du tableau bleu dynamique et un bouton à cote de chaque référence (bouton qui permet de remettre a zéro le nombre d'utilisations depuis la dernière maintenance ainsi que de remettre à zéro le nombre de poches depuis la dernière maintenance (O:p du tableau historique d'outillage),et de metre au jour d appuy du bouton la dernière maintenance (colonne (R) du tableau historique d outillage)

macro mail
-je n'arrive pas à faire apparaitre le tableau bleu dans le corps du message
(j'aimerai savoir s'il est possible une fois que le tableau bleu copier sur la feuille maintenance avec les boutons de remise à zéro peut être activé directement dans le mail envoyer (ex la personne reçoit le mail et clic sur le bouton remise a zéro de la ligne en question et cela applique la modification et tous ce que cela doit activer par la suite (sauvegarde comprise))

merci Beaucoup pour toute aide que vous pourriez m'apporter

 

Pièces jointes

  • MaintenanceDesOutillages.xlsm
    63.7 KB · Affichages: 13
Dernière édition:

fanfan38

XLDnaute Barbatruc
Je n'ai pas traité les aiguilles et le polyester.
B2 à H2 supprimées remplacées par userform
Ajout de données si pas dans la liste
Feuille référence cellule devient Orange si +7 et rouge si 9 et plus + transfert vers maintenance
Si la date de maintenance, sur la feuille "reference" change les données se remettent à zéro
j'ai mis un exit sub dans la macro before close à supprimer
les mails je sais pas faire...

A+ François
 

Pièces jointes

  • MaintenanceDesOutillagesv1.xlsm
    41.5 KB · Affichages: 2

patricktoulon

XLDnaute Barbatruc
bonjour
1° erreur : faire un tableau avec des lignes vides
sur un tableau structuré ça ne se fait pas sinon ça sert a rien de le faire en tableau structuré
donc tu vire ses ligne vides de ton tableau structuré et quand tu ajoute une ligne tu ajoute une ligne au tableau c'est simple c'est une regle de base
set R=range("lenom de ton tableau").listobject.listrows.add.range'on ajoute une ligne

r.cells(1)=textbpox1
r.cells(2)= textbox2

etc.....
ou si tu est suffisamment ordonnée on peut remplir la ligne en 1 coup
r.value=array(textbox1,textbox2,textbox3,etc...)

en ce qui concerne le range ciblé en colonne B je cicte( j'aimerai avoir B2:C2 & E2:H2 )

là aussi c'est simple ton tableau commence en colonne B
et bien pour ces 4 cellules
c'est
r(1)=blablablabla
r(2)=blablablabla
r(4)=blablablabla
r(5)=blablablabla

voilà et tu n'a pas de soucis pour determiner la derniere ligne

2° erreur que j'ai constaté dans ta version et meme celle des autres (ils n'ont pas corrigé)
comment accede ton a un tableau structuré?;;
et bien soit par la collection "ListObjectS"
mais il faut precisé la feuille parent
set montableau= feuil1.listobjects("montableau")
ou n ne s'ennuie pas avec ces considérations on le determine par le range .listobject
set montableau=range("montableau").listobject
pourquoi par range et bien en utilisant le name on est sur qu'il ne peut y en avoir qu'un donc pas besoins de determiner la feuille parent

je montre l'erreur
pas bien !!!
Sub DeleteLastentry()
Range("C4").ListObject.ListRows(1).Delete
End Sub


'bien
Sub DeleteLastentry()
Range("montableau ").ListObject.ListRows(1).Delete
End Sub


bien que là le nom de la sub me semble suggérer que c'est la derniere qui doit etre supprimé
c'est donc faux

là c'est mieux
Sub DeleteLastentry()
with ("montableau").ListObject
.ListRows(.listrows.count).Delete
end with
End Sub


bonne journée a tous ;)
 
Dernière édition:

fanfan38

XLDnaute Barbatruc
Bonjour
Mot de passe modifié par userform permet les caractères *
date de dernière intervention corrigée
maintenance corrigée
A voir les modifs de patricktoulon...

A+ François
 

Pièces jointes

  • MaintenanceDesOutillagesv2(1).xlsm
    84.8 KB · Affichages: 5

fanfan38

XLDnaute Barbatruc
patrick
Bonjour
il n'y a pas de ligne vide dans les tableau structuré
les lignes vide sont dans maintenance qui n'est pas un tableau structuré
il faut ajouté une ligne en debut de tableau c'est pour ça que j'utilise c4
idem pour la ligne a supprimer: c'est la première
Mais je ne suis pas un as (au contraire) je ne fais que aider les forummeur du mieux que je peux)
Tu déclare comment R
set R=range("lenom de ton tableau").listobject.listrows.add.range'on ajoute une ligne
A+ François
 
Dernière édition:

ChTi160

XLDnaute Barbatruc
Bonjour darknightmare
Bonjour François ,Patrick
François :
Ou tu considères la Ligne
1° Comme une Ligne du tableau
tu mets :
VB:
Dim R as ListRow
et set R=range("lenom de ton tableau").listobject.listrows.Add
2° Ou tu Considères la Plage de Cellule de la Ligne !
tu mets :
Code:
Dim R as Range
set R=range("lenom de ton tableau").listobject.listrows.add.Range
Bonne Journée
Jean marie
 

ChTi160

XLDnaute Barbatruc
Oh ! tu es Vieux Lol;)
Mois 65 Lol
mais qu'est ce qu'on s'amuse Lol
ces tableau Structurés son vraiment pratiques !
as tu vu le Tuto de Pierre Fauconnier qui est très intéressant !
Un exemple qui concerne notre Sujet.
Le Lien :
plus généralement !
Le Lien :
Bonne Journée
François
Jean marie
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
patrick
Bonjour
il n'y a pas de ligne vide dans les tableau structuré
les lignes vide sont dans maintenance qui n'est pas un tableau structuré
il faut ajouté une ligne en debut de tableau c'est pour ça que j'utilise c4
idem pour la ligne a supprimer: c'est la première
Mais je ne suis pas un as (au contraire) je ne fais que aider les forummeur du mieux que je peux)
Tu déclare comment R
set R=range("lenom de ton tableau").listobject.listrows.add.range'on ajoute une ligne
A+ François
bonjour @fanfan38
il faut ajouté une ligne en debut de tableau c'est pour ça que j'utilise c4
c'est là ou tu fait erreur
car avant de faire partie du Tableau structuré C4 fait partie d'une feuille
oui mais de quelle feuille !!??? si la feuille active est celle qui est concernée tout va bien mais si elle ne l'ai pas ben tu est chocolat

tandis que range("nomdutableau").listobject dans l'es names il n'en existe qu'un il ne peut donc y avoir ambiguité donc la propertie"listobject "fonctionne meme si la feuille concerné n'est pas celle qui est active

c'est donc bien comme ceci que l'on ajoute une ligne tout en determinant l'object range en meme temps
VB:
set R=range("lenom de ton tableau").listobject.listrows.add.range'on ajoute une ligne
R est bien le l'object range qui correspond a la ligne que tu viens d'ajouter
c'est simple , propre, net

si on veut ajouter a la fin c'est ".add" si on veut l'ajouter en 1 ere postion c'est ".add(1)"
;)
 

fanfan38

XLDnaute Barbatruc
Bonjour
Ch'ti 160 non j'avais pas vu... qu'est ce que je vais être moins con ce soir...lol
Merci de l'info patricktoulon
Pour les mails je compte sur vous (ce n'est pas ma tasse de thé)
Pour le reste:
Est ce la machine ou l'outillage qui va à la maintenance?
Pour quoi faire l'heure?
la liste en m5 et suivante est ajouté dans la liste des machines et il n'y aura pas de maintenance pour celle ci
J'ai fait la modif proposé par patricktoulon

A+ François
 

Pièces jointes

  • MaintenanceDesOutillagesv2(1).xlsm
    81.4 KB · Affichages: 3

ChTi160

XLDnaute Barbatruc
Bonsoir ,
une autre question :
quel est le but de cette procédure :
VB:
Private Sub UserForm_Initialize()
  Dim Plage As Range, tablo, dl As Long, i As Long
  With Sheets("reference")
    Set Plage = .Range("B2:B" & .Range("B65536").End(xlUp).Row)
    Me.ComboBox1.List = Plage.Value '-----> Ici On remplie le Combobox1 avec la Colonne "B"
    dl = .Range("M65536").End(xlUp).Row
    For i = 5 To dl
      Me.ComboBox1.AddItem .Range("M" & i).Value '----> Ici On ajoute au Combobox1 la Colonne "M"
    Next
    Set Plage = .Range("J2:J" & .Range("J65536").End(xlUp).Row)
    Me.ComboBox3.List = Plage.Value
  End With
  tablo = [T_outillage[Code Outillage]]
  Me.ComboBox2.List = tablo
End Sub
Pourquoi alimenter ce Combobox1 avec les deux Colonnes " Code et désignation " de l'outillage ?
Edit je viens de comprendre Lol
sur le tableau référence il y a des PT mit à part dans une colonne non-maintenance, ces pt la devrais pouvoir être sélectionnable dans l'user form production,
ne pas tenir compte du message ci dessus ! Lol
pour éviter les Ligne vides faire un test avant le AddItem
Code:
Private Sub UserForm_Initialize()
  Dim Plage As Range, tablo, dl As Long, i As Long
  With Sheets("reference")
  With .Range("T_outillage[machines]")
         For i = 1 To .Rows.Count
            If Not Trim(.Cells(i)) = Empty Then
                Me.ComboBox1.AddItem Trim(.Cells(i))
            End If
         Next i
 End With
    dl = .Range("M65536").End(xlUp).Row
    For i = 5 To dl
     With .Range("M" & i)
     If Not IsEmpty(.Value) Then Me.ComboBox1.AddItem .Value
     End With
    Next
    Set Plage = .Range("J2:J" & .Range("J65536").End(xlUp).Row)
    Me.ComboBox3.List = Plage.Value
  End With
  tablo = [T_outillage[Code Outillage]]
  Me.ComboBox2.List = tablo
End Sub
autre question:
est ce que tous les outillages peuvent servir sur touse les Machines ?
Bonne Soirée
Jean marie
 
Dernière édition:

fanfan38

XLDnaute Barbatruc
Bonjour
si une valeur est rentrée dans le tableaux "historique d'outillage" et que c'est la 8 ieme valeur (donc que la valeur a été transposer sur le tableaux"maintenance") et que l'on supprimé la valeur( car on c'est tromper avec la commande "supprimer la dernière entrée") ,la valeur est toujours présente sur le tableaux maintenance
Réglé

il me semble que si une date est changée manuellement sur la ligne "dernière maintenance" cela ne transpose plus les valeur sur le tableaux maintenance ,depuis que j ai valider la première ligne de maintenance il ne veut plus me remettre une ligne sur ce dit tableaux
Réglé

Demain je ferai le blocage des cellules

Pour les mails ouvre un nouveau post (en précisant que c'est pour un mail): je ne sais pas faire

A+ François
 

Pièces jointes

  • MaintenanceDesOutillagesv2.xlsm
    117.6 KB · Affichages: 6

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 305
Messages
2 087 084
Membres
103 459
dernier inscrit
Arnocal