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

Excel Discussion :

transposer sous conditions de nom d'horaire de texte en boucle [XL-2007]


Sujet :

Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    pilote de production
    Inscrit en
    Août 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : pilote de production
    Secteur : Service public

    Informations forums :
    Inscription : Août 2015
    Messages : 7
    Points : 1
    Points
    1
    Par défaut transposer sous conditions de nom d'horaire de texte en boucle
    bonjour,
    aider moi la je seche
    je voudrais transposer sur une ligne entre K2 et T2 les positions colonne G des agents en fonction de leurs 'nom colonne J par rapport à une liste d'agent colonne A, 'horaire colonne F, et 'position colonne G en vba
    sur cellule de 2 à 500

    merci pour votre aide
    fichier joint
    Fichiers attachés Fichiers attachés

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Points : 1 562
    Points
    1 562
    Par défaut
    Bonjour,


    Vous avez commencé à écrire du code? Un exemple sur 1 cas aiderait à comprendre vos attentes, avez-vous regardé des solutions classiques telles que TCD?
    Ce n'est pas vraiment dans les usages du forum de fournir des solutions clés en mains, je pense
    "Idéalement nous sommes ce que nous pensons. Dans la réalité, nous sommes ce que nous accomplissons." A.Senna
    et n'oubliez-pas de développer des .... sourires ^_^

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    pilote de production
    Inscrit en
    Août 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : pilote de production
    Secteur : Service public

    Informations forums :
    Inscription : Août 2015
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    bonjour,
    super, merci pour les discutions similaires
    j'ai trouvé ce code qui correspond à l'une de mes attentes
    j'aimerais maintenant que chaque colonne B contienne que les N1,la C les N2 .....jusqu'à N5
    je cherche de mon coté

    merci encore
    Fichiers attachés Fichiers attachés

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Points : 1 562
    Points
    1 562
    Par défaut
    Bonjour,

    Voir le code ci-dessous, testé

    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
    Sub Copy_Col()
     
    Dim InpRng As Range
    Dim CatInd As Integer, ColOffs As Integer, RowN As Integer
    Dim LabSplit As Variant
     
    'Init
        ColOffs = 2
     
        Set InpRng = ThisWorkbook.Worksheets("Feuil1").Range("A1").CurrentRegion    'On définit le range de départ
        Debug.Print InpRng.AddressLocal
     
    ' On parcout la colonne B et on écrit dans les suivantes suivant les valeurs trouvées
     
        For RowN = 1 To InpRng.Rows.Count
     
            If InpRng(RowN, ColOffs).Value Like "N# *" = True Then  'Cellule commencant par 'N(0-9) '
     
                LabSplit = Split(InpRng(RowN, ColOffs), " ", , vbTextCompare)(0) 'On Split sur l'espace
                CatInd = CInt(Right(LabSplit, Len(LabSplit) - 1))                        'On récupère la valeur après le N pour recalculer la colonne après
                InpRng(RowN, ColOffs + CatInd) = InpRng(RowN, 1)
     
            End If
     
        Next RowN
     
    End Sub
    "Idéalement nous sommes ce que nous pensons. Dans la réalité, nous sommes ce que nous accomplissons." A.Senna
    et n'oubliez-pas de développer des .... sourires ^_^

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    pilote de production
    Inscrit en
    Août 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : pilote de production
    Secteur : Service public

    Informations forums :
    Inscription : Août 2015
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    bonjour,
    et merci vinc_bilb de se pencher sur mon cas qui dépasse maintenant largement mes compétences
    j'ai inséré et adapté ton code et rien ne bouge
    je t'exprime ma logique auquel je n'arrive pas à coder en VBA

    pour une colonne de 2 to 200
    si cellule vide (exemple en G6)verifier si les cellules cette ligne (exemple entre G2 ET G5)contiennent une partie du texte (dans mon cas like" N#")
    si oui couper et coller dans cette case vide
    et on continue
    du cou après moi je peux adapter ça par colonne de mes codes
    Fichiers attachés Fichiers attachés

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Points : 1 562
    Points
    1 562
    Par défaut
    Lots in the dark.... ou le syndrome du vendredi

    j'ai inséré et adapté ton code et rien ne bouge
    => Ah! ça fait quelque chose chez moi sur les colonnes C à J

    Pourriez-vous compléter votre exemple avec sur quelques cas, une vue de ce que vous attendez comme résultat? Si possible avec une couleur dédiée?
    "Idéalement nous sommes ce que nous pensons. Dans la réalité, nous sommes ce que nous accomplissons." A.Senna
    et n'oubliez-pas de développer des .... sourires ^_^

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    pilote de production
    Inscrit en
    Août 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : pilote de production
    Secteur : Service public

    Informations forums :
    Inscription : Août 2015
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    effectivement rien ne bouge chez moi bizarre

    voici dans partie verte ce que j'obtiens quand j'actionne mon bouton et dans la partie grise ce que je voudrais

    cordialement
    Fichiers attachés Fichiers attachés

  8. #8
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Points : 1 562
    Points
    1 562
    Par défaut
    Bonjour,

    Il y aurait plus efficace et rapide que la solution que je vous propose dessous, en passant par des tableaux ou un dictionnaire, mais c'est moins lisible. Le code dessous considère que les catégories N1..N5 ne sont pas figées et que demain, vous pouvez rajouter N6, N7.... sans retoucher le code. Si c'est figé, vous pouvez le raccourcir (voir CatInd, CatMax)

    Vous pouvez mettre ce code pour essai dans votre macro Private Sub CommandButton1_Click(), en supprimant le code précédent
    Testé
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    Sub Test_VB()
     
    Dim DataTabAR() As Variant
    Dim InpRng As Range
    Dim ColN As Integer, RowN As Integer, DataTabRowN As Integer, RowOffs As Integer
    Dim CatInd As Integer, CatMax As Integer
    Dim LabSplit As Variant
     
    ' Initialisation
        Set InpRng = ThisWorkbook.Worksheets("Feuil1").Range("A1").CurrentRegion    'On définit le range de départ
        Debug.Print InpRng.AddressLocal
     
        ReDim DataTabAR(1 To InpRng.Rows.Count, 1 To InpRng.Rows.Count)
     
    ' On S'assure que les données d'entrée sont bien triées: ça peut être enlevé si c'est nativement le cas
        With InpRng.Worksheet.AutoFilter.Sort
            .SortFields.Clear
            .SortFields.Add Key:=InpRng.Columns(1), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            .SortFields.Add Key:=InpRng.Columns(2), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
     
     
    ' On lit le nom des agents 
        ColN = 1
        DataTabRowN = 1
        RowOffs = InpRng.Rows.Count + 2
        DataTabColN = 1
     
        For RowN = 2 To InpRng.Rows.Count
     
            If InpRng(RowN, ColN + 1).Value Like "N# *" = True Then                 'Cellule commencant par 'N(0-9) '
     
                If InpRng(RowN, ColN).Value <> InpRng(RowN - 1, ColN).Value Then DataTabRowN = DataTabRowN + 1 'si c'est le même nom, on reste sur la même ligne autrement saut
     
                LabSplit = Split(InpRng(RowN, ColN + 1), " ", , vbTextCompare)(0)   'On Split sur l'espace
                CatInd = CInt(Right(LabSplit, Len(LabSplit) - 1))                   'On récupère la valeur après le N pour recalculer la colonne après
                If CatInd > CatMax Then CatMax = CatInd
     
            ' On écrit dessous
                InpRng(DataTabRowN + RowOffs, ColN) = InpRng(RowN, ColN)
                InpRng(DataTabRowN, ColN + CatInd) = InpRng(RowN, ColN + 1)
     
            End If
     
        Next RowN
     
            ' On écrit les titres
        InpRng(RowOffs, ColN) = InpRng(1, ColN)
     
        For ColN = 1 To CatMax
     
            InpRng(RowOffs, ColN + 1) = "N" & ColN
        Next ColN
     
            ' On peut effacer le range source
        'InpRng.Clear
     
    End Sub
    "Idéalement nous sommes ce que nous pensons. Dans la réalité, nous sommes ce que nous accomplissons." A.Senna
    et n'oubliez-pas de développer des .... sourires ^_^

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    pilote de production
    Inscrit en
    Août 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : pilote de production
    Secteur : Service public

    Informations forums :
    Inscription : Août 2015
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    bonjour,

    et félicitation pour l'avancée, pour ma part je frise la rupture d'anévrisme
    j'ai bien remplacé par votre nouveau code
    les colonnes 3 à 5 fonctionnent super bien
    le souci c'est sur les 2 premières colonnes qui contiennent les données à traiter
    encore merci au temps que vous me consacrez

    cordialement
    Fichiers attachés Fichiers attachés

  10. #10
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Points : 1 562
    Points
    1 562
    Par défaut
    Bonjour,

    La rupture d'anévrisme? Oh, c'est un bon signe ....

    Ci-dessous le code corrigé / simplifié avec l'ajout de la confirmation de l'effacement des données d'entré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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Private Sub CommandButton1_Click()
     
    Dim InpRng As Range
    Dim ColN As Integer, RowN As Integer, DataTabRowN As Integer, RowOffs As Integer
    Dim CatInd As Integer, CatMax As Integer
    Dim LabSplit As Variant, MsgAnswer As String
     
    ' Initialisation
        Set InpRng = ThisWorkbook.Worksheets("Feuil1").Range("A2").CurrentRegion    'On définit le range de départ
        Debug.Print InpRng.AddressLocal
     
    ' On lit le nom des agents
        ColN = 1
        DataTabRowN = 1
        RowOffs = InpRng.Rows.Count
     
        For RowN = 2 To InpRng.Rows.Count
     
            If InpRng(RowN, ColN + 1).Value Like "N# *" = True Then                 'Cellule commencant par 'N(0-9) '
     
                If InpRng(RowN, ColN).Value <> InpRng(RowN - 1, ColN).Value Then DataTabRowN = DataTabRowN + 1 'si c'est le même nom, on reste sur la même ligne autrement saut
     
                LabSplit = Split(InpRng(RowN, ColN + 1), " ", , vbTextCompare)(0)   'On Split sur l'espace
                CatInd = CInt(Right(LabSplit, Len(LabSplit) - 1))                   'On récupère la valeur après le N pour recalculer la colonne après
                If CatInd > CatMax Then CatMax = CatInd
     
            ' On écrit dessous
                InpRng(DataTabRowN + RowOffs, ColN) = InpRng(RowN, ColN)
                InpRng(DataTabRowN + RowOffs, ColN + CatInd) = InpRng(RowN, ColN + 1)
     
            End If
     
        Next RowN
     
            ' On écrit les titres du style "Nx"
        For ColN = 1 To CatMax
     
            InpRng(1, ColN + 1) = "N" & ColN
     
        Next ColN
     
            ' On peut effacer le range source
        MsgAnswer = MsgBox("Voulez-vous effacer les données d'origine en " & InpRng.Offset(1, 0).AddressLocal & "?", vbYesNo, "CommandButton1_Click")
        Debug.Print InpRng.Offset(1, 0).AddressLocal
     
        If MsgAnswer = vbYes Then InpRng.Offset(1, 0).EntireRow.Delete
     
     
    End Sub
    "Idéalement nous sommes ce que nous pensons. Dans la réalité, nous sommes ce que nous accomplissons." A.Senna
    et n'oubliez-pas de développer des .... sourires ^_^

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    pilote de production
    Inscrit en
    Août 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : pilote de production
    Secteur : Service public

    Informations forums :
    Inscription : Août 2015
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    bonjour,
    je me répète mais un grand merci pour avoir pris de votre temps pour dépatouiller mon projet
    je pensais vraiment que ça aurait été plus simple lol
    est ce que vous connaissez un ouvrage qui traite simplement le vba
    pour comprendre la logique des variables progressivement ?

  12. #12
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Points : 1 562
    Points
    1 562
    Par défaut
    Bonjour,

    VBA est un vrai language, et certaines approches sont moins lisibles au début mais beaucoup plus efficace. Personnellement, ma bible a été
    http://bidou.developpez.com/article/VBA/

    Bonne continuation
    "Idéalement nous sommes ce que nous pensons. Dans la réalité, nous sommes ce que nous accomplissons." A.Senna
    et n'oubliez-pas de développer des .... sourires ^_^

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    pilote de production
    Inscrit en
    Août 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : pilote de production
    Secteur : Service public

    Informations forums :
    Inscription : Août 2015
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    je me heurte à un problème au rangement des données
    en effet quand j'appuie sur le bouton, les "N0" en jaune sur le fichier joint disparaissent
    j'ai essayé dans tous les sens mais rien à faire, j'ai juste réussi pour les intitulés en gras

    merci pour votre aide
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/02/2013, 16h52
  2. [XL-2003] Gestion graphiques en VBA: Afficher pourcentages et nom de catégorie sous condition
    Par garheb dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/07/2011, 14h03
  3. Réécriture d'URL sous condition de nom d'hôte
    Par stc074 dans le forum Apache
    Réponses: 3
    Dernier message: 05/10/2010, 15h37
  4. [Toutes versions] Transposer des cellules sous condition
    Par PPN83 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 18/09/2010, 17h57
  5. Create function sous condition
    Par nbl dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/05/2005, 12h00

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