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 colonne en ligne selon condition [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Copier une colonne en ligne selon condition
    Bonjour,

    Je suis débutant dans la langage VBA et j'ai besoin de votre aide.

    Voila, je veux que ma colonne A soit mise en ligne dans la même feuille à partir de "B1" et saute de ligne suivant une condition.
    Il faut savoir que le fichier fait environ 2500 ligne pour la colonne A et les blocs qui commencent tous par "Port:".
    On remarque que le premier bloc fait 12 lignes et que le deuxieme fait 14 lignes suivant s'il n'y a pas de MAC ou bien plusieurs. D'ou l'idée de mettre une condition mais je ne sais vraiment pas comment.

    Voici un exemple
    A1 Port: 1/2
    A2 Operation Mode : x
    A3 Max MAC bridged : x
    A4 Trap Threshold : x
    A5 Max MAC filtered : x
    A6 Low MAC Range : x
    A7 High MAC Range : x
    A8 Violation : x
    A9 Violating MAC : x
    A10
    A11 MAC Address VLAN TYPE
    A12 -------------------+------+--------
    A13
    A14 Port: 1/5
    A15 Operation Mode : x
    A16 Max MAC bridged : x
    A17 Trap Threshold : x
    A18 Max MAC filtered : x
    A19 Low MAC Range : x
    A20 High MAC Range : x
    A21 Violation : x
    A22 Violating MAC : x
    A23
    A24 MAC Address VLAN TYPE
    A25 -------------------+------+--------
    A26 00:00:00:00:00:00 x x
    A27 00:00:00:00:00:01 x x

    Le résultat que je voudrais obtenir.
    B1
    Port: 1/2 Operation Mode : x Max MAC bridged : x Trap Threshold : x Max MAC filtered : x Low MAC Range : x High MAC Range : x Violation : x Violating MAC : x MAC Address VLAN TYPE -------------------+------+--------
    B2
    Port: 1/5 Operation Mode : x Max MAC bridged : x Trap Threshold : x Max MAC filtered : x Low MAC Range : x High MAC Range : x Violation : x Violating MAC : x MAC Address VLAN TYPE -------------------+------+-------- 00:00:00:00:00:00 x x 00:00:00:00:00:01 x x

    Voici le code que j'ai fait pour transposer une colonne en ligne mais j'ai aucune idée de comment faire pour insérer le critère.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub Test()
     
        Range("A:A").Select
        Application.CutCopyMode = False
        Selection.Copy
        Range("B1").Select
        Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
     
    End Sub
    Merci d'avance si quelqu'un peut me venir en aide.

    Cdt,
    Benjamin
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Points : 9 402
    Points
    9 402
    Par défaut
    Bonjour,

    Un petit coup de pouce car je pense que la méthode des copier/coller n'est pas la plus optimisée

    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
     
    Sub transpose()
     
    Dim Sh1 As Worksheet
    Dim Sh2 As Worksheet
     
    Dim i As Long
    Dim iDest As Long
    Dim cDest As Integer
     
    Set Sh1 = ThisWorkbook.Sheets("Feuil1")
    Set Sh2 = ThisWorkbook.Sheets("Feuil2")
     
    iDest = 0
     
    'Boucle sur les lignes de la feuille Source
    For i = 1 To Sh1.Range("A" & Rows.Count).End(xlUp).Row
        'Si on trouve une ligne Port, alors on revient à la ligne
        If UCase(Left(Sh1.Range("A" & i), 4)) = "PORT" Then
            iDest = iDest + 1
            cDest = 1
        End If
       'Copie de la données
        Sh2.Cells(iDest, cDest).Value = Sh1.Range("A" & i).Value
        cDest = cDest + 1
    Next i
     
    End Sub

  3. #3
    Membre actif
    Homme Profil pro
    Technicien Méthodes
    Inscrit en
    Mars 2013
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2013
    Messages : 128
    Points : 269
    Points
    269
    Par défaut
    Bonjour,

    Il me semble qu'il veuille concatener toutes les infos situées entre 2 Port (si j'ai bien compris son exemple).

    Le résultat que je voudrais obtenir.
    B1
    Port: 1/2 Operation Mode : x Max MAC bridged : x Trap Threshold : x Max MAC filtered : x Low MAC Range : x High MAC Range : x Violation : x Violating MAC : x MAC Address VLAN TYPE -------------------+------+--------
    B2
    Port: 1/5 Operation Mode : x Max MAC bridged : x Trap Threshold : x Max MAC filtered : x Low MAC Range : x High MAC Range : x Violation : x Violating MAC : x MAC Address VLAN TYPE -------------------+------+-------- 00:00:00:00:00:00 x x 00:00:00:00:00:01 x x
    Aussi je propose ce 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Sub transposer()
     
    Dim DLigne As Long
    Dim Message As String
    Dim EnCours As Integer
     
    DLigne = Range("A" & Range("A:A").Rows.Count).End(xlUp).Row
    Set Sh = ThisWorkbook.Sheets("NomFeuille")
    EnCours = 1
     
    Message = Sh.Range("A1")
     
    For i = 2 To DLigne
        While UCase(Sh.Range("A" & i)) <> "PORT"
            Message = Message & " " & Sh.Range("A" & i)
            i = i + 1
        Wend
        Sh.Range("B" & EnCours) = Message
        EnCours = EnCours + 1
        Message = Sh.Range("A" & i)
    Next
     
    End Sub

  4. #4
    Membre éprouvé Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Points : 973
    Points
    973
    Par défaut
    Bonjour
    Code a placer en VB sur feuil1

    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
    Private Sub devellopez()
    Dim cell As Range
    Dim L As Integer, C As Integer
     
    For Each cell In Feuil1.Range("a1:a" & Feuil1.Range("a65000").End(xlUp).Row)
        If cell.Text Like "Port" & "*" Then
        L = Feuil1.Range("b65000").End(xlUp).Row + 1
        Cells(L, 2) = cell
        Else
        C = Cells(L, 256).End(xlToLeft).Column + 1
        Cells(L, C) = cell
        End If
     
    Next cell
    End Sub

  5. #5
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par jfontaine Voir le message
    Bonjour,

    Un petit coup de pouce car je pense que la méthode des copier/coller n'est pas la plus optimisée

    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
     
    Sub transpose()
     
    Dim Sh1 As Worksheet
    Dim Sh2 As Worksheet
     
    Dim i As Long
    Dim iDest As Long
    Dim cDest As Integer
     
    Set Sh1 = ThisWorkbook.Sheets("Feuil1")
    Set Sh2 = ThisWorkbook.Sheets("Feuil2")
     
    iDest = 0
     
    'Boucle sur les lignes de la feuille Source
    For i = 1 To Sh1.Range("A" & Rows.Count).End(xlUp).Row
        'Si on trouve une ligne Port, alors on revient à la ligne
        If UCase(Left(Sh1.Range("A" & i), 4)) = "PORT" Then
            iDest = iDest + 1
            cDest = 1
        End If
       'Copie de la données
        Sh2.Cells(iDest, cDest).Value = Sh1.Range("A" & i).Value
        cDest = cDest + 1
    Next i
     
    End Sub
    Merci beaucoup pour ce petit coup de pouce, je vais pouvoir poursuivre la suite. Il me reste pas mal de chose à faire, mais j'ai normalement tous ce qu'il me faut.

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

Discussions similaires

  1. Couper coller une ligne selon condition
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 03/05/2019, 08h50
  2. [XL-2007] Copier une base de données selon une date dans une colonne
    Par Tobalich dans le forum Excel
    Réponses: 12
    Dernier message: 12/07/2014, 18h16
  3. Réponses: 1
    Dernier message: 17/03/2009, 17h55
  4. Colorer une ligne selon condition
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/10/2008, 08h23
  5. copier des lignes selon condition
    Par malek1913 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/02/2008, 16h45

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