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

  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 706
    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 706
    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 : 3315
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 : 3144
Taille : 22,3 Ko

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

    Nom : archives.PNG
Affichages : 3127
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 706
    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 706
    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 : 3197
Taille : 29,1 Ko

  6. #6
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 706
    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 706
    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.

  7. #7
    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
    Re...
    Ici, j'aimerais pourvoir ne copier les lignes que des colonnes B à N. Mais comme j'utilise .EntireRow je peux pas... j'essaie de trouver autre chose et j'arrive à rien.



    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
    Dim Lig     As Long
    Dim Col     As String
    Dim NbrLig  As Long
    Dim NumLig  As Long
     
    Sheets("Interface Prépa").Activate ' feuille de destination
     
    Col = "i"              ' colonne données non vides à tester'"
    NumLig = 4          'alors là ca doit etre le N° de la 1er ligne de données en comptant la ligne 1 = 0 .... ? '
    With Sheets("Interface CE")     ' feuille source'
    NbrLig = .Cells(65536, Col).End(xlUp).Row
    For Lig = 4 To NbrLig             'n° de la 1ere ligne de données'
        If .Cells(Lig, Col).Interior.ColorIndex = 27 Then
            .Cells(Lig, Col).EntireRow.Copy
            NumLig = NumLig + 1
            Cells(NumLig, 1).Select
            Sheets("Interface Prépa").Paste
     
           'Cells(NumLig, 1).Paste Shift:=xlDown
               'ici pour insérer ou  .Paste pour coller'
     
        End If
    Next
    End With

    Du coup la mise en forme de la feuille de destination devient celle de la feuille de départ pour les lignes copiées....
    Nom : Capture.PNG
Affichages : 3127
Taille : 17,9 Ko

  8. #8
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 706
    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 706
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Cells(1, 1), Cells(1, 10)).Copy
    Ceci copie les cellules A1 à A10.

  9. #9
    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
    Bonjour bonjour !

    Me revoila... quelqu'un serait-il en mesure d'améliorer ce code (qui ne bug pas), mais qui est maladroit et pas du tout optimisé ?

    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
    36
    37
    38
    39
    Sub Bouton2_Envoyer()
     
    Set FL1 = Worksheets("Interface CE")
    Set FL2 = Worksheets("Interface Prépa")
    DerLigneCE = FL1.Range("B" & Application.Rows.Count).End(xlUp).Row
    DerLignePrepa = FL2.Range("B" & Application.Rows.Count).End(xlUp).Row
     
    'La partie qui suit repère les ligne en rouge et les met en jaune
    For Each C In FL1.Range("B5:N" & DerLigneCE)
        If C.Interior.ColorIndex = 3 Then C.Interior.ColorIndex = 27
    Next C
     
    'Et qui ensuite envoie les lignes jaunes cers la feuille "Interface Prépa"
    Dim Lig     As Long
    Dim Col     As String
    Dim NbrLig  As Long
    Dim NumLig  As Long
     
    Sheets("Interface Prépa").Activate ' feuille de destination
     
    Col = "i"            ' colonne données non vides à tester'"
    NumLig = 4          'alors là ca doit etre le N° de la 1er ligne de données en comptant la ligne 1 = 0 .... ? '
    With Sheets("Interface CE")     ' feuille source'
    NbrLig = .Cells(65536, Col).End(xlUp).Row
    For Lig = 4 To NbrLig             'n° de la 1ere ligne de données'
        If .Cells(Lig, Col).Interior.ColorIndex = 27 Then
            .Cells(Lig, Col).EntireRow.Copy
            NumLig = NumLig + 1
            Cells(NumLig, 1).Select
            Sheets("Interface Prépa").Paste
     
           'Cells(NumLig, 1).Paste Shift:=xlDown
               'ici pour insérer ou  .Paste pour coller'
     
        End If
    Next
    End With
     
    End Sub
    Voici un aperçu de ce que ça donne :

    Initialement (avant de cliquer sur le bouton)


    Feuille "Interface CE" dans laquelle la nouvelle demande est saisie

    Nom : Capture.PNG
Affichages : 3048
Taille : 16,6 Ko

    Feuille "Interface Prépa" qui est la feuille de destination

    Nom : Capture3.PNG
Affichages : 3041
Taille : 12,2 Ko

    Deviennent alors après avoir cliqué sur le bouton "Envoyer" :

    Feuille "Interface CE"
    La ligne est devenue jaune

    Nom : Capture2.PNG
Affichages : 3043
Taille : 17,4 Ko

    Feuille "Interface Prépa"
    Une nouvelle ligne est apparue mais comme vous le constatez, la mise en forme n'est pas bonne (lignes beiges au lieu d'être bleues)

    Nom : Capture5.PNG
