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 :

[VBA-E]transposer des données d'une feuille dans une autre


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier Avatar de lio62
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 472
    Points : 101
    Points
    101
    Par défaut [VBA-E]transposer des données d'une feuille dans une autre
    bonsoir,

    j'ai un userform, appelé saisie, dedans j'ai dans la colonne B des dates et je voudrais extraire des dates à partir d'un critère >= et ensuite sélectionner la ligne de la colonne A a la colonne G et les recopier dans une autre feuille "controle1" en les transposant de la colonne(en partant de la 2ème ligne) B à H .

    j'ai un bout de code mais ca ne recopie rien ou tjrs la meme chose et je suis coincé pour la suite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    noligne = Range("b1").End(xlDown).Row 
    dim ladate as date
    ladate = [am4]
    For Each cell In Range("b:b")
    If cell.Value >= ladate Then
     
      ActiveCell.EntireRow.Copy
       Sheets("feuil1").Select
       For z = 2 To 8
       Selection.PasteSpecial Paste:=xlPasteAll, _
      Transpose:=True
    merci a+
    A star is dead

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    salut lionel
    c'est quoi ça, je connais pas

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    et plus serieusement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each cell In Range("b:b")
    If cell.Value >= ladate Then 
      ActiveCell.EntireRow.Copy
    quand tu utilise celldans les deux premieres lignes, tu fais une confusion. merci les exemples clairs de F1. en fait dans ce cas cell est une variable qui dans ce cas là represente une cellule.
    tu peux essayer
    for each pingouin in Range("b:b") ça marchera aussi
    et du coup dans la troisieme ligne quan tu utilise activecell, he ben c'est pas forcement la meme
    perso pour me rappeler que je parle de cellule j'utilise cel ou juste C
    for each cel ..
    et donc pour copier la ligne qui correspond a cel, et pas forcement a activecell, il vaut mieux utiliser queque chose du genre
    cel.row. ce qui donne dans ton cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each c In Range("b:b")
    If c.Value >= ladate Then
     c.row.EntireRow.Copy
    idem si par exemple, tu voulais une cellule de cette ligne
    c.offset(0,2) ou cells(c.row,2)

  4. #4
    Membre régulier Avatar de lio62
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 472
    Points : 101
    Points
    101
    Par défaut
    Bonsoir et merci pour tes explication alsimbad,
    ladate=[am4] me renvoie bien la valeur de la cellule am4

    je surnage tant bien que mal

    merci beaucoup a+

    au fait si tu connaissais un livre qui pourrait me faire progresser je suis preneur

    bien sur pas sur le forum ... aps de pub
    merci a+
    A star is dead

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    les livres c'est bien, mais ce qui te fera progresser le plus, c'est exactement ce que tu es en train de faire. c'est a dire avoir un projet et chercher les infos un peu partout. c'est pas comme ça qu'on fais les plus jolis codes, mais c'est comme ça qu'on apprend quand on a pas de prof. moi perso, j'ai jamais lu un livre sur le sujet, je me trouve des projets, et je cherche comment y arriver. la plupart des solutions que je donne ici, je les calcule au fur et à mesure. un tiers de logique, un tiers de bon sens, un tiers de cogitation, un tiers d'esprit mathématique et beaucoup de " p***** de b***** de m****, pourquoi ça veut pas, m**** fais c**** !!!!!!
    a plus. bonne continuation

  6. #6
    Membre régulier Avatar de lio62
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 472
    Points : 101
    Points
    101
    Par défaut
    bonsoir Alain

    tout ce qui est avec des astérisques j'ai compris

    c un bon début et j'ai les memes mots que toi

    non de d**** de b****l de m****

    mais c vraique c pas toujours évident et comme j'imprime tout ce que je trouve et qui pourrait m'être utile tu vois un peu !!!

    Tais toi CIBOOX je t"entends déjà rire !!!!!!!
    A star is dead

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Hello lio, tu me fais de la peine
    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
    noligne = Range("b1").End(xlDown).Row 
    dim ladate as date
    ladate = [am4]
    '1 - Instancie la feuille dans laquelle tu copies et la plage
    Set LaPlage = Activesheet.Range("b:b")
    2- Place-toi dans la feuille où tu colles tes données
    sheets("feuil1").Select
    For Each cell In LaPlage
         If cell.Value >= ladate Then
             cell.EntireRow.Copy
             'Comme tu transposes tes données, je suppose que z est ton N° de colonne
             For z = 2 To 8
                  Cells(1,z).PasteSpecial Paste:=xlPasteAll, Transpose:=True
             Next
    Next
    Par contre, avec ce code, tu copies 8 fois la même ligne et autant de fois que tu as de colonnes
    Je verrai donc plutôt un truc comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For Each cell In LaPlage
         If cell.Value >= ladate Then
             cell.EntireRow.Copy
             z = z + 1
             Cells(1,z).PasteSpecial Paste:=xlPasteAll, Transpose:=True
         endif
    Next

  8. #8
    Membre régulier Avatar de lio62
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 472
    Points : 101
    Points
    101
    Par défaut
    bonsoir ouskel

    ouai je sais mais je suis pas calimero mais c vrai que c parfois dur de rechercher dans les forums pour avoir un truc qui correspond a peu près mais j'ai pas testé mais pour la transposition elle ne peut se faire qu'entre les colonnes et lignes 2 a 8 de la feuille controle1, controel2, controle 3.

    oUF merci pour ton code j'ai galéré toute la journée et qu'est ce qui va dire mon patron

    merci a+
    A star is dead

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Auquel cas tu n'as à instancier que la plage qui t'intéresse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set LaPlage = Activesheet.Range("b2:b10")
    sans rien changer à mon dernier code

  10. #10
    Membre régulier Avatar de lio62
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 472
    Points : 101
    Points
    101
    Par défaut
    sans rien changer à mon dernier code


    ben pourquoi tu dis ca !!


    merci et bonne journéee ousk
    a+
    A star is dead

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Sans rien changer à mon dernier code. Ça veut dire ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    noligne = Range("b1").End(xlDown).Row 
    dim ladate as date
    ladate = [am4]
    Set LaPlage = Activesheet.Range("b2:b10")
    sheets("feuil1").Select
    For Each cell In LaPlage
         If cDate(cell.Value) >= ladate Then
             cell.EntireRow.Copy
             z = z + 1
             Cells(1,z).PasteSpecial Paste:=xlPasteAll, Transpose:=True
         endif
    Next
    Essaie de comprendre ce que tu fais, sans ça, ton patron...
    Et lis les réponses qu'on t'envoie

  12. #12
    Membre régulier Avatar de lio62
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 472
    Points : 101
    Points
    101
    Par défaut
    bonsoir Ousk

    j'ai juste changé ca car je voulais qu'il me recopie qu'une partie de la ligne
    et qu'il la recopie a partir de la cellule B2 sur l'autre feuille

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    cell.EntireRow.Offset(0, 0).Range("a2:x2").Copy
             'Comme tu transposes tes données, je suppose que z est ton N° de colonne
              '
              z = z + 1
     
                  Cells(2, z + 1).PasteSpecial Paste:=xlValues, Transpose:=True
    et là ca marche pas deproblème
    Ensuite j'ai ajouté ca

    et là ca coince un peu comment pourraije réinitialiser z

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     If z = 8 Then
     Sheets("CONTROLES2").Select
     Range("b2").Select
    z = 0
     
     
     z = z + 1
      Cells(2, z + 1).PasteSpecial Paste:=xlValues, Transpose:=True
      End If
    et autre gros problème que je rencontre c'est ce lui du format date
    dans une précédente discussion alain tech m'avait dit de mettre ce format
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lf.Cells(noligne, 2).NumberFormat = "dd/mm/yyyy"

    car j'avais les dates qui se recopiaient en mm/JJ/aaaa je pensais donc le problème résolu seulement lorsque je demande qu'il me recopie les données par rapport à une certaine date il me prend aussi bien le 10/03/2007 que le 03/10/2007 car dans la feuille da calcul la date est bien 10/03/2007 mais dans la barre de formules elle apparait 03/10/2007

    merci a+
    A star is dead

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    lf.Cells(noligne, 2).NumberFormat = "dd/mm/yyyy"
    ..........................
    Tu es sûr ...
    d'avoir quelque chose dans NoLigne ?
    Que lf est bien instancié ?
    Que la colonne 2 contient bien une date ?
    ..........................

  14. #14
    Membre régulier Avatar de lio62
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 472
    Points : 101
    Points
    101
    Par défaut
    bonsoir ousk

    ben noligne pour moi c ca


    noligne = Range("A1").End(xlDown).Row + 1
    le lf ben pas de pb c workseheets("bd")
    la colonne 2 de la feuille "bd" contient bien des dates


    je vais te joindre le fichier mais comme j'ai fait pleins d'essais tu vas m' eng*******

    non je t'assure ousk il tourne (enfin presque )et si tu veux ton vrai fichier je peux meme te le filer

    allez je te le joins le tiens + mien
    merci a++
    A star is dead

  15. #15
    Membre régulier Avatar de lio62
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 472
    Points : 101
    Points
    101
    Par défaut
    Bonsoir

    En fait en regardant la transposition il n'est pas tenu compte de "ladate"

    excel recopie dès la première ligne de la base de données sans tenir compte de quoi que ce soit

    il recopie bien également sur le 2eme feuille "CONTROLES2"amis apres pour la feuille "controles3" je ne sais plus quoi mettre comme condition car j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    If z = 8 Then
     Sheets("CONTROLES2").Select
     Range("b2").Select
    z = 0
     
     
     z = z + 1
      Cells(2, z + 1).PasteSpecial Paste:=xlValues, Transpose:=True
      End If
    merci a+
    A star is dead

  16. #16
    Membre régulier Avatar de lio62
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 472
    Points : 101
    Points
    101
    Par défaut
    bonsoir, j'ai ca comme code mais ca ne veut toujours pas boucler sur la 3eme feuille "CONTROLES"

    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
    Dim i As Byte
    Dim j As Byte, IndFeuil As Byte
     
    For j = 1 To Sheets.Count
        With Sheets(j)
            If Left(.Name, 9) = "CONTROLES" And .Cells(2, 8) = "" Then
                IndFeuil = CByte(Mid(.Name, 10))
                Exit For
          End If
        End With
    Next
     
    Worksheets("bd").Select
    ladate = [am1]
    With Sheets("bd")
         Set LaPlage = .Range("b:b")
    End With
    i = IndFeuil  
    Sheets("CONTROLES" & i).Select
    b = 1
    For Each cell In LaPlage
    If cell.Value >= ladate Then
         cell.EntireRow.Offset(0, 0).Range("a2:x2").Copy              '
     
         b = b + 1
         Cells(2, b).PasteSpecial Paste:=xlValues, Transpose:=True
    End If
    If b = 8 Then
         Sheets("CONTROLES" & i + 1).Select
         Range("b2").Select
         b = 1
         b = b + 1
         Cells(2, b).PasteSpecial Paste:=xlValues, Transpose:=True
              End If
     
    Next
    merci a+
    A star is dead

  17. #17
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Mets le nom réèl de tes feuilles, tel qu'il se trouve dans l'onglet (copier/coller sur le forum

  18. #18
    Membre régulier Avatar de lio62
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 472
    Points : 101
    Points
    101
    Par défaut
    Bonsoir Ousk

    j'ai la solution depuis cet apres midi mais je n'ai pas tout trouvé seul (en bleu clair)
    l'autre parti qui ne voulait pas tourné j'ai changé le if b=8 par b>8 ce qui permet de ne pas recopier les meme données de la colonne 8 de la feuille controle1 sur la feuille controle2 en colonne 2 et ainsi de suite

    ensuite pour l'incrémentation j'ai rajouté i=i+1
    bon j'ai fait ca en décortiquant et en utilisant F8

    par contre j'ai toujours ce oproblème de date avec la combobox comme je l'ai expliqué bien avant

    j'ai envie de mettre une lisbox ? je vais essayer car là c trop galère j'ai essayé le code en tapant les dates (presque à la main)



    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
    ladate = [am1]
    With Sheets("bd")
         Set LaPlage = .Range("b:b")
       
    End With
    
     i = 1
     
    b = 1
    
    For Each cell In LaPlage
    
    If cell.Value >= ladate Then
    
    Sheets("CONTROLES" & i).Select
         cell.EntireRow.Offset(0, 0).Range("a2:x2").Copy              '
        
         b = b + 1
         Cells(2, b).PasteSpecial Paste:=xlValues, Transpose:=True
    End If
    If b > 8 Then
    i = i + 1
    
         Sheets("CONTROLES" & i).Select
         Range("b2").Select
         b = 1
         b = b + 1
         Cells(2, b).PasteSpecial Paste:=xlValues, Transpose:=True
         
        
    End If
    
    Next

    merci pour ton aide.... et aussi de m'avoir laisser chercher


    merci encore

    bien cordialement lionel
    A star is dead

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

Discussions similaires

  1. [XL-2010] Importer des données de plusieurs fichiers dans une feuille excel en VBA
    Par Alibel dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/10/2013, 15h16
  2. [Toutes versions] coller les données d'une plage d'une cellule dans une cellule d'une autre feuille[VBA]
    Par arthson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/01/2012, 17h37
  3. Réponses: 0
    Dernier message: 14/11/2011, 15h52
  4. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  5. [VBA-E] Copier des données d'un tableau a une feuille
    Par KKshi666 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 12/04/2007, 14h09

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