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 :

Copie d'une ligne dans une table 2D grâce à une fonction [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
    Mai 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 24
    Par défaut Copie d'une ligne dans une table 2D grâce à une fonction
    Re-Bonjour,

    Je fais à nouveau appel à votre aide pour un problème de macro et de table VBA.

    Je souhaiterais, dans une macro :
    1) Créer une "ligne" (tableau 1D) à partir de valeurs données.
    2) Copier/coller cette ligne dans un tableau existant (remplacer la ligne existantes)
    3) Faire appel à une fonction "transfert"
    -qui prend comme paramètre le tableau d'origine et le numéro de la ligne dont on souhaite récupérer les données
    -qui renvoie comme résultat un tableau 1D dont les données auront été renseignées par la fonction.

    J'ai écris quelques bouts de code mais je pense que ma syntaxe est fausse. Y-aurait-il une syntaxe appropriée, ou devrais-je ajouter des boucles ?

    Exemple :

    Tableau1
    Nom Prénom Age Ville
    Antoine Dupré 30 Paris
    Luc Leblanc 35 paris
    Renaud Marc 40 nantes


    Tableau2
    Nom Ville
    0 0
    0 0
    0 0

    La création de la ligne ressemblerait à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim ligne(4) As Varient
    ligne(*)=Tableau1(2,*)
    La fonction transfert ressemblerait à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim transfert(Tableau, numLigne)
    	OutputLigne(1) = tableau(numLigne,1)
    	OutputLigne(2) = tableau(numLigne,4)
    End function
    On l'utiliserait de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Tab2(2, *) =transfert(Tableau1, 3)
    Le résultat serait le suivant :
    Tableau2
    Nom Ville
    0 0
    Renaud Nantes
    0 0

    Je vous remercie d'avance pour vos réponses, n'hésitez pas à me dire si mon message n'est pas clair.

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    une piste, j'ai crée deux plages de tableaux assez triviales

    je te laisse adapter et tester
    ici, j'ai transféré la ligne 1 vers la ligne 1

    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
    Sub Transfert(PlageSource As Range, LigSource As Long, PlageDest As Range, LigDest As Long)
     
    PlageDest.Cells(LigDest, 1) = PlageSource.Cells(LigSource, 1)
    PlageDest.Cells(LigDest, 2) = PlageSource.Cells(LigSource, 4)
     
    End Sub
     
    Sub essai()
     
    Dim Plage As Range
    Dim Plage2 As Range
    Set Plage = Sheets("Feuil3").Range("A2", "D6")
    Set Plage2 = Sheets("Feuil3").Range("G2", "H3")
     
    Call Transfert(Plage, 1, Plage2, 1)
     
    End Sub

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 24
    Par défaut
    Je suis parti de ton code et j'ai adapté, et après débogage... ça fonctionne !
    J'ai utilisé un type "Variant" pour les plages.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Transfert(PlageDest As Variant, LigDest As Integer, PlageSource As Variant, LigSource As Integer)
    PlageDest(LigDest, 1) = PlageSource(LigSource, 1)
    PlageDest(LigDest, 2) = PlageSource(LigSource, 4)
    End Sub
     
    Sub essai()
    Dim Plage As Variant, Plage2 As Variant
    Plage = Range("A1:D80").Value
    Call Transfert(Plage2, 1, Plage, 3)
    Range("A1:B10").Value = Plage2
    End Sub
    Merci beaucoup pour le coup de main !

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Ravi pour toi

    deux petites question :
    - pourquoi avoir basculé en variant ?
    - ton exemple ne contient pas de valeur pour Plage2, c'est un oubli ?

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 24
    Par défaut
    Vu que je travaillais déjà en Variant, j'ai gardé le même type. Mais j'ai pas vraiment de raison d'utiliser Variant plutôt que Range.
    J'ai édité mon message en corrigeant quelques erreurs.

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

Discussions similaires

  1. [DOM] Ajout dynamique d'une ligne dans un <table>
    Par Alzelus dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 23/05/2007, 18h05
  2. Requête pour copie rapide d'une ligne dans la table ?
    Par renaud26 dans le forum Requêtes
    Réponses: 1
    Dernier message: 17/10/2006, 10h52
  3. Rendre visible ou non une ligne dans un Table
    Par pmboutteau dans le forum ASP
    Réponses: 6
    Dernier message: 10/11/2005, 17h09
  4. language SQL - Copier une ligne dans autre table
    Par fxd dans le forum Langage SQL
    Réponses: 1
    Dernier message: 26/10/2005, 19h16
  5. Effacer une ligne dans la table nat
    Par vbcasimir dans le forum Sécurité
    Réponses: 2
    Dernier message: 11/01/2004, 01h15

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