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 :

Copier une ligne d'un tableau


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 6
    Par défaut Copier une ligne d'un tableau
    Bonjour à vous,

    Je viens vers vous car je galère un peu dans mon programme... Je m'explique :

    J'ai un formulaire qui envoie dans un tableau sur la ligne 4, sur cette ligne, j'ai déjà pas mal de macros qui reprennent ces infos donc super important.

    Le problème, c'est que quand je fais un deuxième formulaire/troisième/quatrième... ma nouvelle ligne dans mon tableau va écraser l'éxistant, donc elle ne passe pas par la ligne 4.

    Mon idéal, chaque nouveau formulaire passe par la ligne 4, s'il y avait déjà des infos, elles partent automatiquement à la ligne d'en dessous.

    Ça parait simple et pourtant, je n'y arrive pas, faut dire que je débute.

    Désolé si le sujet a déjà été traité...

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        Sheets("Base de données").Select
        valeurA4 = Range("A4").Value
        If valeurA4 = "" Then
        Range("A4").Select
        Rows(ActiveCell.Row).Select '(sélection de la ligne à déplacer)
        Selection.Cut
        ActiveCell.Offset(1, 0).Range("A1").Select
        ActiveSheet.Paste
        Else
        Range("A4").Select
        ActiveCell.Offset(-1, 0).Range("A1").Select
        ligne_active_base = ActiveCell.Row
     
        End If
    MERCI pour votre aide

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut ligne suivante
    Bonjour,

    J'avoue ne pas voir clairement où tu veux en venir.

    Pour ce qui est de ton code brut, je peux te suggérer une simplification (non testé)

    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
    Public Sub Essai()
        Dim macell As Range
        Set macell = Sheets("Base de données").Range("A4")
        With macell
                valeurA4 = .Value
                If valeurA4 = "" Then
                        .EntireRow.Cut
                        .Offset(1, 0).Paste
                Else
                        .Offset(-1, 0).Select
                        ligne_active_base = ActiveCell.Row
                End If
         End With
         set macell = Nothing
    End Sub
    Maintenant, si tu veux tester la valeur de ta cellule A4, tu peux coder

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Sub Essai2()
        Dim macell As Range
        Set macell = Sheets("Base de données").Range("A4")
        Set macell = macell.Offset(IIf(macell.Value = "", 0, 1), 0)
    End Sub
    Il ne reste plus dès lors qu'à utiliser ta variable de cellule macell comme destination de copie.

    Reviens si nécessaire en précisant (cellules de départ et de destination, ...)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 6
    Par défaut
    MP.... et Merci MarcelG

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 6
    Par défaut Marche pas
    J'ai bien eu ton MP Marcel, pas de soucis,

    Par contre, je n'arrive pas à joindre mon fichier à ce message...

    E gros, j'ai mon code source que suit :

    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
    31
    32
    33
    34
    35
    Sub transpose_dans_tableau()
     
    'atteindre le formulaire et mémoriser les données
        Sheets("formulaire").Select
        Range("B1:B11").Select
        Selection.Copy
    'test pour déterminer le ligne ou coller les infos du formulaire
        Sheets("Base de données").Select
        valeurA4 = Range("A4").Value
        If valeurA4 = "" Then
        Range("A4").Select
        Else
        Range("A3").Select
        Selection.End(xlDown).Select
        ligne_active_base = ActiveCell.Row
        Range("A" & ligne_active_base + 1).Select
        End If
     
    'Memorise le N° de la ligne ou coller les données'
        ligne_active_base = ActiveCell.Row
    'Colle avec transposition'
        Range("A" & ligne_active_base).Select
        Selection.PasteSpecial Paste:=xlPasteAllExceptBorders, _
        Operation:=xlNone, SkipBlanks:=False, Transpose:=True
    'vider le formulaire'
        Sheets("formulaire").Select
        Range("B1:B11").Select
        Selection.ClearContents
        Range("B1").Select
    'retourner au tableau'
        Sheets("base de données").Select
        Range("A3").Select
     
     
    End Sub
    J'ai également mon formulaire :

    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
    Sub transpose_dans_tableau2()
     
    'Atteindre le formulaire et mémoriser les données
    Sheets("formulaire").Select
    Range("B1:B8").Select
    Selection.Copy
     
     
    'Test pour determiner la ligne où coller les infos dans le tableau'
    Sheets("Base de données").Select
    i = 3
    While (Not (Range("a" & i) = ""))
    i = i + 1
    Wend
    Range("A" & i).Select
    Selection.PasteSpecial Paste:=xlPasteAllExceptBorders, _
    Operation:=xlNone, SkipBlanks:=False, Transpose:=True
     
     
    'Rendre vierge le formulaire
    Sheets("formulaire").Select
    Range("B1:B8").Select
    Selection.ClearContents
    Range("B1").Select
     
    'Retourner dans le formulaire
    Sheets("formulaire").Select
    Range("B1").Select
     
    End Sub
    Le but du jeu est d'avoir quelque chose comme ça, tout en sachant que toutes les informations de mon formulaires doivent passer pour la première fois sur la ligne 4. pour pouvoir générer une macro et sortir un fichier .txt



    Le problème que j'ai, c'est que, le premier formulaire va bien à la ligne 4 mais le deuxième va à la ligne 5...

    Merci pour votre aide !!!!!! J'en ai grandement besoin !
    Images attachées Images attachées  

  5. #5
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut copie
    Salut,

    Si j'ai bien compris, on colle vers la cellule A4.
    Si cette cellule n'est pas vide, alors on considère la 1ère cellule vide de la colonne A

    Donc
    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
     
    Public Sub essai2()
        'Recherche de la cellule de destination
     
        'Définition d'une variable objet Range
        Dim macell As Range
     
        'Valeur initiale = cellule A4
        Set macell = Sheets("Base de données").Range("A4")
     
        'Si la cellule initiale n'est pas vide, alors on considère la 1ère cellule libre
        If macell.Value <> "" Then
            lastlign = Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Row
            Set macell = Range("A" & lastlign)
        End If
     
        'On effectue la copie vers la cellule de destination
        Sheets("formulaire").Range("B1:B11").Copy
        macell.PasteSpecial Paste:=xlPasteAllExceptBorders, Transpose:=True
        Application.CutCopyMode = False
     
        'On réinitialise la feuille formulaire
        Sheets("formulaire").Range("B1:B11").ClearContents
     
        'On vide la variable
        Set macell = Nothing
     
    End Sub
    Et, par pitié, efface tous les "Select".
    VBA procède directement par Action et non par Selection puis Action, comme le laiise entendre l'enregistreur, ce qui n'enlève rien à son utilité.

    Reprends-bien cette proposition de code pour le comprendre.
    Effectue un test en l'adaptant si nécessaire.
    Reviens le cas échéant pour plus de précisions.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 6
    Par défaut Merci
    Bon Marcel, je lâche l'affaire de cette façon là, trop compliqué pour moi...

    Par contre, j'ai trouvé une autre solution mais un autre problème également...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NouveauTexte = ThisWorkbook.Path & "\" & Range("E3") & ".txt"
    Cette ligne me permet d'enregistrer un fichier text avec comme argument la valeur comprise dans la cellule E3... GENIAL...

    Mais, c'est pas le bon onglet, c'est pas le "thisworkbook.path" la source mais la "Feuil 2"... donc évidement, ça ne marche pas...

    Une idée ?

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

Discussions similaires

  1. macro copier coller une ligne d'un tableau dans une autre feuille
    Par sonichou dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 27/07/2011, 22h13
  2. [XL-2007] copier une une ligne d'un tableau en fonction de la valeur de la première cellule
    Par mentat dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/12/2009, 11h49
  3. copier une ligne entière d'un tableau vers un autre
    Par ktulu77 dans le forum VBA PowerPoint
    Réponses: 3
    Dernier message: 15/09/2008, 09h12
  4. Réponses: 2
    Dernier message: 04/07/2008, 14h24
  5. copier une ligne dans une autre table
    Par BoeufBrocoli dans le forum SQL
    Réponses: 5
    Dernier message: 24/10/2003, 22h59

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