Positionnement alterné sur ligne paire et impaire

m.speciel Messages postés 1 Statut Membre -  
yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je viens solliciter votre aide sur un soucis que j'ai pour organiser une feuille excel 2016:
En effet je doit positionner des lignes contenant des informations sur des lignes paires ou impaires suivant un caractère comme condition:
Les lignes contenant le caractère D dans la colonne B doivent se positionner sur les lignes impaires et les lignes ne contenant pas le caractère D sur les lignes paires.
Mais il faut aussi que si il n'y a plus que des lignes sans caractère D (ou avec) qu'elles se mettent a la suite du reste sans lignes vides.

Un exemple fait "a la main " pour illustrer mon propos.

Feuille de départ


Résultat attendu


Merci d'avance pour votre aide

2 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour, suggestion (speco étant la feuille de départ, specn la feuille de destination):
    Option Explicit
    
    Private Sub specpi()
    Dim sho As Worksheet, shn As Worksheet
    Dim lcur As Long, nextD As Long, nextO As Long
    Set sho = ThisWorkbook.Sheets("speco")
    Set shn = ThisWorkbook.Sheets("specn")
    lcur = 2
    nextD = getnext(sho, 1, True)
    nextO = getnext(sho, 1, False)
    Do While nextD <> 0 Or nextO <> 0
        If nextD = 0 Then
            sho.Rows(nextO).Copy shn.Rows(lcur)
            nextO = getnext(sho, nextO, False)
        Else
            If nextO = 0 Then
                sho.Rows(nextD).Copy shn.Rows(lcur)
                nextD = getnext(sho, nextD, True)
            Else
                If lcur Mod 2 = 0 Then
                    sho.Rows(nextO).Copy shn.Rows(lcur)
                    nextO = getnext(sho, nextO, False)
                Else
                    sho.Rows(nextD).Copy shn.Rows(lcur)
                    nextD = getnext(sho, nextD, True)
                End If
            End If
        End If
        lcur = lcur + 1
    Loop
    End Sub
    Private Function getnext(sh As Worksheet, lig As Long, D As Boolean) As Long
    getnext = lig + 1
    Do While (sh.Cells(getnext, 1) <> "") And (InStr(sh.Cells(getnext, 2), "D") > 0) <> D
        getnext = getnext + 1
    Loop
    If sh.Cells(getnext, 1) = "" Then
        getnext = 0
    End If
    End Function
    
    
    1
  2. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Bonjour

    Plutôt qu'une image, peux tu envoyer un bout de ton fichier sur cjoint.com et joindre le lien obtenu à ton prochain message. N'oublies pas d'y ajouter des explications et des exemples de résultat attendu
    1) Tu vas dans https://www.cjoint.com/
    2) Tu cliques sur [Parcourir] pour sélectionner ton fichier
    3) Tu descends en bas de la page pour cliquer sur [Créer le lien Cjoint]
    4) Au bout de quelques secondes la deuxième page s'affiche, avec le lien
    en bleu souligné ; tu le sélectionnes et tu fais "Copier"
    5) Tu reviens dans ta discussion sur CCM, et dans ton message de réponse tu fais "Coller".

    Cdlmnt
    0