Affichages : 3041
Taille : 15,1 Ko


    Merci de m'aider à sortir de cette mouise.....

  10. #10
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 706
    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 706
    Par défaut
    Bonjour
    Voici quelques commentaires sur ton code :
    1. Prend l'habitude de déclarer TOUTES les variables avant de les utiliser (je parle notamment de FL1, FL2, DerLigneCE, C....) Pour t'obliger à faire cela, tu peux mettre au tout début de ton module (avant les sub) la ligne suivante :
      http://silkyroad.developpez.com/VBA/LesVariables/#LIII
    2. Au début, tu définis des variables égales à tes feuilles de calcul : utilise ceci jusqu'au bout ! En effet, plus tard tu écris :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      Sheets("Interface Prépa").Activate   'et
      With Sheets("Interface CE") 
       '...
      End With
      Tu peux continuer à utiliser FL1 et FL2 comme tu le fais au début par exemple :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      DerLignePrepa = FL2.Range("B" & Application.Rows.Count).End(xlUp).Row
      Ceci t'éviteras notamment d'utiliser Activate. Activate et Select sont 2 operations à éviter au maximum !
    3. Attention à la syntaxe de Cells(). La syntaxe juste est :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Cells(n° ligne, n° colonne)
      Le n° de ligne ET le n° de colonne sont tous les 2 des entiers (Long). Or, toi tu déclares Col comme une chaîne de caractère et tu le poses égal à "i". Col devrait être un Long et égal à 9. D'ailleurs, pourquoi utilises-tu une variable si la colonne n'est pas amenée à changer plus tard ?
    4. la mise en forme n'est pas bonne (lignes beiges au lieu d'être bleues)
      Relis mon message precedent. En effet, si tu utilies EntireRow, tu copies toute la ligne. Pour ne copier que certaines colonne de la ligne, il faut utiliser la syntaxe suivante :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Range(Cells(1, 1), Cells(1, 10)).Copy
    5. Comme je le disais dans un point precedent, évite d'utiliser Select et Activate. Tu écris :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      Cells(NumLig, 1).Select
              Sheets("Interface Prépa").Paste
      Ecris plutôt :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      FL2.Cells(NumLig, 1).PasteSpecial
      En utilisant, en plus, la variable FL2.

  11. #11
    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
    Merci beaucoup de tes aides !
    Quelques interrogations subsistent encore malheureusement...

    Citation Envoyé par riaolle Voir le message
    Attention à la syntaxe de Cells(). La syntaxe juste est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(n° ligne, n° colonne)
    Le n° de ligne ET le n° de colonne sont tous les 2 des entiers (Long). Or, toi tu déclares Col comme une chaîne de caractère et tu le poses égal à "i". Col devrait être un Long et égal à 9. D'ailleurs, pourquoi utilises-tu une variable si la colonne n'est pas amenée à changer plus tard ?
    A vrai dire, si mes codes sont si étranges et parfois pas très logiques, c'est parce que j'ai dû me mettre la semaine dernière au VBA en ayant que des notions très vagues et basiques de codage......
    J'ai donc fait de la récup à droite à gauche de codes sur les forums pour construire mon petit logiciel !

    Pourquoi tu dis que Col = 9, ce ne serait pas plutôt Col = 14 ? (jusqu'au bout de mon tableau colonne N)

    Citation Envoyé par riaolle Voir le message
    Relis mon message precedent. En effet, si tu utilies EntireRow, tu copies toute la ligne. Pour ne copier que certaines colonne de la ligne, il faut utiliser la syntaxe suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Cells(1, 1), Cells(1, 10)).Copy
    J'ai bien compris, seulement ma ligne à copier ne sera pas toujours ligne A, mais parfois sur 30 lignes différentes !

    Encore une fois pardon de ma "novicitude".. ^^

  12. #12
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 706
    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 706
    Par défaut
    Pourquoi tu dis que Col = 9, ce ne serait pas plutôt Col = 14 ? (jusqu'au bout de mon tableau colonne N)
    Dans ton code, tu écris, ligne 21 :
    Je dis juste que la colonne I est la colonne n°9

    J'ai bien compris, seulement ma ligne à copier ne sera pas toujours ligne A, mais parfois sur 30 lignes différentes !
    Il faut adapter. Tu fais une boucle sur les lignes à partir de la ligne 25 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Lig = 4 To NbrLig             'n° de la 1ere ligne de données'
        '....
    Next
    Il suffit d'utiliser la variable incrémentée Lig.
    Avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Cells(Lig, Col).EntireRow.Copy
    Tu copies bien toute la ligne Lig. Maintenant si tu ne veux copier que certaines colonnes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Cells(Lig, 1), Cells(Lig, 10)).Copy
    N° de colonnes à adapter aussi. Ici je copies les cellules allant de la cellule colonne 1, ligne Lig à la cellule colonne 10, ligne Lig. A toi d'adapter en fonction des colonnes que tu veux copier.

  13. #13
    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
    Les modifications conseillées ne fonctionnent pas toutes... Sûrement à cause de moi qui les adapte mal à mon problème !
    Je pose ici la nouvelle version de mon fichier. Si certains ont du temps à me consacrer et peuvent y modifier directement les codes, ils sont plus que bienvenue !

    Suivis des Préparations.xlsm

  14. #14
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 706
    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 706
    Par défaut
    Bonjour,
    Dans ta pièce joint, je ne vois pas les modifications que je te propose dans les messages #10 et #12.
    Autrement, as-tu des problèmes à l'exécution de ton code?

  15. #15
    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
    Bah...j'ai envie de laisser tomber !
    Je ne parviens pas à coder correctement les boutons Archiver, Envoyer et Valider... ça fais une semaine que je me casse la tête dessus alors bon...j'ai vraiment envie d'arrêter.

Discussions similaires

  1. Réponses: 4
    Dernier message: 23/08/2013, 19h13
  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, 12h13
  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, 12h58
  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, 23h36
  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, 13h42

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