IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Excel Discussion :

Demande d'aide pour filtrage colonnes et copier coller à l'envers.


Sujet :

Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Animateur qualité
    Inscrit en
    Juillet 2023
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Animateur qualité

    Informations forums :
    Inscription : Juillet 2023
    Messages : 12
    Points : 8
    Points
    8
    Par défaut Demande d'aide pour filtrage colonnes et copier coller à l'envers.
    Bonjour,

    J'aurais besoin de vos lumières.

    Je suis débutant en VBA et je n'arrive pas à me dépatouiller avec certain points.

    • Partie Copier/Coller


    J'ai écrit ce code pour allez chercher les données dans un fichier et les copier dans un autre automatiquement. Le "seul" souci que j'aurais avec ce code, c'est que je n'arrive pas à inverser le sens de collage.
    Par exemple :

    Dans le colonne A => A1 = 1, A2 = 2, A3 = 3
    Lorsque je colle ces valeur j'aimerais qu'elle ce mette : colonne A => A1 = 3, A2 = 2, A3 = 1

    Même en méttant Transpose:=True, je n'arrive pas à inverser l'ordre

    Workbooks.Open "CHEMIN DE MON FICHIER"
    'Copie Rupture
    Sheets("CourantDataFile").Select
    Range("H4:H8").Select
    Selection.Copy
    Windows("Final").Activate
    'Conserver mise en forme copier coller
    ActiveSheet.Range("E18").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, _
    Operation:=xlNone, SkipBlanks:=False, Transpose:=False

    J'aurais besoin aussi d'une commande me permettant de copier à partir de la dernière ligne renseignée. (Par exemple copier les 100 dernière valeur renseignées)
    Ca je n'arrive pas du tout m'en sortir je ne trouve pas comment faire.

    • Partie Filtres




    J'ai besoin de filtrer deux colonnes avant de faire les copier coller.

    J'ai essayé ceci :

    ActiveSheet.Range("$J$14:$J$65000").AutoFilter Field:=1, Criteria1:="Epicéa" And ActiveSheet.Range("$K$14:$K$65000").AutoFilter Field:=1, Criteria1:="C30"

    J'ai besoin de trier la colonne J avec Epicéa et la colonne K avec C30.
    Lorsque j'essaie cette ligne de programmation, J'ai le message "Erreur de compilation : Attendu : fin d'instruction et il me surligne toute la ligne en rouge et le deuxième Field est surligné en Bleu.
    Je ne comprend pas ce qui ce passe.

    Nom : prob filtre.png
Affichages : 139
Taille : 22,7 Ko

    Je reste à votre disposition si vous avez des questions !

    Merci beaucoup par avance.

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 940
    Points : 28 938
    Points
    28 938
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ai écrit ce code pour allez chercher les données dans un fichier et les copier dans un autre automatiquement. Le "seul" souci que j'aurais avec ce code, c'est que je n'arrive pas à inverser le sens de collage.
    Par exemple :
    Dans le colonne A => A1 = 1, A2 = 2, A3 = 3
    Lorsque je colle ces valeur j'aimerais qu'elle ce mette : colonne A => A1 = 3, A2 = 2, A3 = 1
    Transpose inverse les colonnes et les lignes.
    Ce que vous voulez faire est un simple tri décroissant

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Animateur qualité
    Inscrit en
    Juillet 2023
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Animateur qualité

    Informations forums :
    Inscription : Juillet 2023
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Merci d'avoir pris le temps de répondre,

    Je ne peux pas faire un tri décroissant, mes valeurs à copier coller ne seront pas 1, 2, 3 mais des nombres différents à chaque fois.

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 940
    Points : 28 938
    Points
    28 938
    Billets dans le blog
    53
    Par défaut Inverser l'ordre des lignes d'une plage de cellules
    Bonjour,
    Je ne peux pas faire un tri décroissant, mes valeurs à copier coller ne seront pas 1, 2, 3 mais des nombres différents à chaque fois.
    Il est possible de passer par la procédure ci-dessous mais elle peut être rapidement chronophage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub t()
      Dim oRange As Range
      Dim r As Long
      Dim c As Long
      Set oRange = ThisWorkbook.Worksheets("Feuil2").Range("F2").CurrentRegion
      With oRange
        For r = 1 To .Rows.Count - 2
         .Offset(.Rows.Count - 1).Resize(1).Cut
         c = c + 1
         .Offset(c).Resize(1).Insert Shift:=xlDown
        Next
      End With
      Set oRange = Nothing
    End Sub
    Il est donc préférable de travailler avec une variable tableau
    Dans cet exemple, voir l'illustration plus bas, on inverse l'ordre des lignes des données (pas le titre) de la plage de cellules débutant en cellule F2 de la feuille nommée Feuil2 du classeur où se trouve le code VBA

    il faudrait la convertir en procédure générique, pour lui passer comme argument, la plage à inverser. Cela vous permettra de la réutiliser dans d'autres scénarios.

    Attention : Cette procédure ne fonctionne qu'à condition qu'il n'y ait pas de formule.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Sub ReverseRowsOrder()
      Dim oRange As Range, DataRange As Range
      Dim arrData() As Variant, arrInversed() As Variant
      Dim r As Long, c As Long
      ' Identifiez la plage à partir de F2
      Set oRange = ThisWorkbook.Worksheets("Feuil2").Range("F2").CurrentRegion
      ' Pour ne prendre que les données et exclure le titre
      Set DataRange = oRange.Offset(1, 0).Resize(oRange.Rows.Count - 1)
      ' Charger la plage de données dans un tableau
      arrData = DataRange.Value
      ReDim arrInversed(1 To UBound(arrData, 1), 1 To UBound(arrData, 2))
      ' Inversez les lignes du tableau
      For r = LBound(arrData, 1) To UBound(arrData, 1)
        For c = LBound(arrData, 2) To UBound(arrData, 2)
          arrInversed(UBound(arrData, 1) - r + 1, c) = arrData(r, c)
        Next c
      Next r
      ' Écrivez le tableau inversé dans la plage
      DataRange.Value = arrInversed
      ' Libèrer la mémoire
      Set oRange = Nothing: Set DataRange = Nothing
    End Sub
    Illustration

    Nom : InverseRows.png
