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 :

Détecter des fins de séries [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 8
    Points : 8
    Points
    8
    Par défaut Détecter des fins de séries
    Bonjour à tous,

    Après avoir consacré un certain nombre de minutes, d'heures et de jours (bon j'exagère un tout ptit peu), je me vois réduit à vous appeler "au secours !!"

    Je dois au sein d'une feuille Excel modifier la structure des données enregistrées :
    sur chacune des X lignes (ici des lignes 8 à 73), je dois vérifier à chaque fois à quel moment la série de données s'arrête : j'ai des données systématiquement jusqu'à la colonne DG, et après des séries de données toutes les 11 colonnes (ou pas !) : soit la ligne s'arrête à la colonne DG (111ème col), soit la colonne DG+11, soit DG+22, .... etc jusqu'à IT au max.

    Si la série s'arrête en DG+11, je dois insérer une nouvelle ligne où A:CV est identique et CW: DG comporte les données de DG+1: DG+11
    Si la série s'arrête en DG+22, je dois insérer deux nouvelles lignes où A:CV est identique et CW: DG comporte les données de DG+1: DG+11 pour la première ligne et CW: DG comporte les données de DG+12: DG+22 pour la deuxième colonne.
    etc... (si la série s'arrête en DG+33, on crée 3 lignes...) au max, on aura 13 créations de lignes pour une ligne donnée.

    Au final on aura un gros tableau, où toutes les lignes s'arrêteront bien en DG.


    Voilà !

    Ci-dessous, le programme que j'ai créé (mais n'étant pas très doué..), et qui concrètement ne fait rien du tout quand je le fais tourner (aucune modif)!

    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
    Sub ligne_salarie()
    Dim i As Integer
    Dim z As Integer
    Dim x As Integer
    Dim compteur As Integer
    
    compteur = 0
    z = 0
    
    
    For i = 8 To 73
    
    i = i + compteur
    
    '''ici, je regarde combien de lignes, je devrai créer (z-1) pour la ligne "i" étudiée
    
    If Range("CW" & i).Value = "" Then Exit Sub 
    z = 0
    If Range("IJ" & i).Value <> "" Then z = 14 Else
    If Range("HY" & i).Value <> "" Then z = 13 Else
    If Range("HN" & i).Value <> "" Then z = 12 Else
    If Range("HC" & i).Value <> "" Then z = 11 Else
    If Range("GR" & i).Value <> "" Then z = 10 Else
    If Range("GG" & i).Value <> "" Then z = 9 Else
    If Range("FV" & i).Value <> "" Then z = 8 Else
    If Range("FK" & i).Value <> "" Then z = 7 Else
    If Range("EZ" & i).Value <> "" Then z = 6 Else
    If Range("EO" & i).Value <> "" Then z = 5 Else
    If Range("ED" & i).Value <> "" Then z = 4 Else
    If Range("DS" & i).Value <> "" Then z = 3 Else
    If Range("DH" & i).Value <> "" Then z = 2 Else z = 1
    
    '''ici, je copie/colle les plages de cellules dans les CV premières colonnes des nouvelles lignes
    
    Select Case z
    Case z <> 1
    Rows("i+1:i+z-1").Insert Shift:=xlDown
    Range("E" & i, "CV" & i).Select
    Selection.Copy
    Range("E" & i + 1, "CV" & i + z - 1).Select
    ActiveSheet.Paste
    
    '''ici, je copie/colle les plages de cellules dans les colonnes CW:FG des nouvelles lignes
    x = 1
    Do
    x = x + 1
    Range(Cells(i, 112 + 11 * (x - 2)), Cells(i, 122 + 11 * (x - 2))).Select
    Selection.Copy
    Range("CW" & i + x - 1, "DG" & i + x - 1).Select
    ActiveSheet.Paste
    Loop While x = z
    
    Case z = 1
    End Select
    
    '''ici, je prépare le "i" à correspondre à une nouvelle ligne à étudier (je décale bien la future itération des Z-1 nouvelles lignes introduites)
    compteur = z - 1 + compteur
    
    Next
    End Sub
    Merci !

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 592
    Points : 730
    Points
    730
    Par défaut
    Bonsoir,

    As u lancé la Macro en mode debug pour voir ce qui se passe mal?

    PPz
    La qualité et la précision de la réponse sont proportionnelles à celles de la question.

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Pour info, j'ai trouvé une solution en modifiant pas mal le programme (il devait y avoir un certain nombre d'erreurs, que je n'arrivais d'ailleurs pas à identifier).

    Voici le programme final :

    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
    Sub ligne_salarie()
    Dim i As Integer
    Dim z As Integer
    Dim x As Integer
    Dim compteur As Integer
     
    For i = 8 To 73
    z = 1
     
    If Range("DH" & i).Value <> "" Then z = 2
    If Range("DS" & i).Value <> "" Then z = 3
    If Range("ED" & i).Value <> "" Then z = 4
    If Range("EO" & i).Value <> "" Then z = 5
    If Range("EZ" & i).Value <> "" Then z = 6
    If Range("FK" & i).Value <> "" Then z = 7
    If Range("FV" & i).Value <> "" Then z = 8
    If Range("GG" & i).Value <> "" Then z = 9
    If Range("GR" & i).Value <> "" Then z = 10
    If Range("HC" & i).Value <> "" Then z = 11
    If Range("HN" & i).Value <> "" Then z = 12
    If Range("HY" & i).Value <> "" Then z = 13
    If Range("IJ" & i).Value <> "" Then z = 14
    Range("A" & i).Value = z
     
    Next
     
    compteur = 0
     
    For i = 8 To 73
    z = Range("A" & i).Value
     
    If z <> 1 Then
    Range("E" & i, "CV" & i).Select
    Selection.Copy
    Range("E" & 74 + compteur, "CV" & 74 + compteur + z - 2).Select
    ActiveSheet.Paste
     
    x = 1
    Do
    x = x + 1
    Range(Cells(i, 112 + 11 * (x - 2)), Cells(i, 122 + 11 * (x - 2))).Select
    Selection.Copy
    Range("CW" & 74 + compteur + x - 2, "DG" & 74 + compteur + x - 2).Select
    ActiveSheet.Paste
    Loop Until x = z
    compteur = compteur + z - 1
    End If
     
     
    Next
     
    End Sub

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 27/02/2012, 10h44
  2. Détecter la fin du chargement des images
    Par GregPeck dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/02/2006, 21h18
  3. Réponses: 2
    Dernier message: 02/12/2005, 21h21
  4. Réponses: 1
    Dernier message: 02/12/2005, 20h18
  5. [TMediaPlayer] Détecter la fin de lecture
    Par ysr1 dans le forum C++Builder
    Réponses: 1
    Dernier message: 30/09/2004, 18h03

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