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 :

Transfert de lignes d'une feuille à l'autre - VBA


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
    Ecole d'Ingénieur en alternance
    Inscrit en
    Mars 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ecole d'Ingénieur en alternance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2017
    Messages : 13
    Par défaut Transfert de lignes d'une feuille à l'autre - VBA
    Bonjour à tous,

    ceci est mon premier post sur ce site, qui aide de façon considérable depuis une semaine le novice que je suis.
    Pour mieux comprendre mon problème (qui est multiple et complexe pour moi...), voici le contexte de mon travail :

    J'ai trois feuilles principales.
    La feuille "Interface CE" sur laquelle on peut entrer une nouvelle demande via un userform, dont les données saisies s'inscrivent sur une ligne dans un tableau en rouge.
    J'ai créé un bouton "Envoyer" pour repérer ces lignes en rouge et les transférer dans la feuille "Interface Prépa" et les passer alors en jaune.
    A travers cette feuille "Interface Prépa", j'aimerais que le salarié puisse sélectionner les lignes qu'il souhaite, entrer son nom via un userform, les valider (et les passer en vert) et enfin les envoyer à nouveau dans la feuille "Interface Prépa" où elles apparaissent en vert.
    Pour finir, un bouton "Archiver" qui transfère les lignes en vert vers une troisième feuille "Archives" et qui réorganise les tableaux des autres feuilles pour ne pas avoir de lignes vides.

    Au niveau de la saisie des données, j'ai réussi à me débrouiller (sûrement de façon peu orthodoxe). Mais dès qu'il s'agit de sélectionner des lignes précises, de les copier et de les transférer.....c'est le chao.

    Alors je met à disposition en P.J. mon travail en espérant que quelqu'un de plus doué que moi parvienne à comprendre mon problème et arrive à le traiter.

    Merci infiniment d'avance pour toutes vos aides !

    Suivis des Préparations.xlsm

  2. #2
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour et bienvenue au forum

    Conformément aux règles du forum, évite d'envoyer des fichier (surtout des le premier message de la discussion). Décris ton problème dans le message, donne éventuellement des captures d'écran si nécessaire et écris ton code entre balises (bouton # lors de l'écriture du message).
    Néanmoins, sans regarder ton fichier, voici ce que je peux te dire :
    http://bidou.developpez.com/article/VBA/ Voici un tuto pour VBA. Je te le mets, car cela m'étonne que tu arrivés à te débrouiller avec les saisie dans un userFrom, mais tu n'arrives pas à sélectionner une ligne précise. La deuxième opération étant bien plus simple.
    En VBA, si on veut, par exemple, attribuer une valeur à une cellule, 2 syntaxes sont possible (pour la cellule A2, par exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("A2").Value = "toto"   'ou
    Cells(2, 1).Value = "toto"
    Copier une ligne entière (et pas seulement une cellule) se fait de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("1:1").Copy   'ou
    Rows(1).Copy
    Pour copier-coller : je ne vais pas te donner la solution directement. Utilise l'enregistreur de macro : c'est ton grand ami en VBA, surtout lorsqu'il s'agit d'opérations qui se font facilement "manuellement" en Excel.
    Tu veux travailler sur plusieurs feuille : alors, il faudra veiller à bien préciser dans quelle feuille tu effectueras tes différentes operations. Pour reprendre l'exemple où on attribue une valeur à la cellule A2. Si cette cellule est dans la feuille nommée "maFeuil", alors on écrira :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("maFeuil").Range("A2").Value = "toto"
    J'espère que tu pourras déjà bien avancer avec ceci. Reviens vers nous avec ton code si tu as encore des problèmes

  3. #3
    Membre averti
    Homme Profil pro
    Ecole d'Ingénieur en alternance
    Inscrit en
    Mars 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ecole d'Ingénieur en alternance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2017
    Messages : 13
    Par défaut
    C'est très sympa de venir m'aider,

    effectivement, c'est la première fois que je poste sur le forum alors je n'en maîtrise pas encore les ficelles !

    Pour ce qui est de mon travail, voici quelques captures d'écran des différentes feuilles :

    Feuille "Interface CE" dans laquelle le chef d'équipe entre une nouvelle demande via le userform
    Puis via le bouton "Envoyer", est censé copié la demande correctement à la feuille "Interface Prépa"

    Nom : interface CE.PNG
Affichages : 3261
Taille : 56,7 Ko

    Feuille "Interface Prépa" à travers laquelle le préparateur reçoit la demande (en jaune)
    Puis la traite. Dans le meilleur des monde, une checkbox à chaque ligne (située colonne A) de demande pour sélectionner précisément et les traiter ensemble.
    Avec un le bouton "Valider", la demande passe en vert dans les deux feuilles (Interface CE et Interface Prépa).

    Nom : interface prepa.PNG
Affichages : 3091
Taille : 22,3 Ko

    Feuille "Archives" dans laquelle toutes les demandes traitées sont stockées

    Nom : archives.PNG
Affichages : 3075
Taille : 23,8 Ko


    Est-ce plus clair comme cela ?
    En résumé je suis complètement bloqué lors de l'identification des lignes : savoir reconnaître que le contenu de la ligne dans une feuille est identique à celle dans une autre et la modifier (changer sa couleur de remplissage) mais aussi lier un checkbox à une ligne par exemple.

    Enfin, lorsque j'archive les demande traitées, j'aimerais que toutes les lignes se juxtaposent (pas de lignes vides) et qu'elles se réordonnent selon leur numéro ID.

    Voilà... j'espère que quelqu'un aura du temps à me consacrer ! Parce que je pense que mes questions requièrent du temps et de l'énergie, j'en suis très conscient !

    Merci à la communauté et au génie qui sommeille en vous ;-)

  4. #4
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    savoir reconnaître que le contenu de la ligne dans une feuille est identique à celle dans une autre
    Est-ce qu'il faut vérifier que toutes les cellules de la ligne sont indentiques ou seulement le n° d'identification (première colonne) suffit?
    Cas seulement le n° : Pour vérifier que 2 cellules ont la même valeur, on écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Sheets("Feuil1").Range("A1").Value = Sheets("Feuil2").Range("A1").Value Then
        'je fais ce que j'ai à faire
    End If
    Cas toute la ligne : Je pense que le plus simple est de créer une fonction que tu utiliseras quand tu en as besoin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function lignesEgales(feuille1 As Worksheet, feuille2 As Worksheet, ligne1 As Long, ligne2 As Long) As Boolean
        Dim i As Long
        For i = 2 To 14             'boucle sur toutes les colonnes concernées.
            If feuille1.Cells(ligne1, i).Value <> feuille2.Cells(ligne2, i).Value Then          'si les valeurs 2 cellules ne sont pas égales
                  lignesEgales = False  
                  Exit Function            'il y a au moins une différence --> on peut sortir de la fonction
            End If
        Next i
        lignesEgales = True    'si on arrive jusqu'isi, c'est qu'il n'y a eu aucune différence
    End Function
    Ceci renverra true si les deux lignes sont égales, false sinon.
    Y a plus qu'à utiliser la fonction au bon moment dans ton code.

    la modifier (changer sa couleur de remplissage)
    J'imagine que tu sais comment faire cela manuellement sur Excel? Alors ,utilise l'enregistreur de macro pour obtenir le code associé.

    lier un checkbox à une ligne par exemple
    Que veux-tu faire avec cela? Je n'oserai pas trop m'aventurer là-dedans. Est-ce pour repérer certaines lignes? Si c'est le cas, impose plutôt à l'opérateur d'écrire "x" dans une colonne, puis repère les lignes grâce à cela ou tu utilises une macro évènementielle et plus précisemment Worksheet_SelectionChange qui fait apparaître un "x" quand on sélectionne la cellule d'une certaine colonne et qui enlève le "x" s'il y en a déjà un.

    toutes les lignes se juxtaposent (pas de lignes vides)
    Intéresse-toi à la propriété SpecialCells(xlCellTypeBlanks) qui permet de sélectionner les cellules vides d'une plage. Une fois que tu as sélectionné toutes le cellules vides dans une certaine plage, tu peux les supprimer. Comment supprimer --> utilise l'enregistreur de macro pour savoir. Mais petit indice : ce sera avec la méthode Delete.
    Je te conseille de faire en sortes que quand tu enlèves une ligne d'une de tes bases de données, tu supprimes cette ligne directement. Comme ça, tout sera directement prêt à chaque fois.

    qu'elles se réordonnent selon leur numéro ID.
    Intéresse-toi aux tableaux dans Excel. Ce tuto: http://silkyroad.developpez.com/excel/tableau/ explique comment manipuler les tableaux "manuellement" sur Excel, mais avec l'enregistreur de macro tu trouveras tous les codes associés aux operations que tu veux faire.


    Ce sont plein de pistes à explorer et à digérer Je te conseille de prendre un peu de temps pour tout bien comprendre, car ton projet est quand même assez conséquent.
    Attention, tous les codes obtenus par enregistreur de macro sont à adapter ! Ce sont justes des bases à adapter.

    Bon courage

  5. #5
    Membre averti
    Homme Profil pro
    Ecole d'Ingénieur en alternance
    Inscrit en
    Mars 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ecole d'Ingénieur en alternance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2017
    Messages : 13
    Par défaut
    Citation Envoyé par riaolle Voir le message

    Que veux-tu faire avec cela? Je n'oserai pas trop m'aventurer là-dedans. Est-ce pour repérer certaines lignes? Si c'est le cas, impose plutôt à l'opérateur d'écrire "x" dans une colonne, puis repère les lignes grâce à cela ou tu utilises une macro évènementielle et plus précisemment Worksheet_SelectionChange qui fait apparaître un "x" quand on sélectionne la cellule d'une certaine colonne et qui enlève le "x" s'il y en a déjà un.
    Merci !
    J'ai résolu le problème d'identification des lignes en m'inspirant de cette méthode

    Voici mon code pour ceux que ça intéresse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
     
    With Sheets("Interface Prépa")
     
      If Not Intersect([A5:A65536], Target) Is Nothing Then Target.Value = IIf(Target.Value = "", "X", "")
      Cancel = True
     
     
    End With
     
    End Sub
    Et voici le rendu :
    Nom : Capture.PNG
Affichages : 3143
Taille : 29,1 Ko

  6. #6
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Super
    Par contre, je t'invite à lire l'aide sur le boc With : https://msdn.microsoft.com/en-us/library/wc500chb.aspx Ca n'influence pas vraiment ton code, mais tu n'as pas besoin de ce bloc With, ici.
    En effet, ici, il ne te sert à rien. Pour 2 raisons :
    1. Tu ne l'utilises pas correctement : tu oublies le point avant les éléments qui doivent se rapporter au bloc With (cf.aide)
    2. L'évènement est propre à la feuille et se produit, ici, si la feuille est active, donc ça ne sert à rien de spécifier la feuille puisque tu es sûr qu'elle est active.

Discussions similaires

  1. Réponses: 4
    Dernier message: 23/08/2013, 18h13
  2. [XL-2007] Copier dernière ligne d'une feuille vers autre classeur fermer
    Par stephadm dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 17/04/2012, 11h13
  3. Macro automatique pour passer une ligne d''une feuille à l'autre
    Par ElPibeOro dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/04/2012, 11h58
  4. transfert de données d'une feuille à d'autres
    Par cline01 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/07/2010, 22h36
  5. [E-03] Transfert des informations d'une feuille à l'autre
    Par janobrasil dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/10/2008, 12h42

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