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 :

Ajouter une ligne à un Range comme on peut le faire pour un tableau [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 21
    Par défaut Ajouter une ligne à un Range comme on peut le faire pour un tableau
    Bonjour à toutes et à tous

    J'ai réalisé deux petites macros après avoir crée un tableau sous excel, c'est à dire dans accueil -> Style -> Mettre sous forme de tableau

    Mes macros servaient simplement au clic sur un bouton "+" ou sur un bouton "-" à ajouter, ou retirer une ligne à mon tableau. ça marchait parfaitement, et l'ajout ou la suppression d'une ligne n'impactait rien d'autre que mon tableau (ça c'est très important et c'était super cool )

    Sauf que voilà ... une fois tout fier de moi j'ai remis le partage du classeur actif, puisque ce classeur doit être partagé ... et là, c'est le drame

    Bref comme vous le savez surement il n'est pas possible d'utiliser ces tableaux lorsque le fichier est partagé ... Donc me voilà en train de farfouiller à la recherche d'une solution alternative pour reproduire précisément le même comportement qu'auparavant, à savoir l'ajout ou le retrait d'une ligne, d'un Range du coup, sans impacter quoi que ce soit d'autre ...

    Sous entendu Range.Insert ne me convient pas puisque cela ajoute une ligne complète dans tout le fichier, et si j'ai un autre range à côté, je ne veux pas lui ajouter une ligne ...

    Bien qu'étant habitué à chercher sur les internets ( ) je n'ai pas trouvé réponse à ma question ...


    Auriez vous une idée de comment faire ?

    Vous remerciant par avance,

    Free =)

  2. #2
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour Free, bonjour le forum,

    Le bouton + ajoutait :
    • une ligne au-dessus de la cellule active ?
    • une ligne au-dessous de la cellule active ?
    • en début de tableau ?
    • en fin de tableau ?

    Précise aussi pour le bouton -...


  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 21
    Par défaut
    Oups pardon

    Mon bouton "+" servait à ajouter une ligne en fin de tableau =)

    Mon bouton "-" servait à chercher une donnée à supprimer, et ne faisait que barré les données de la ligne recherchée (j'n'ai pas besoin de plus, ce comportement convient)


    Merci d'avance

  4. #4
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Re,

    Comme tu ne daignes donner aucune indication sur où commence la plage j'ai chois A1 (au pif...) pour le code ci-dessous. Tu adapteras si c'est pas ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Macro1()
    Dim O As Worksheet 'déclare la variable O (Onglet)
    Dim TC As Variant 'déclare la variable TC (Tableau de Cellules)
    Dim NL As Integer 'déclare la variable NL (Nombre de Lignes)
    Dim NC As Integer 'déclare la variable NC (Nombre de Colonnes)
     
    Set O = Sheets("Feuil1") 'définit l'onglet O (à adapter à ton cas)
    TC = O.Range("A1").CurrentRegion 'définit le tableau de cellules TC
    NL = UBound(TC, 1) 'définit le nombre de lignes NL du tableau de cellules TC
    NC = UBound(TC, 2) 'définit le nombre de colonnes NC du tableau de cellules TC
    O.Cells(NL, 1).Resize(1, NC).Copy O.Cells(NL + 1, 1) 'copie la dernière ligne de la plage et la colle dans la ligne en dessous
    O.Cells(NL + 1, 1).Resize(1, NC).ClearContents 'supprime le contenu de la ligne collée
    End Sub

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 21
    Par défaut
    non non il n'y a rien que je ne veuille pas dire Thautheme désolé, juste j'ai pas considéré que c'était utile comme info, en général je suis là pour obtenir une solution générique que j'adapterai et qui marchera tout le temps, je ne demande pas à ce qu'on me ponde un code que j'n'ai plus qu'à copier coller

    Quoi qu'il en soit je te remercie infiniment de me consacrer un peu de ton temps !

    Le code que tu m'as fourni ne génère aucune erreur ça tourne bien, néanmoins ça n'fait ni ce que j'attends, ni visiblement ce que tu indiques en commentaire

    C'est surement ma faute, je n'ai pas été suffisamment claire je m'en excuse.

    Ce que j'attends
    La plage A1:A5 est nommée "Plage1" par exemple, et contient dans chaque cellule une information (un prénom). A l'aide d'un bouton "+" je souhaite que la cellule A6 soit désormais incluse dans Range("Plage1")

    L'idéal, le top du top, serait également, que ça ait le comportement de décaler tout ce qui était en dessous (à partir de A7). ça c'est pour éviter la situation ou ma plage "Plage1" ne vienne mordre sur je ne sais quoi qui se trouverait en dessous...

    Si ces points sont respectés, on retrouve précisément le comportement que j'avais obtenu à l'aide d'un tableau. Toutefois si ça ne décale pas les cellules vers le bas (et UNIQUEMENT celles sous la plage, pas les B* par exemple) ça n'est pas dramatique je m'arrangerait pour qu'il n'y ait jamais rien en dessous d'ma plage "Plage1")

    Ce que tu indiques en commentaire
    Je comprends l'idée bien entendu, néanmoins chez moi ça n'modifie strictement rien, ma plage reste celle de base, si c'était A1:A6 avant de cliquer sur "+", ça l'est toujours après, et je n'ai vu aucune copie d'ailleurs (en mettant des points d'arrêts après la copie justement)

    D'ailleurs le resize m'étonne un peu Resize(1, NC) -> on redimensionne à (1,1) ? au final nul part dans le code on a changé la taille de toute la plage ?

    Voilà je ne dis pas non à deux trois explications si tu le veux bien sur ton code =)


    Par avance, merci

  6. #6
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Re,

    Arf, tu parlais d'une plage nommée !... Ok je comprends mieux et je revoie la copie...

    [Édition]
    Essaie ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Macro1()
    Dim O As Worksheet 'déclare la variable O (Onglet)
    Dim NL As Integer 'déclare la variable NL (Nombre de Lignes)
     
    Set O = Sheets("Feuil1") 'définit l'onglet O (à adapter à ton cas)
    NL = Range("plage1").Rows.Count 'définit le nombre de lignes NL de la plage nommée "plage1"
    O.Cells(NL + 1, 1).Copy 'copy la première ligne sous la plage nommée "plage1"
    O.Cells(NL + 1, 1).Insert Shift:=xlDown 'insère une cellule
    O.Range("plage1").Resize(O.Range("plage1").Rows.Count + 1, 1).Name = "plage1" 'redéfinit la plage nommée "plage1"
    Application.CutCopyMode = False 'supprime le clignotement lié à l'insertion de la cellule
    Range("plage1")(1).End(xlDown).Offset(1, 0).Select 'sélectionne la cernière cellule de "plage1"
    End Sub

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/05/2012, 09h31
  2. peut on ajouter une ligne dans un dblookupcombobox?
    Par moustaf_26 dans le forum Composants VCL
    Réponses: 4
    Dernier message: 02/11/2011, 19h34
  3. [JTable] ajouter une ligne
    Par rvfranck dans le forum Composants
    Réponses: 3
    Dernier message: 30/03/2005, 14h25
  4. Ajouter une ligne à un tableau
    Par Oluha dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 16/02/2005, 15h20
  5. Ajouter une ligne dans une liste via un POPUP
    Par seblo_scoqi dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/01/2005, 16h20

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