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 valeur d'une colonne sous condition dans une boucle


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Stagiaire contrôle de gestion
    Inscrit en
    Avril 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Stagiaire contrôle de gestion

    Informations forums :
    Inscription : Avril 2014
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Copier valeur d'une colonne sous condition dans une boucle
    Bonjour,

    Ayant un probléme avec une macro VBA, je me permet de demander votre aide!

    Je voudrais copier les donnée d'une colonne d'une feuille à l'autre sous condition.
    Par exemple dans la feuille "Temp" pour l'intitulé de colonne "Succursale" copier les données de cette colonne dans ma feuille "MesValeurs" à condition qu'il trouve l'intitulé "Succursale".
    Sachant que mes intitulé dans ma feuille "Temp" peuvent bouger.

    Mais hélas, pour l'instant ma macro ne marche pas vraiment comme prévu. (probléme de boucle je pense)

    Je joins un fichier testcolonne.

    D'avance merci de votre aide et de votre temps. :D !!!

    Cordialement,

    Testcolonne_v1.xlsTestcolonne_v1.xls

    Le fichier ne comprend pas la macro car je n'arrive pas à uploader le fichier en .xlsm (excel 2010)

    PS: Désolé mais je n'arrive pas à mettre les tabulations! ""[/INDENT]""

    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
    40
    41
    Sub Testcolonne2()
    Dim i As Integer
     
    i = 1
    Sheets("Temp").Select
     
    While Cells(1, i + 1) <> ""
     
      Select Case Cells(1, i + 1)
     
      Case Is = "Statut"
     
        Range(Cells(2, i + 1), Cells(100, i + 1)).Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("Temp1").Select
        Range("D2:D100").Select
        ActiveSheet.Paste
     
      Case Is = "Niveau Unite"
     
        Range(Cells(2, i + 1), Cells(100, i + 1)).Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("Temp1").Select
        Range("E2:E100").Select
        ActiveSheet.Paste
     
      'Case Is= pour les autre colonne
     
      Case Else
     
      MsgBox ("rien")
     
      End Select
      MsgBox ("OK")
      i = i + 1
     
    Wend
     
    End Sub

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bonjour,

    Tu ne peux pas joindre de fichier xlsm, le format n'est pas autorisé; si tu veux en mettre un, il faut le compresser au préalable. Essaie :

    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
    Sub Copie()
        Dim C As Range, Plage As Range, Ligne As Long, Sh As Worksheet, Col As Variant
        Ligne = 1
        With Sheets("Temp")
            Set Plage = .Range("A2", .Cells(.Rows.Count, 1).End(xlUp))
        End With
        Set Sh = Sheets("Temp")
        With Sheets("MesValeurs")
            For Each C In Plage
                Ligne = Ligne + 1
                For i = 1 To .Cells(1, .Columns.Count).End(xlToLeft).Column
                    Col = Application.Match(Sh.Cells(1, i), .[1:1], 0)
                    If IsNumeric(Col) Then
                        .Cells(Ligne, Col) = C.Offset(, i - 1)
                    End If
                Next i
            Next C
        End With
    End Sub

  3. #3
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Bonjour, bonjour,

    ‼ (cf règles du forum)


    Sinon, si j'ai bien compris le besoin, un code n'est pas forcément nécessaire,

    consulter Les filtres avancés ou élaborés dans Excel


  4. #4
    Futur Membre du Club
    Homme Profil pro
    Stagiaire contrôle de gestion
    Inscrit en
    Avril 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Stagiaire contrôle de gestion

    Informations forums :
    Inscription : Avril 2014
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Un grand merci! ça marche!!! problème résolu!

    Désolé pour la balise! je pensais qu'il fallait mettre des tabulation avec ""[/INDENT]"". Que j'ai mis devant chaque ligne! Mais cela ne fonctionnait pas! Je le saurais pour la prochaine fois!

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Stagiaire contrôle de gestion
    Inscrit en
    Avril 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Stagiaire contrôle de gestion

    Informations forums :
    Inscription : Avril 2014
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Je me permet de revenir vers vous pour avoir quelque explication sur le code:
    Car j'aimerais être sûr de l'avoir compris!

    D'avance Merci!

    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
    Sub Copie()
        Dim C As Range, Plage As Range, Ligne As Long, Sh As Worksheet, Col As Variant
        'Donc on déclare les variable C en tant que plage de cellule, le compteur ligne, nos onglet et nos sélection pour copier les valeurs
        Ligne = 1
        With Sheets("Temp")
        'exécute la série d'instruction plusieurs fois!
            Set Plage = .Range("A2", .Cells(.Rows.Count, 1).End(xlUp))
            'Sélectionne la page de cellule jusqu'à une cellule vide (compte le nombre de cellule)
        End With
        Set Sh = Sheets("Temp") 'va dans l'onglet "temp"
        With Sheets("MesValeurs")
            For Each C In Plage 'pour chaque cellule dans la plage de cellule
                Ligne = Ligne + 1 'compteur
                For i = 1 To .Cells(1, .Columns.Count).End(xlToLeft).Column 'compte le nombre de colonne?
                    Col = Application.Match(Sh.Cells(1, i), .[1:1], 0) 'Colle les valeurs correspondantes
                    If IsNumeric(Col) Then 'si l'intitulé de la colonne correspond?
                        .Cells(Ligne, Col) = C.Offset(, i - 1) 'que signifie Offset?
                    End If
                Next i
            Next C
        End With
    End Sub
     
    'merci de votre aide!

  6. #6
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bonjour,

    Je veux bien tout expliquer, mais est-ce que la macro fait ce que tu veux ?

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Stagiaire contrôle de gestion
    Inscrit en
    Avril 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Stagiaire contrôle de gestion

    Informations forums :
    Inscription : Avril 2014
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Oui, elle me copie les données dans l'autre feuille en tenant compte du libellé de colonne même si celui bouge!
    Bref, elle marche très bien!
    Dans l'ensemble j'ai compris la procédure mais dans certains cas j'aurai besoin de quelques précisions! (cf les notes du 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
    24
    Sub Copie()
        Dim C As Range, Plage As Range, Ligne As Long, Sh As Worksheet, Col As Variant
        'Donc on déclare les variable C en tant que plage de cellule, le compteur ligne, nos onglet et nos sélection pour copier les valeurs
        Ligne = 1
        With Sheets("Temp")
        'exécute la série d'instruction plusieurs fois!
            Set Plage = .Range("A2", .Cells(.Rows.Count, 1).End(xlUp))
            'Sélectionne la page de cellule jusqu'à une cellule vide (compte le nombre de cellule)
        End With
        Set Sh = Sheets("Temp") 'va dans l'onglet "temp"
        With Sheets("MesValeurs")
            For Each C In Plage 'pour chaque cellule dans la plage de cellule
                Ligne = Ligne + 1 'compteur
                For i = 1 To .Cells(1, .Columns.Count).End(xlToLeft).Column 'compte le nombre de colonne?
                    Col = Application.Match(Sh.Cells(1, i), .[1:1], 0) 'Colle les valeurs correspondantes
                    If IsNumeric(Col) Then 'si l'intitulé de la colonne correspond?
                        .Cells(Ligne, Col) = C.Offset(, i - 1) 'que signifie Offset?
                    End If
                Next i
            Next C
        End With
    End Sub
     
    'merci de votre aide!

Discussions similaires

  1. [XL-2007] Comment supprimer des lignes d'une plage dans une colonne sous condition
    Par capi81 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 05/06/2015, 11h34
  2. Réponses: 10
    Dernier message: 07/07/2012, 17h11
  3. Réponses: 5
    Dernier message: 10/08/2011, 18h05
  4. Réponses: 1
    Dernier message: 26/12/2010, 21h20
  5. copier des cellules d'une feuille dans une autres sous condition
    Par olivertwist dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 16/05/2007, 10h42

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