Cellule bougée <---> Résultat qui suit....

WEIDER

XLDnaute Impliqué
Bonjour à toutes et tous,

Pouvez-vous répondre à ma question s’il vous plait, certainement très simple pour vous…

Tout est dit dans mon fichier joint.

Mille mercis à vous,

Amicalement,

WEIDER
 

Pièces jointes

  • Test.xlsx
    13.1 KB · Affichages: 43

job75

XLDnaute Barbatruc
Bonjour WEIDER, le forum,

Il y a des cellules fusionnées en colonne G et H de "Nomenclature", avec elles tout tri est impossible.

Il faut donc les défusionner avant toute chose, cela se fait facilement par macro.

Après, toujours par macro, on peut nommer les cellules en colonne G.

Fichier joint.

A+.
 

Pièces jointes

  • Pour exemple(1).xlsm
    93.3 KB · Affichages: 19

job75

XLDnaute Barbatruc
Re,

Si le seul but est de renseigner les colonnes A:F des feuilles "1", "2" etc... pas besoin de formules !!!

C'est alors relativement simple avec cette macro dans ThisWorkbook :
Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim nom$, s As Boolean, r As Range, n, v$, i
nom = Sh.Name
If Val(nom) = 0 Then Exit Sub
s = Me.Saved 'mémorise l'état
Application.ScreenUpdating = False
Sh.[O4] = ""
Sh.[T5] = Date 'date du jour
Sh.[AA:AB] = "" 'RAZ des colonnes auxiliaires du comptage pour repérer les erreurs
On Error Resume Next
Set r = Sheets("Nomenclature").[L:L].SpecialCells(xlCellTypeConstants)
On Error GoTo 0
If Not r Is Nothing Then
  For Each r In r
    If CStr(r) = nom Then
      n = n + 1
      Sh.Cells(n + 6, 1) = r(1, 3)
      Sh.Cells(n + 6, 2).Resize(, 5) = r(1, -4).Resize(, 5).Value
      Sh.Cells(n + 6, "AB") = r(1, 2)
      Sh.Cells(n + 6, "AA") = "=COUNTIF(C[1],RC[1])" 'comptage
    End If
  Next r
  '---détermination de la valeur la plus fréquente pour O4---
  If n Then
    v = CStr(Application.VLookup(Application.Max(Sh.[AA:AA]), Sh.[AA:AB], 2, 0))
    Sh.[O4] = v
  End If
  '---effacement des lignes indésirables---
  For i = 1 To n
    If CStr(Cells(i + 6, "AB")) <> v Then Cells(i + 6, 1).Resize(, 6) = ""
  Next i
  '---tri sur la colonne A---
  Sh.Cells(6, 1).Resize(n + 1, 6).Sort Sh.Cells(6, 1), xlAscending, Header:=xlYes
End If
Sh.Range("A" & n + 7 & ":F" & Sh.Rows.Count) = "" 'RAZ en-dessous
If s Then Me.Saved = True 'évite l'invite à la fermeture si pas d'autres modifications
End Sub
Nota : il y a un onglet ("5") où le nombre de lignes dépassera 8, il faudra ajouter des lignes au tableau.

Edit 1 : j'ai complété pour renseigner aussi la cellule O4.

Edit 2 : il était alors très facile de créer tous les onglets de "1" à "47".

Fichier joint, j'ai créé une MFC pour les bordures sur les colonnes C:N et P:U de "Nomenclature".

A+
 

Pièces jointes

  • Pour exemple sans formules(1).xlsm
    434.6 KB · Affichages: 24
Dernière édition:

job75

XLDnaute Barbatruc
Re,

Les colonnes auxiliaires AA et AB m'ont permis de détecter 2 erreurs :

- pour l'onglet "2" rejet de la phase "Kit 9 lames", cela paraît normal et vous semblez l'avoir vu

- pour l'onglet "43" rejet de la phase "Montage de la station de base", peut-être faudrait-il corriger la cellule M104 de "Nomenclature" ?

A+
 

job75

XLDnaute Barbatruc
Bonjour WEIDER, le forum,

Pour peaufiner j'ai créé une MFC sur la colonne G de "Nomenclature".

Les doublons sont repérés par une police rouge.

Edit : je trouve que c'est plus discret avec le format personnalisé @" |"

Fichiers (bis) joints.

Bonne journée.
 