Affichages : 104
Taille : 9,6 Ko

    Pour information
    , illustration de la différence entre une copie avec tri de la première colonne par ordre décroissant et une transposition

    Nom : Copy Transpose.png
Affichages : 99
Taille : 18,2 Ko

    Pour en savoir plus sur les variables tableaux, à lire éventuellement

  5. #5
    Membre régulier
    Avatar de Alex64
    Homme Profil pro
    Senior . Formation : topographe
    Inscrit en
    Août 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Senior . Formation : topographe
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2014
    Messages : 58
    Points : 112
    Points
    112
    Billets dans le blog
    1
    Par défaut un truc simple
    bonjour TLM

    essaye la boucle si dessous

    For j:=N To 1 step -1 Do DATAinverse[N-j+1] =DATA[j]

    je ne suis pas sur que cela fonctione avec excell

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Animateur qualité
    Inscrit en
    Juillet 2023
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Animateur qualité

    Informations forums :
    Inscription : Juillet 2023
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Bonjour Philippe,

    Je me permet de revenir vers vous,

    Après plusieurs essais avec le deuxième code, je n'arrive pas obtenir ce que je souhaite.

    Lors de l'inversion, le code me prend constamment le titre avec, voir PJ, j'aurais besoin que celui ci reste Fixe.

    Nom : Titre a conserver.png
Affichages : 82
Taille : 38,9 Ko

    Autre souci, mon tableau de donnée descend jusqu'à H117 mais l'inversion ne va pas jusqu'au bout.

    Je vous avoue être vraiment perdu avec ce type de code.

    Encore merci pour votre réponse et encore désoler de vous déranger.

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 940
    Points : 28 938
    Points
    28 938
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Autre souci, mon tableau de donnée descend jusqu'à H117 mais l'inversion ne va pas jusqu'au bout.
    C'est tout à fait normal

    Un tableau de données doit idéalement être constitué d'une ligne de titre et d'une première colonne dont toutes les lignes sont remplies, en général par une clé unique et ne pas avoir de cellules fusionnées.
    Il est évident que vos données si je me réfère à votre l'illustration, ne suivent pas cette règle.

    Si vous voulez continuer à fonctionner de cette manière, c'est à vous de définir la plage de cellule et modifier la ligne 6 du code que j'ai publié
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set oRange = ThisWorkbook.Worksheets("Feuil2").Range("F2").CurrentRegion
    Cette ligne de code correspond à ce que l'on doit faire manuellement pour sélectionner un tableau. Faite l'expérience en sélectionnant la cellule F2 ou l'adresse que vous avez modifiée, et utiliser la touche de raccourci Ctrl + * (du pavé numérique)
    La sélection résultante est la plage qui est traitée dans le programme soit la variable objet oRange

    [EDIT]
    J'ajoute que pour travailler efficacement avec les données dans excel, il faut utiliser les tableaux structurés


    Pour en savoir plus sur les tableaux structurés

    Le premier est pour son utilisation manuelle et le second pour sa programmation

    Illustration de trois situations où l'on fait un Ctrl + * à partir de la cellule B2 soit la propriété CurrentRegion de l'objet Range
    Ici il n'y a pas de cellules fusionnées qui je le rappelle ne permet alors de trier, filtrer et synthétiser les données à l'aide d'un tableau croisé dynamique

    Ce qui donnera comme adresse de l'objet oRange pour les tableaux 1 et 3 B2:E17 et pour le 2ème B2:E2

    Nom : 230808 dvp CurrentRegion.png
