variable filtre et nom code instable mais pourquoi ?

tony555

XLDnaute Nouveau
Bonjour,

Je vous solicite car j'aimerais comprendre un problème que j'ai sous VBA et que je ne m'explique pas.


Ce que je souhaite faire :
Un tableau dans une feuille doit être copier dans une autre feuille
dans cette autre feuille je veux réaliser un trie par ordre croissant sur une colonne B
Pour que mon code puisse vivre longtemps sans maintenance je veux pouvoir modifier le nom de mes colonnes ainsi que leur positions.
J'ai donc opté pour nommé la colonne B :"B" afin de pouvoir être sur de récupérer les informations concernant cette colonne qu'elle que soit sa position et son nom. Dans le futur elle sera toujour la plage nommée "B"

Enfin je récupére le numéro de colonne de la plage B afin de pouvoir réaliser le trie sur la bonne colonne dans la nouvelle feuille une fois le tableau copié. l'emplacement etant suceptible de changer je recalcul à chaque sa position

Pour un mystère que je ne m'explique pas mon code fonctionne parfaitement en l'état mais dés que je change le nom de la colonne il ne fonctionne plus. Pourtant je ne fais plus référence au nom de la colonne dans mon code ci-dessous mais uniquement à la plage nommée "B". encore plus troublant en forcant le numéro dans le code à "2" par exemple cela ne fonctionne plus

Je vous joint



Code:
Sub extrait()

Dim num_col As Integer
num_col = Range("B").Column

Sheets("Suivi").Range("A1:D7").Copy
Sheets("Result").Select
Sheets("Result").Range("A3").Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

Sheets("result").Range("A2") = num_col


       
    ActiveSheet.Range("A3").Select
    Selection.AutoFilter
   
    ActiveWorkbook.Worksheets("Result").AutoFilter.Sort.SortFields.Add Key:=Range(Cells(3, num_col)), _
    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Result").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    ActiveWorkbook.Worksheets("Result").AutoFilter.Sort.SortFields.Clear
  
End Sub

Si ma présentation n'est pas sufisament claire n'hésitez pas à me le dire pour que je puisse

d'avance merci et très bon week en à tous
 

Pièces jointes

  • Classeur2.xlsm
    18.2 KB · Affichages: 40
  • Classeur2.xlsm
    18.2 KB · Affichages: 46

pierrejean

XLDnaute Barbatruc
Re : variable filtre et nom code instable mais pourquoi ?

Bonjour tony555

Teste cette ligne:

ActiveWorkbook.Worksheets("Result").AutoFilter.Sort.SortFields.Add Key:=Columns(num_col), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
 

tony555

XLDnaute Nouveau
Re : variable filtre et nom code instable mais pourquoi ?

Merci pour ta proposition malheureusement le problème reste le même. :confused:

J'ai toujours une erreur d'execution '91' :variable objet ou ou variable de bloc with non définie
et uniquement lorsque je change le nom de la colone de mon tableau dans la feuille initiale
 

mécano41

XLDnaute Accro
Re : variable filtre et nom code instable mais pourquoi ?

Bonjour à tous,

J'ai essayé à ma façon, cela a l'air correct...regarde si cela convient...

Le tableau d'origine doit être "Tableau1" ; le tableau de tri est renommé "TableauTri" sinon, il change de nom à chaque fois qu'il est récrée.

Dans le code, la constante DebTabTri (au début) indique la position où tu veux mettre le tableau de tri.

ColTri est le nom complet de la colonne de tri. Je le recherche dans la feuille mais il y a peut être une instruction que je ne connais pas...

Tu peux changer le titre de la colonne de tri sans problème...

Cordialement
 

Pièces jointes

  • Essai tri1.xlsm
    19.6 KB · Affichages: 40

mécano41

XLDnaute Accro
Re : variable filtre et nom code instable mais pourquoi ?

..j'ai oublié...il faut qu'il n'y ait qu'un seul tableau de type tableau EXCEL, dans la feuille Result, car je modifie le nom mais je ne sais pas distinguer le tableau qui vient d'être crée des éventuels autres tableaux...(si quelqu'un sait...)

Cordialement
 

tony555

XLDnaute Nouveau
Re : variable filtre et nom code instable mais pourquoi ?

Merci pour cette piste cela va m'aider. le seul bémol c'est que je suis obligé d'entrer en dur la position de la colonne j'aurais voulu que cela soit possible de la déplacer est possible ?

de manière générale est ce qu'il y a une bonne pratique pour selectionner les range,etc pour que cela soit évolutif et que les colonnes puissent être déplacer ou renomée sans que cela soit impactant sur le vba ?
 

tony555

XLDnaute Nouveau
Re : variable filtre et nom code instable mais pourquoi ?

Afin d'être capable de réutiliser le code par moi même à l'avenir et pour l'adapter à mon fichier.
Peux tu m'expliquer la signification des "& ." dans "TableauTri[" & .Range("Tableau1").Cells(0, 2).Value & "]"
 

pierrejean

XLDnaute Barbatruc
Re : variable filtre et nom code instable mais pourquoi ?

Re

Salut mecano

J'en ai bavé mais cela semble fonctionner sans trop modifier le code d'origine (et honnêtement je ne saurais dire pourquoi et surtout comment il se faisait qu'on avait un bug après le second lancement de la macro)

Je regarde ta solution mecano
 

Pièces jointes

  • Classeur2 (6).xlsm
    22.9 KB · Affichages: 40

mécano41

XLDnaute Accro
Re : variable filtre et nom code instable mais pourquoi ?

Bonsoir à tous,

Merci pour cette piste cela va m'aider. le seul bémol c'est que je suis obligé d'entrer en dur la position de la colonne j'aurais voulu que cela soit possible de la déplacer est possible ?

de manière générale est ce qu'il y a une bonne pratique pour selectionner les range,etc pour que cela soit évolutif et que les colonnes puissent être déplacer ou renommée sans que cela soit impactant sur le vba ?

Il suffit de nommer la cellule de départ du tableau. J'ai choisi C12 par ex. :
- tu nommes cette cellule "Depart" par exemple (pour VBA, on évite les lettres accentuées et les cellules groupées)
- dans le code, au lieu d'une constante, tu mets :

Code:
Dim DebTabTri as range
DebTabTri = ActiveWorkbook.Worksheets("Result").Range("Depart").value

Tu peux ensuite déplacer tout le tableau où tu veux...

Autre point : si dans mon fichier, tu changes le nom de feuille Result en Resultats par ex. cela ne fonctionne plus...je ne l'ai pas fait ici, mais pour éviter cela, au lieu de ActiveWorkbook.Worksheets("Result").... il faut mettre ActiveWorkbook.Worksheets(feuil2.name).... feuil2 étant le codename de la feuille que tu vois dans la colonne de gauche du VBE, avant l'autre nom. Tu peux éventuellement mettre quelque chose de plus parlant en le modifiant (en haut de la fenêtre Propriétés)

Afin d'être capable de réutiliser le code par moi même à l'avenir et pour l'adapter à mon fichier.
Peux tu m'expliquer la signification des "& ." dans "TableauTri[" & .Range("Tableau1").Cells(0, 2).Value & "]"

Les & servent à concaténer (mettre bout à bout) des chaînes. Tu peux ainsi mettre un début de chaine immuable, puis une partie paramétrée (calculée) puis une autre partie immuable pour décrire une adresse par ex..

Cordialement
 

Discussions similaires

Réponses
3
Affichages
591

Statistiques des forums

Discussions
312 304
Messages
2 087 067
Membres
103 451
dernier inscrit
Souleymane