Pièces jointes

  • Pour exemple sans formules(1 bis).xlsm
    434.8 KB · Affichages: 15
  • Pour exemple sans formules(2 bis).xlsm
    437.6 KB · Affichages: 21
Dernière édition:

WEIDER

XLDnaute Impliqué
Bonjour Job75,

Et bien dites moi, je suis très très impressionné par toutes vos propositions !
Mille mercis à vous pour votre aide précieuse.

Absent du weekend, je suis en train de regarder le tout dernier fichier (437.6 ko), et d'essayer d'en comprendre tous les rouages... Dure dure pour le novice que je suis.....

Certaines choses sont... comment dirais-je... magiques pour moi :)

1/ Exemple, le fais que sur les onglets les références prennent en compte les modifications de celles de l'onglet 'Nomenclature' sans pour autant avoir de formule, exemple B7 et les suivantes, comment la modification est prise en compte !?!?!?

2/ Concernant les tri des colonnes dans l'onglet 'Nomenclature', j'ai vu qu'elles ne peuvent plus êtres faites par 'Colonne' mais en sélectionnant les cellules des colonnes, vous avez inséré des chiffres sur la ligne 6 !?!?

3/ Le fait de vouloir trier des cellules englobe automatiquement l'entièreté du tableau !?!?

4/ Je trouve très bien le trait vertical indiquant les doublons ! Je pense que c'est la Mise En Forme Conditionnelle que vous avez mis 'G =NB.SI(G:G;G1)>1'.

Bref je découvre ce fichier et j'essaie d'en saisir les fonctionnements et subtilités ;-)
 

job75

XLDnaute Barbatruc
Bonjour WEIDER, le forum,

Réponses à vos questions sur le dernier fichier.

1) C'est la macro Workbook_SheetActivate du ThisWorkbook qui met à jour chaque onglet activé.

2) Avec un tableau Excel les tris se font comme les filtrages, en cliquant sur un bouton de filtre en ligne 6.

On peut masquer les boutons de filtre : clic dans le tableau => clic sur l'onglet CRÉATION => décocher la case "Bouton de filtre".

Un tableau Excel nécessite des en-têtes de colonnes, ils sont en ligne 6 : Col1 Col2 Col3 etc...

Je les ai masqués par une police blanche.

3) Les tris et les filtrages concernent l'entièreté du tableau B7:U181 "Tableau1", c'est fait pour ça.

4) Oui bien sûr, comme je l'ai dit c'est un format personnalisé.

Edit : ce format @" |" s'applique à des références textes.

Pour qu'il s'applique aussi à des nombres comme '001' ou '123' mettez la colonne G au format "Texte".

Et dans ce cas il faut mettre aussi les colonnes B des autres onglets au format "Texte".

Voyez ce fichier (2 ter).

A+
 

Pièces jointes

  • Pour exemple sans formules(2 ter).xlsm
    436.8 KB · Affichages: 17
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour WEIDER, le forum,

Voici le fichier final.

1) Pour que ce soit plus clair j'ai renommé les feuilles du VBAProject (CodeNames) avec ceci :
Code:
Sub NommerFeuillesVBAProject()
Dim vbc As Object, nom$, n%, x$
For Each vbc In ThisWorkbook.VBProject.VBComponents
  nom = vbc.Properties("Name")
  n = Val(nom)
  x = Mid(nom, Len(CStr(n)) + 1) 'lettre a ou b ou ""
  If n Then vbc.Name = "F" & Format(n, "000") & x
  If nom = "Nomenclature" Then vbc.Name = "F000"
Next
End Sub
Nota : pour que l'accès au VBAProject soit possible par macro il faut avoir coché l'option :

- sur Excel 2003 et versions antérieures Faire confiance au projet Visual Basic (menu Outils-Macro-Sécurité-Editeurs approuvés)

- sur Excel 2007 et versions suivantes Accès approuvé au modèle d'objet du projet VBA (onglet Fichier-Options-Centre de gestion de la confidentialité-Paramètres...-Paramètres des macros).

2) Au cas où l'on insère ou coupe-colle des lignes dans "Nomenclature", formule en B7 :
Code:
=MAX(B$6:DECALER(B7;-1;))+1
DECALER étant volatile il faut la Workbook_Open pour éviter l'invite à la fermeture.

Bonne journée.
 

Pièces jointes

  • Fichier final(1).xlsm
    439.6 KB · Affichages: 16

Discussions similaires

Réponses
10
Affichages
341
Réponses
7
Affichages
436
Réponses
11
Affichages
444