Positionnement alterné sur ligne paire et impaire

Fermé
m.speciel Messages postés 1 Date d'inscription samedi 2 juin 2018 Statut Membre Dernière intervention 2 juin 2018 - 2 juin 2018 à 20:51
yg_be Messages postés 22728 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 - 3 juin 2018 à 11:06
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
A voir également:

2 réponses

yg_be Messages postés 22728 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 476
3 juin 2018 à 11:06
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
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
3 juin 2018 à 11:02
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