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

Macros et VBA Excel Discussion :

Suppression de colonne et de ligne d'un tableau en VBA [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2022
    Messages : 6
    Par défaut Suppression de colonne et de ligne d'un tableau en VBA
    Bonjour,
    Je n'arrive pas à faire ce que je veux j'ai essayé plusieurs choses mes cela ne fonctionne pas
    Je vous explique: J'ai un tableau sur une feuille qui contient plus de 900 lignes et une 15ème de colonnes
    J'ai réalisé un VBA avec un Userform avec une combobox qui permet de sélectionner un nom dans la colonne 1, une fois le choix validé,
    cela crée une nouvelle feuille, avec un tableau, qui normalement ne devrai contenir que les lignes ayant le nom sélectionné et qui en plus devrait n'avoir que quelques colonnes de plus après que le second tableau soit créé il faut que la colonne 1 contenant le nom disparaisse également
    N'étant pas hyper doué en VBA je me tourne vers une âme charitable

    J'ai mis 2 captures une avec l'extrait du tableau complet et l'autre le résultat escompté
    Nom : Capture d’écran 2022-11-03 214449.jpg
Affichages : 434
Taille : 199,2 Ko
    Nom : Capture d’écran 2022-11-03 214715.jpg
Affichages : 389
Taille : 32,0 Ko

    Si vous pouvez m'aider je vous serai bien reconnaissant

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour dregniez

    Est-il possible d'avoir le fichier et/ou le code 🤔

    A+

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 524
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 524
    Par défaut
    Salut,

    As-tu pensé à Power Query ?

  4. #4
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 437
    Par défaut
    Bonjour,

    Juste pour donner quelques idées, un petit exemple utilisant ce code au niveau du formulaire contenant une zone de liste.
    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
    23
    24
    25
    26
    27
    28
    29
    30
    Option Explicit
     
    Private Sub ListBox1_Click()
        Dim sQuery As String, k1 As Long, k2 As Long
        '--- récupère la requête en cours et y remplace le nom du détenteur actuel
        sQuery = ThisWorkbook.Queries("SelonNom").Formula
        k1 = InStr(sQuery, "[DETENTEUR] = ")
        k2 = InStr(k1, sQuery, ")")
        sQuery = Left(sQuery, k1 + 14) & Me.ListBox1.Text & Mid(sQuery, k2 - 1)
        'Debug.Print sQuery
        '--- supprime et remet la requête modifiée avec le nouveau détenteur
        ThisWorkbook.Queries("SelonNom").Delete
        ThisWorkbook.Queries.Add Name:="SelonNom", Formula:=sQuery
        ThisWorkbook.RefreshAll
    End Sub
     
    Private Sub UserForm_Initialize()
        Dim v, e
        v = Range("Tableau1[DETENTEUR]").Value
        With CreateObject("scripting.dictionary")
            .comparemode = 1
            For Each e In v
                If Not .exists(e) Then .Add e, Nothing
            Next
            Me.ListBox1.Clear
            If .Count Then Me.ListBox1.List = Application.Transpose(.keys)
        End With
        ListBox1_Click
        ThisWorkbook.Worksheets("FiltréSurNom").Select
    End Sub
    Cordialement.
    Fichiers attachés Fichiers attachés

  5. #5
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2022
    Messages : 6
    Par défaut
    Bonjour Eric,
    Merci, pour cette belle piste je vais voir comment je peux maintenant l'adapter pour coller au projet

  6. #6
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2022
    Messages : 6
    Par défaut
    Bonjour Eric,
    Je ne connaissais pas du tout cette fonction dans Excel
    Pourrai tu m'en dire plus concernant la façon de créer la requête, car quand je modifie le noms et le nombre de colonne du tableau bien qu'en modifiant dans le VBA et dans la structure de la requête,
    j'ai une erreur "Expression.Error : Jeton RightParen attendu." et en cliquant sur afficher l'erreur dans l'éditeur avancé c'est le terme "Colonnes" de la dernière ligne du Let qui ce met en surbrillance
    Et je ne comprends pas pourquoi
    Merci d'avance

    Cdt.

  7. #7
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 437
    Par défaut
    La requête se construit à l'aide de Power Query.
    a) sélectionner une cellule quelconque dans le tableau de données
    b) aller sur l'onglet "Données", dans le groupe "Récupérer et transformer des données" cliquer sur le bouton "A partir de Tableau ou d'une Plage", ce qui vous affiche le tableau dans la fenêtre Power Query.
    c) dans cette fenêtre vous pouvez supprimer certaines colonnes, ou les déplacer, etc., cela en sélectionnant/déplaçant les titres des colonnes (clic droit pour afficher ce qu'il est possible de faire). Ne pas s'occuper du formatage, il ne s'agit que d'obtenir les données filtrées, triées comme souhaité.
    d) donner un nom à cette requête (en haut dans la bordure à droite) (dans l'exemple que j'ai donné, cette requête a été nommée SelonNom)
    e) sauvegarder cette requête: dans l'onglet "Accueil", cliquer sur "Fermer et charger dans..."
    f) dans la feuille où s'affiche le tableau résultat, on peut s'occuper des formatages (largeurs des colonnes, couleurs, etc.) et de la mise en page.

    Attention: ces requêtes ne s'actualisent pas immédiatement comme cela se produit dans les feuilles de calcul. Il faut aller dans l'onglet "Données" et cliquer sur "Actualiser tout" pour être certain d'avoir les données actualisées (mises à jour). Petit piège donc!

    Pour modifier une requête sauvegardée, dans l'onglet Données, dans le groupe "Requêtes et connexions", cliquer sur "Requêtes et connexions". Cela affiche en bordure à droite la liste des requêtes enregistrées. Double-cliquer sur celle que vous voulez modifier.

    C'est un outil assez extraordinaire ...que je ne maîtrise pas encore vraiment!

    Cordialement.

  8. #8
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2022
    Messages : 6
    Par défaut
    Re bonjour,
    J'ai juste remplacé le terme "DETENTEUR" par "Intervenant" et cela ne fonctionne pas alors que je l'ai changé partout c'est incompréhensible

  9. #9
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 437
    Par défaut
    Cela vient de ce que "Intervenant" a une longueur de 11 caractères alors que "DETENTEUR" a une longueur de 9 caractères. La ligne qui modifie le texte de la requête doit donc aussi être adaptée en:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        sQuery = Left(sQuery, k1 + 16) & Me.ListBox1.Text & Mid(sQuery, k2 - 1)
    Cordialement.

    (Note: il y a aussi un espace devant le titre "Quali", supprimé dans le fichier joint)
    Fichiers attachés Fichiers attachés

  10. #10
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2022
    Messages : 6
    Par défaut
    Bonjour Eric,
    Merci je pensai bien que cela venait du nombre de caractère mais je ne comprenait pas ou tu l'avais modifié,
    Je continu à adapter et je te tiens au courant
    Merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Transposer un tableau de 51 colonnes sur une ligne en un tableau de 12 colonnes
    Par daniel78800 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 25/08/2016, 10h04
  2. Réponses: 4
    Dernier message: 10/12/2013, 10h17
  3. Réponses: 2
    Dernier message: 22/03/2012, 14h18
  4. [XL-2010] Problème de lignes dans un tableau en VBA
    Par fidecourt dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/01/2011, 12h29
  5. Réponses: 1
    Dernier message: 28/09/2010, 17h36

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