XL 2016 macro IF et commandes filtre avancé

aragdur

XLDnaute Junior
Salut,

Je monte un fichier avec macro.
Grosso modo, j'ai une table de saisi et le but, via macro c'est d'arriver à extraire des données.
Par exemple, si je veux tous les animaux standards qui sont en catégorie junior femme, je fais un filtre avancé sur SJF.
Seulement, comme c'est une opération récurrente et dont les données de la base change fréquemment, je souhaite repartir de 0 à chaque fois.
Raison pour laquelle je fais une macro avec d'abord un effacement des filtres, puis un effacement des données et enfin, l'extraction.

Je bloque donc sur l'effacement des filtres. Si je n'ai pas fait de filtres avant ça coince. Je veux que Excel aille à la fonction suivante si l'effacement des filtres ne fonctionne pas ou s'il n'a pas lieu de se faire.

Un extrait de mon code :
VB:
sheets("SJF").Select
 
ActiveSheet.ShowAllData
 
Rows("2:1048576").Select
 
Selection.Clearcontents
 
Range("A2").Select

Ci-joint, mon fichier pour mieux comprendre :)

merci pour votre aide.

cdlt
 

Pièces jointes

  • Inscriptions Show.xlsm
    2.1 MB · Affichages: 30

aragdur

XLDnaute Junior
tu cliques dans le tableau
menu "Accueil" - Style - Mettre sous forme de tableau

pour les formules. effectivement.. je pense que Excel ne recopie pas toutes les formules. car dans une meme colonne, il en voit deux différentes ==> donc, il ne sait pas. donc il ne fait rien
exemple Colonne C Date: en C2: tu as tapé la date manuellement
puis en C3, tu as mis une formule..

par contre. pour la colonne A: comme c'est la meme formule du début à la fin, il recopie

Merci pour les tableaux "style"

J'ai d'abord apporté les corrections pour les formules qui n'étaient pas identiques.
ça ne fonctionnait toujours pas ... J'ai donc fait une recopie sur toutes les cellules et là miracle ...
en fait, le pb était dû au verrouillage de certaines cellules et pas d'autres ... Excel est pointilleux !!!
 

aragdur

XLDnaute Junior
Re

Le principe des tableaux structurés est le suivant : toute nouvelle ligne hérite :
  • du format (MFC et validation éventuelles incluses)
  • des formules
ceci sous réserve d'être homogène.
C'est le principe des bases de données : aucune ligne n'est prépondérante sur une autre.

Je comprends ton intérêt de ne pas réécrire Paris ou autre mais ce n'est pas du tout dans la logique base de données d'utiliser une formule pour une donnée caractérisant l'individu.
Et si tu fais un tri, ou filtre, une suppression, tu vas avoir des soucis car les infos vont se mélanger.

Le raccourci CTRL B permet de recopier la valeur saisie au dessus.
Tu peux aussi, si ces données sont systématiques et non propres à un individu, les mettre dans des cellules hors tableau et mettre une formule pour les dupliquer dans le tableau (comme tu avais fait)

Je t'ai simplifié tes formules...

J'en ai aussi enlevé le test d'âge vide au début des formules car dans un tableau tu n'auras pas de ligne d'avance mais si préfères le garder, tu peux...

Edit Oups Vgendron a répondu plus vite mais on est d'accord...

Merci pour ces précisions :)

Oublis de fichier ou je prends celui de vgendron (ci-joint) ?
 

Pièces jointes

  • Inscriptions Show.xlsm
    2.1 MB · Affichages: 35

aragdur

XLDnaute Junior
Re

Pour automatiser : je ferais plus simple.
Je créerais un modèle de catalogue par concours avec les filtres positionnés (le même document Word, juste le filtre sauvegardé dedans diffère).

Ainsi rien à faire dans Excel : on lance la publication souhaitée, point barre...

Je repensais à ton modèle de catalogue par concours.
l'idéal c'est aussi un modèle tout court puis je change sur Excel le lieu et la date :)

qu'en penses-tu ?
 

chris

XLDnaute Barbatruc
RE

Oui j'ai oublié ou fait une mauvaise manip. Je l'ai ajouté à mon post.
Tu verras les formules sont beaucoup plus courtes que les tiennes...

Dans un publipostage tu peux avoir au lancement 2 questions Date et lieu qui vont automatiquement remplir les zones prévues, c'est prévu par Word : champ Remplir.

Mais si tu veux filtrer ton concours il faut le faire dans Word si tu pars de l'ensemble de la base...
 

aragdur

XLDnaute Junior
RE

Oui j'ai oublié ou fait une mauvaise manip. Je l'ai ajouté à mon post.
Tu verras les formules sont beaucoup plus courtes que les tiennes...

Dans un publipostage tu peux avoir au lancement 2 questions Date et lieu qui vont automatiquement remplir les zones prévues, c'est prévu par Word : champ Remplir.

Mais si tu veux filtrer ton concours il faut le faire dans Word si tu pars de l'ensemble de la base...

Excellent !
c'est effectivement plus court :)
ce qui est cool avec Excel, c'est qu'il y a toujours des trucs à apprendre.

Punaise !!! Trop cool ce truc de Word.
Je vais effectivement m'en servir.

Merci beaucoup pour ton aide.

Je pense que je vais me tourner vers Word maintenant.
Le tableau tel qu'il est me convient.
 

vgendron

XLDnaute Barbatruc
Hellooo
à titre perso, c'est quoi le "truc avec Word? je trouve pas le fichier
pour les 3 macros, qu'appelles tu "Passives" ?
soit tu les regroupes dans une seule, ou elles s'appellent les unes les autres
ou meme tu fais une macro globale qui appelle les trois à la suite..
 

chris

XLDnaute Barbatruc
Bonjour

On l'a aussi (sur 2010 du moins pas revérifié sur 2016) dans l'onglet Publipostage avec le bouton Règles de la zone "champs d'écriture et d'insertion".

Ce ne sont pas des macros : juste des demandes qui se déclenchent à chaque fusion pour valoriser les champs qui ne viennent pas de la BD.
 

aragdur

XLDnaute Junior
Bonjour

On l'a aussi (sur 2010 du moins pas revérifié sur 2016) dans l'onglet Publipostage avec le bouton Règles de la zone "champs d'écriture et d'insertion".

Ce ne sont pas des macros : juste des demandes qui se déclenchent à chaque fusion pour valoriser les champs qui ne viennent pas de la BD.

je me suis fait une macro de tri, vous en pensez quoi ?

Un extrait de mon code :
VB:
Application.ScreenUpdating = False
For Each ws In Sheets
  If ws.Name <> "SJF" And ws.Name <> "SJM" And ws.Name <> "SSF" And ws.Name <> "SSM" And ws.Name <> "SVF" And ws.Name <> "SVM" Then
  With ws
    .Select
  .Sort.SortFields.Clear
  .Sort.SortFields.Add Key:=Range("F2:F11"), _
  SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _
  "Junior femelle,Junior mâle,Senior femelle,Senior mâle,Vétéran femelle,Vétéran mâle" _
  , DataOption:=xlSortNormal
  .Sort.SortFields.Add Key:=Range("R2:R11"), _
  SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _
  "Uni,Irish,Berkshire,Badger,Variberk,Husky Roan,Husky à bande,Hooded,Bareback,Capé,Albinos,Himalayen,Siamois,BES,Burmese,Devil" _
  , DataOption:=xlSortNormal
  .Sort.SortFields.Add Key:=Range("K2:K11"), _
  SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
  .Sort.SortFields.Add Key:=Range("I2:I11"), _
  SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
  End With
  End If
Next ws
Sheets("Accueil").Select
Application.ScreenUpdating = True
End Sub
 

aragdur

XLDnaute Junior
par contre comment l'intégrer à

VB:
For Each ws In Sheets
  If ws.Name <> "Accueil" And ws.Name <> "Tableau de saisie" And ws.Name <> "Tableau de données" Then
  With ws
  .UsedRange.AutoFilter
  .UsedRange.AutoFilter Field:=5, Criteria1:=Left(ws.Name, 1)
  .UsedRange.AutoFilter Field:=7, Criteria1:=Right(ws.Name, 2)
  Compteur = 0
  For Each ele In .UsedRange.Offset(1, 0).Columns(1).SpecialCells(xlCellTypeVisible)
  If ele.Offset(0, 1) <> "" Then
  ele.FormulaR1C1 = Compteur + 1
  ele.NumberFormat = "000"
  Compteur = Compteur + 1
  End If
  Next ele
  End With

avant le for each ele ?
 

Discussions similaires

Réponses
8
Affichages
880