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 :

VBA - Boucle qui copie et place des cellules [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 22
    Par défaut VBA - Boucle qui copie et place des cellules
    Bonjour, j'ai fait un programme qui teste un tableau dans une feuille et qui le recopie dans une autre en fonction du résultat voici mon 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
    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    Option Explicit
    Sub test()
     
    Dim i As Integer
     
    Dim j As Integer
     
    j = 1
     
    For i = 2 To 11
     
    If Sheets("Feuil1").Range("C" & i) = "N/A" Then
     
        i = i + 1
        'Incrémente i de 1 si FC = "N/A"
     
    End If
     
    If Sheets("Feuil1").Range("B" & i) <> Sheets("Feuil1").Range("B" & i - 1) Then
     
        Sheets("Feuil1").Range("B" & i).Copy Destination:=Sheets("Feuil2").Range("A" & j)
        'Affiche le tittre si le titre précédent est différent
     
    End If
     
    If Sheets("Feuil1").Range("C" & i) <> "N/A" Then
     
    j = j + 2
     
        Sheets("Feuil1").Range("C" & i).Copy Destination:=Sheets("Feuil2").Range("B" & j)
        'Affiche FC si elle n'est pas non applicable
     
        Sheets("Feuil1").Range("A" & i).Copy Destination:=Sheets("Feuil2").Range("A" & j)
        'Affiche ID si FC n'est pas non applicable
     
    End If
     
    If Sheets("Feuil1").Range("D" & i) = "NON" Then
     
    j = j + 3
     
        Sheets("Feuil1").Range("E" & i).Copy Destination:=Sheets("Feuil2").Range("A" & j)
     
    Else
     
    j = j + 3
     
        Sheets("Feuil1").Range("D" & i).Copy Destination:=Sheets("Feuil2").Range("A" & j)
        'Affiche le Seuil A ou S en fonction de leur valeur
     
    End If
     
    If Sheets("Feuil1").Range("F" & i) <> "NON" Then
     
    j = j + 4
     
        Sheets("Feuil1").Range("F" & i).Copy Destination:=Sheets("Feuil2").Range("A" & j)
        'Affiche la NORME si il y en a une
     
    End If
     
     
    If Sheets("Feuil1").Range("G" & i) <> "NON" Then
     
    j = j + 5
     
        Sheets("Feuil1").Range("G" & i).Copy Destination:=Sheets("Feuil2").Range("A" & j)
        'Affiche le SCHEMA si il y en a un
    End If
     
    Next i
     
    End Sub

    Je joins aussi le fichier Excel pour comprendre plus facilement quel résultat je veux obtenir.

    Dans un premier temps si la colonne "FC" = "N/A" le programme dois passer à l'incrémentation suivante, puis affiché le titre dans "Feuil2" si le titre de la ligne précédante dans "Feuil1" est différent ensuite affiché l'ID.
    Ensuite il teste dans quel colonne il y a un seuil dans "feuil1" et le recopie dans "feuil2"
    Enfin il affiche la Norme et le Schéma s’il y en a et la boucle reprend.


    Il y a trois problèmes :

    1) Dans la "feuil2" les informations sur superpose ou ne se place pas au bon endroit (sur la "feuil2" Jai remplit à la main ce qui doit normalement apparaitre)

    2) Des colonnes où il y a "N/A" apparaissent

    3) Dans le cas où il y a un schéma et pas de norme je n'arrive pas à faire en sorte que l'information sur le schéma vienne à la place de la norme


    Si vous avez des idées je suis preneur. Merci d'avance

    PS : il n'y a pas la macro dans la PJ
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Contre les règles du forum, voilà
    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
    Sub Test()
    Dim LastLig As Long, i As Long, j As Long
    Dim Titre As String
    Dim Flag As Boolean
    Dim k As Byte
     
    Application.ScreenUpdating = False
    Feuil2.UsedRange.ClearContents
    With Feuil1
        LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
        For i = 2 To LastLig
            If .Cells(i, 3) <> "N/A" Then
                j = j + 1
                Flag = Titre <> .Cells(i, 2)
                If Flag Then
                    Titre = .Cells(i, 2)
                    Feuil2.Cells(j, 1) = Titre
                    j = j + 2
                End If
                Feuil2.Cells(j, 1) = .Cells(i, 1)
                Feuil2.Cells(j, 2) = .Cells(i, 3)
                j = j + 1
                For k = 4 To 7
                    If .Cells(i, k) <> "NON" Then
                        Feuil2.Cells(j, 1) = .Cells(i, k)
                        j = j + 1
                    End If
                Next k
            End If
        Next i
    End With
    End Sub

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 22
    Par défaut
    mercatog

    HEP HEP HEP merci mais reviens ici tu m'explique au lieux de me donné la solution comme ça

  4. #4
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,
    Plutôt que de vérifier si la cellule vaut "N/A", tu peux utiliser IsNa:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If IsNa(Range("A1")) Then ...
    Es-tu sûr de ton incrémentation de j ? Et qu'en est-il de i ? En effet, tu utilises une boucle pour i, mais tu incrémentes i dans ta boucle, ce n'est pas standard comme procédure ...
    Peux-tu expliquer avec des mots comment tu veux incrémenter i et j (avec quelques exemple, pas besoin d'expliquer les 5 cas).
    Je pense que tes problèmes de decalages viennent de ton incrémentation de i et j.
    De plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    If Sheets("Feuil1").Range("C" & i) = "N/A" Then
    '...
    End If
    '...
    If Sheets("Feuil1").Range("C" & i) <> "N/A" Then
    '...
    End If
           'EST EQUIVALENT A :
    If Sheets("Feuil1").Range("C" & i) = "N/A" Then
    '...
    Else
    '...
    End If
    Est-ce que plusieurs conditions peuvent être vérifiée en même temps ?

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 22
    Par défaut
    Je connaissais pas IsNa je vais voir ça


    Citation Envoyé par riaolle Voir le message
    Est-ce que plusieurs conditions peuvent être vérifiée en même temps ?
    J'ai fais le code dans se sens là pour que l'incrémentation passe directement la la suivante si il y a un "N/A"


    Citation Envoyé par riaolle Voir le message
    Es-tu sûr de ton incrémentation de j ? Et qu'en est-il de i ?
    Pas sur dutout j'ai essayer plusieurs chose mais soit ça récopie par dessus soit les espacements son mauvais

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Il n'y a rien à expliquer
    En pas à pas une boucle et des tests

    Oui c'est vrai c'était pas bien de donner le code

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 22
    Par défaut
    Etant débutant sur VBA j'ai besoin de plus d'explications désolé

    Flag as bolean sert a quoi ? je suppose que c'est pour qu'il n'y est pas de problème pour afficher le titre mais je vois pas comment ça marche

    et k ?

    Je comprends pas cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
    et comment t'as fait pour que le schéma prenne la place de la norme quand il n'y a pas de norme ?

  8. #8
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Cells(.Rows.Count, 1).End(xlUp).Row
    ça te donne le numéro de la dernière ligne remplie de la colonne 1 (A)

    On boucle de la ligne 2 à la dernière ligne (variable i) et on test d'abord si la cellule Ci est différentes de "N/A"
    On incrémente j (variable qui sert de ligne où écrire dans Feuil2)
    Titre étant une variable String qui prend le texte de la cellule Bi
    Flag étant une variable booléen (TRUE/FALSE) qui indique le changement de valeur dans la colonne B

    Donnée Variable_Titre Variable_Flag (Variable_Titre<>Donnée)
    TITRE1 (vide) TRUE
    TITRE1 TITRE1 FALSE
    TITRE1 TITRE1 FALSE
    TITRE2 TITRE1 TRUE
    TITRE2 TITRE2 FALSE

    ....etc

    Je dis que rien à expliquer, car il suffit d'aller en pas à pas à l'aide de F8, tu vas comprendre le processus. (Ou même à l'aide d'une feuille et d'un crayon comme explique ci-haut)

    Efface tout et refais l'exercice sur cette base

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

Discussions similaires

  1. [LibreOffice][Texte] Macro qui copie la numérotation des titres dans le titre lui-même
    Par Nerva dans le forum OpenOffice & LibreOffice
    Réponses: 0
    Dernier message: 23/04/2013, 16h56
  2. Existe-il une macro qui permet de différencier des cellules identiques ?
    Par marion1857 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/04/2013, 16h57
  3. [VBA-E] Comment faire une boucle lorsqu'il y a des cellules vides
    Par Annick.w dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 01/02/2007, 22h39
  4. [VBA-E]Gros problème d'actualisation des cellules
    Par soad029 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 13/04/2006, 10h03
  5. [VBA]effacer les espaces à ralonge dans des cellules
    Par repié dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/01/2006, 11h00

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