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 :

DEBUTANT Macro reporter certaines cellules avec conditions dans une autre feuille avec emplacement déterminé


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 9
    Points : 5
    Points
    5
    Par défaut DEBUTANT Macro reporter certaines cellules avec conditions dans une autre feuille avec emplacement déterminé
    * Bonjour, *

    J'ai essayé de voir sur internet, et de comprendre le langage VBA, mais j'ai beaucoup de mal. Je dois donc être considéré comme un parfait débutant (n'ayons pas peur des mots !)
    Je ne demande pas forcément, un code tout fait, mais surtout les explications qui vont avec, j'aime bien comprendre ce que je fais. Dans tous les cas, merci à tous ceux qui se pencheront sur mon problème et merci d'avance.

    J'ai 2 feuilles "Echéancier" et "Relevé". Je souhaite à partir d'un bouton lancer une macro pour transférer des données de la feuille "Echéancier" sur la feuilel "Relevé".
    En utilisant le fichier joint, ça donnerait : si F6 = "à saisir" alors recopier les cellules A6 à E6 dans feuille "Relevé" sous les lignes déjà présentes au niveau des colonnes B à F, ET recopier la date apparaissant en F5, dans la colonne A de la ligne correspondante.
    Idem pour G6 jusqu'à Q6 (à vérifier tous le temps, car les relevés risquent de ne pas être effectué tous les mois). Une fois le report réalisé, le terme "Saisi" apparait à la place de "à saisir", dans la/les cases correspondantes
    Idem pour ligne 9, 12 et suivante (en ajoutant le cas échéant de nouvelle donnée) si elles ne sont pas vides (sachant que le terme à saisir n'apparaitra que sur ces lignes multiples de 3)

    Petit plus sur la feuille "Relevé" les lignes s'ordonnent selon la date (la plus récente en haut)

    * Merci *
    Fichiers attachés Fichiers attachés

  2. #2
    Membre expérimenté
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Points : 1 499
    Points
    1 499
    Par défaut grhum
    Bonjour,

    La structure de la feuille "Echéancier" est Bizarre.
    Si tu as 12 "à saisir" sur la ligne 6 alors tu recopies 12 fois les mêmes informations. C'est pour le moins étonnant.

    Voici néanmoins une amorce de code qui devra être améliorée. Voir fichier joint

    En particulier, que se passe-t-il pour les données déjà copiées ?
    en l'état actuel elles subsistent dans la feuille "Relevé", ce qui risque de provoquer des doublons.

    Cordialement,
    Fichiers attachés Fichiers attachés

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Super, c'est énorme ! ça fonctionne super bien. Il y avait à priori un bug dans ton code pour le classement par date. J'ai modifier cette partie à l'aide d'un bout de code que j'avais fait sur un autre document. Tu peux éventuellement jeter un oeil pour le simplifier (code ci-dessous)


    En fait il n'y a pas de doublon, car dès que c'est "Transférer", la cellule change de nom, elle ne s'appelle plus "à saisir" mais "saisi" !

    Dans tous les cas, merci pour ton aide et les explications jointes !

    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
    Sub Tansfert()
    Dim lig As Integer    ' déclaration ligne feuille échéancier
    Dim derlig As Integer ' déclaration dernière ligne feuille relevé
    Dim i As Integer      ' déclaration compteur de boucle for
    Dim derligECH         ' déclaration dernière ligne feuille Echéancier
    lig = 6  ' initialisation lig à 6
    derligECH = Sheets("Echéancier").Range("a65536").End(xlUp).Row ' dernière ligne occupée de la feuille Echéancier
     
    Sheets("Relevé").Activate ' on active la feuille Relevé
     
    Do While lig <= derligECH 'tant que lig est inférieur ou égale à derligECH on boucle
       With Sheets("Echéancier")
         For i = 1 To 12
           If .Cells(lig, 5 + i) = "à saisir" Then
              derlig = Sheets("Relevé").Range("b65536").End(xlUp).Row + 1 ' dernière ligne occupée (évolutive) de la feuille Relevé
              Cells(derlig, 2) = .Cells(lig, 1) ' copie col A feuille échéancier dans col B de feuille relevé
              Cells(derlig, 3) = .Cells(lig, 2) ' copie col B feuille échéancier dans col C de feuille relevé
              Cells(derlig, 4) = .Cells(lig, 3)
              Cells(derlig, 5) = .Cells(lig, 4)
              Cells(derlig, 6) = .Cells(lig, 5)
              Cells(derlig, 1) = .Cells(lig - 1, 5 + i) ' copie date feuille échéancier dans col A de feuille relevé
              .Cells(lig, 5 + i) = "saisi"              ' remplace en due place "a saisir" par "saisi"
           End If
         Next i
       End With
      lig = lig + 3 ' on incrémente lig de 3 ligne
    Loop
     
    ' trie descendant
     Columns("A:A").Select
        ActiveWorkbook.Worksheets("Relevé").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Relevé").Sort.SortFields.Add Key _
            :=Range("A5:A15478"), SortOn:=xlSortOnValues, Order:=xlDescending, _
            DataOption:=xlSortTextAsNumbers
        With ActiveWorkbook.Worksheets("Relevé").Sort
            .SetRange Range("A4:G15478")
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
    End With
     
    End Sub

  4. #4
    Membre expérimenté
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Points : 1 499
    Points
    1 499
    Par défaut macro reporter
    Bonjour,

    Je ne vois pas ou se situe le problème dans la date.

    Dans le trie ne met pas 15478 mais "derlig". Ainsi il trie le nombre de ligne exact et tu n'aura pas de surprise le jour où il y aura plus de 15478 lignes.

    Doublon : Je crois que tu ne m'as pas compris.
    - si la feuille relevé repart à 0 à chaque appui sur le bouton alors il faut prévoir un "clearcontents" au départ car si le nombre de ligne est inférieur au précédent lancement des lignes subsisteront.
    - si un nouveau lancement doit s'ajouter au résultat précédent alors il faut se positionner sur la dernière ligne +1 et cela n'est pas prévu.

    N'oublie pas de marquer résolu dès que tu sera sûr de ton fait.
    cordialement

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Bonsoir,

    Le bug vient de cette ligne, avec le message Erreur d'exécution '1004'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       .SetRange Range("A4:F" & derlig)
    Pour le doublon, je ne comprends pas ce que tu veux dire. J'ai fait quelques test par rapport à ce que je voulais et ça à l'air de fonctionner.

  6. #6
    Membre expérimenté
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Points : 1 499
    Points
    1 499
    Par défaut macro reporter
    Bonsoir,

    Le bug vient du fait que pendant mes essais j'ai dû retaper "à saisir" et avant de t'expédier le fichier j'ai taper "a saisir" . tu vois le loup !!!???

    Pour les doublons, je n'insiste pas. La question se posera sans doute plus vite que prévu à l'usage.

    Cordialement

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Ok, je vais refaire des tests avant de cloturer la discussion. Encore merci pour ton aide.

Discussions similaires

  1. Copier coller une feuille dans une autre feuille avec condition
    Par souhail72 dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 06/03/2015, 09h52
  2. Réponses: 5
    Dernier message: 21/06/2012, 14h22
  3. recherchev dans une autre feuille avec condition
    Par lucien(67) dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 03/12/2010, 18h22
  4. Réponses: 1
    Dernier message: 15/02/2010, 10h15
  5. [JDOM] Insérer une balise dans une autre balise avec condition
    Par maya dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 06/10/2009, 12h28

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