Affichages : 40
Taille : 238,5 Ko

    et ici avec cellules fusionnées en ligne 1 de B à E, la même instruction renverra pour oRange A2:E17 et donc impossible de filtrer, trier et utiliser la procédure que j'ai proposée

    Nom : 230808 dvp CurrentRegion_Fusion.png
Affichages : 40
Taille : 22,9 Ko

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Animateur qualité
    Inscrit en
    Juillet 2023
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Animateur qualité

    Informations forums :
    Inscription : Juillet 2023
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Merci beaucoup, cela fonctionne parfaitement !

    J'aurais une autre questions,

    J'ai réussi à mettre en place le filtre automatique dans le fichier ou je vais chercher les données à copier dans mon fichier de travail.

    Une fois les données filtrées (Par exemple Epicéa, G24), avant de les copier, je souhaiterais que soit sélectionné les 100 dernières valeur rentrées, car j'ai besoin de faire mes analyse sur les dernières valeurs renseignées par la machine.

    Si la dernière ligne renseigné par la machine est la ligne 127, je souhaiterais copier les données de la ligne 127 à 27.

    J'aurais besoin aussi d'une validation car les essais ne doivent pas dépasser plus de 6 mois. Donc entre les dernières date testées et les dates actuel il ne doit pas y avoir plus de 6 mois. J'ai essayé avec des incrémentations de formule mélangé avec des dates mais rien ne fonctionne correctement.

    Je vous remercie énormément pour votre aide, cela grandement m'aider dans mon travail.

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 940
    Points : 28 938
    Points
    28 938
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Idéalement dans un forum, on pose une question par thème sinon le titre de la discussion ne correspond plus aux réponses déposées.
    Plus vous décomposerez votre problème en petits morceaux, en déposant pour chacun une question dédiée, plus vous multiplierez vos chances d'obtenir des réponses pertinentes.

    Si votre tableau source est celui que vous devez filtrer ainsi que les lignes à copier (les 100 dernières) est indépendant de celui qui est la cible, je vous encourage à vous tourner vers Power Query qui est l'outil dédié au manipulation et transformation des données. Vous développerez 10 plus vite qu'avec le VBA et surtout comme vous l'avez dit en début de discussion vous débutez en VBA.

    C'est la première question que je pose aux participants qui suivent mes formations VBA. Pourquoi voulez-vous utiliser le VBA et dans 90% c'est manipuler les données et je réponds, inscrivez-vous à une formation Power Query et après une courte présentation, ils sont convaincus
    Il est plus constructif d'investir du temps à l'apprentissage de ce produit qu'en VBA si votre but principal est de manipuler les données.
    Une grosse partie des manipulations se font avec des commandes natives de l'éditeur Power Query sans devoir apprendre le langage M

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Animateur qualité
    Inscrit en
    Juillet 2023
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Animateur qualité

    Informations forums :
    Inscription : Juillet 2023
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    D'accord je vais me pencher sur le sujet,

    En tout cas je vous remercie énormément pour votre aide et le temps que vous m'avez consacrer.

    Je vous souhaite une bonne continuation.

  11. #11
    Membre averti Avatar de Dinytro
    Profil pro
    Inscrit en
    Août 2003
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 392
    Points : 395
    Points
    395
    Par défaut
    Je me permets de répondre en suggérant sur ce type de cas de se pencher sur du POWER QUERY qui est particulièrement adapté pour ce genre de traitement et qui est également à mon sens bien plus performant que des boucles de macro...

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/01/2018, 08h54
  2. [XL-2007] Besoin d'aide pour améliorer mon code copier-coller
    Par capi81 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 31/07/2014, 16h14
  3. Demande d'aide pour query difficile
    Par ericjean514 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 22/02/2005, 18h52
  4. Demande d'aide pour une requête
    Par arkzor dans le forum Requêtes
    Réponses: 3
    Dernier message: 28/12/2004, 02h40
  5. [TPW][cours]Demande d'aide pour finir un programme
    Par jf dans le forum Turbo Pascal
    Réponses: 21
    Dernier message: 16/06/2003, 18h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo