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 :

Aide Vba copier coller sous condition [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2011
    Messages : 52
    Points : 19
    Points
    19
    Par défaut Aide Vba copier coller sous condition
    Bonsoir à tous et toutes,
    Voilà j'essaye de modifier un code vba:

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
      Dim varcol As Integer
      Dim varlig As Integer
      Dim varfeuille As String
      varcol = Target.Column
      varlig = Target.Row
      varfeuille = "Reel " & Right(ActiveSheet.Name, Len(ActiveSheet.Name) - 6)
      If varcol <> 10 And varcol <> 19 And varcol <> 28 And varcol <> 37 And varcol <> 46 Then Exit Sub
      If Len(Target.Value) = 0 Then
        For i = 0 To 7
        Sheets(varfeuille).Cells(varlig, varcol - i).ClearContents
        Next
        Exit Sub
      End If
      If Target.Value = "v" Then Target.Value = "V"
      Sheets(varfeuille).Cells(varlig, varcol) = Target.Value
      Sheets(varfeuille).Cells(varlig, varcol - 1) = Cells(varlig, varcol - 1).Value
      Sheets(varfeuille).Cells(varlig, varcol - 2) = Cells(varlig, varcol - 2).Value
      Sheets(varfeuille).Cells(varlig, varcol - 3) = Cells(varlig, varcol - 3).Value
      Sheets(varfeuille).Cells(varlig, varcol - 4) = Cells(varlig, varcol - 4).Value
      Sheets(varfeuille).Cells(varlig, varcol - 5) = Cells(varlig, varcol - 5).Value
      Sheets(varfeuille).Cells(varlig, varcol - 6) = Cells(varlig, varcol - 6).Value
      Sheets(varfeuille).Cells(varlig, varcol - 7) = Cells(varlig, varcol - 7).Value
    End Sub
    Le code est visible sur les feuilles "prévi"
    Ce code permet de recopier des valeurs si en colonne J;S;AB;AK OU AT
    ce trouve la valeur "V", le code fonctionne actuellement si le "V" est mis manuellement mais pas si ils sont mis via formules.

    Les V sont mis sur les feuilles correspondante a tout ce qui est prévi (12 feuilles, 1/mois) et les données sont recopiées sur les feuilles réel (12 feuilles, 1/mois)

    Merci d'avance a qui pourra m'aider
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonsoir,
    Une première chose, apprends-toi à mettre les balises code "#"
    Sans avoir analysé ton code, transformes cette partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    If Target.Value = "v" Then Target.Value = "V"
    Sheets(varfeuille).Cells(varlig, varcol) = Target.Value
    Sheets(varfeuille).Cells(varlig, varcol - 1) = Cells(varlig, varcol - 1).Value
    Sheets(varfeuille).Cells(varlig, varcol - 2) = Cells(varlig, varcol - 2).Value
    Sheets(varfeuille).Cells(varlig, varcol - 3) = Cells(varlig, varcol - 3).Value
    Sheets(varfeuille).Cells(varlig, varcol - 4) = Cells(varlig, varcol - 4).Value
    Sheets(varfeuille).Cells(varlig, varcol - 5) = Cells(varlig, varcol - 5).Value
    Sheets(varfeuille).Cells(varlig, varcol - 6) = Cells(varlig, varcol - 6).Value
    Sheets(varfeuille).Cells(varlig, varcol - 7) = Cells(varlig, varcol - 7).Value
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
       With Sheets(varfeuille)
        If UCase(Target.Value) = "V" Then
          .Cells(varlig, varcol) = Target.Value
          For i = 1 To 7
            .Cells(varlig, varcol - i) = Cells(varlig, varcol - i).Value
          Next i
        End If
      End With
    si c'est ce que tu cherches

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2011
    Messages : 52
    Points : 19
    Points
    19
    Par défaut
    Bonsoir casefayere
    Tout d'abord merci de ta réponse, le soucis en fait c'est que cela ne recopie que pour le lundi dans le réel et pas pour les autres jours.

    Je m explique, dans le prévi si par exemple dans la colonne temps je met 2 les données sont recopiées dans le jour d’après par formule si je met 3 dans les 2 jours d’après etc

    Mais dans le réel seul ce qui est dans le 1er jour est recopier c'est ça le soucis..
    A mon avis c'est du au fait que le "V" est mis fia formule et pas manuellement

    change par ex la valeur de "tps" dans prévi Aout au lundi 5 en "2" au lieu de "1" et met le "V" en colonne conf, ensuite regarde dans réel Aout tu comprendra mieux le soucis

    Je suis encore a mes début en formules excel et en vba / macro, n'en parlons pas .... Peut être existe il également un moyen autre de remplir les autres jours en fonction du temps (macro ou vba) ce qui eviterais les multiples formules ^^
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Je pourrais peut-être te proposer de passer par des boutons de commande mais il faut que je comprenne bien le but recherché

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2011
    Messages : 52
    Points : 19
    Points
    19
    Par défaut
    En somme il y a un planning prévisionnel, et un planning réel.
    Je cherche juste a transférer les données du mois prévi dans le mois réel si la pose est confirmée "V"

    Je me suis faciliter la tache dans le prévisionnel en faisant en sorte que lorsqu'un chantier dure + d'1 jour, il soit copier dans les jours suivants (via formule si) sous base de la durée colonne "tps".

    En fait actuellement les données ce recopient bien dans le réel SI je remplis manuellement le "V" mais lors d'un chantier de plusieurs jours, le "V" est mis automatiquement via ma formule et je crois que c'est a cause de ça que le code VBA ne fonctionne pas et que cela ne recopie que les données pour le jour auquel j'ai mis manuellement le "V"

    Plus explicite dans le fichier si joint sur les feuilles prévi Aout et Reel Aout
    Fichiers attachés Fichiers attachés

  6. #6
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Peux-tu me dire à quoi servent les colonnes masquées dans lesquelles il n'y a que "#REF!" ?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2011
    Messages : 52
    Points : 19
    Points
    19
    Par défaut
    oui bien sur, en fait il y a une fonction qui permet de rechercher si la marchandise pour le chantier est en magasin ou pas via une formule rechercheV
    la liste des marchandises est sur une autre feuille actuellement pour ne pas encombré le fichier pour le forum

    Le voici le fichier complet
    Fichiers attachés Fichiers attachés

  8. #8
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Essaies avec le bouton et dis-moi

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2011
    Messages : 52
    Points : 19
    Points
    19
    Par défaut
    Bonjour,
    C'est presque çà, sauf que maintenant le 1er jour ne ce copie plus
    J'ai le mardi le mercredi mais plus le lundi.
    Bat

  10. #10
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour d.deneys, le forum,

    Changes simplement cette ligne, c'est une étourderie de ma part :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    For x = 19 To 49 Step 9
    ...
    pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    For x = 10 To 49 Step 9
    ...
    autre question : j'ai vu que chaque numéro de groupe contient 2 lignes, faut-il tenir compte de cette 2ème ligne ?, si oui changes ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
         With Sheets(Varfeuille)
            .Range(.Cells(y, x - 7), .Cells(y, x)) = Range(Cells(y, x - 7), Cells(y, x)).Value
          End With
    ...
    en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ...
          With Sheets(Varfeuille)
            .Range(.Cells(y, x - 7), .Cells(y + 1, x)) = Range(Cells(y, x - 7), Cells(y + 1, x)).Value
          End With
     
    ....

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2011
    Messages : 52
    Points : 19
    Points
    19
    Par défaut
    Re Bonjour,
    Cela fonctionne impeccable.
    Pour la 2eme ligne c'est tout simplement car si un chantier dure - de 1 jour genre 0,6 on peux ajouter un autre chantier avec de max 0,3.
    Donc il faut que ça fasse pareil que pour le reste si y a un V on copie si pas de V on fait rien.

    Apres, c'est vraiment indispensable de passé par un bouton?, vraiment impossible juste d'automatiser?

  12. #12
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Re,
    Pour la 2eme ligne c'est tout simplement car si un chantier dure - de 1 jour genre 0,6 on peux ajouter un autre chantier avec de max 0,3.
    Donc il faut que ça fasse pareil que pour le reste si y a un V on copie si pas de V on fait rien.
    Donc, il faut enlever dans la boucle "Step 2", soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    For x = 10 To 49 Step 9
      For y = 6 To Dl
        If UCase(Cells(y, x)) = "V" Then
          With Sheets(Varfeuille)
            .Range(.Cells(y, x - 7), .Cells(y, x)) = Range(Cells(y, x - 7), Cells(y, x)).Value
          End With
        End If
      Next y
    Next x
    Apres, c'est vraiment indispensable de passé par un bouton?, vraiment impossible juste d'automatiser?
    Je vais y réfléchir car, comme tu le disais, tes formules pertubent l'évènement "Change"
    On peut toujours automatiser à l'ouverture du classeur, à sa fermeture, avant son enregistrement...etc., mais je ne pense pas que ce se soit ça qui t'intéresse.

    Apres, c'est vraiment indispensable de passé par un bouton?, vraiment impossible juste d'automatiser?
    essayes comme ça
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    varcol = Target.Column
    y = Target.Row
    If varcol <> 10 And varcol <> 19 And varcol <> 28 And varcol <> 37 And varcol <> 46 Then Exit Sub
    With ActiveSheet
      Varfeuille = "Reel " & Right(.Name, Len(.Name) - 6)
      Dl = .Range("B" & .Rows.Count).End(xlUp).Row
    End With
    With Sheets(Varfeuille)
      For x = 10 To 49
        .Range(.Cells(y, x - 7), .Cells(y, x)).ClearContents
      Next x
      For x = 10 To 49 Step 9
        If UCase(Cells(y, x)) = "V" Then
          .Range(.Cells(y, x - 7), .Cells(y, x)) = Range(Cells(y, x - 7), Cells(y, x)).Value
        End If
      Next x
    End With
    End Sub

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2011
    Messages : 52
    Points : 19
    Points
    19
    Par défaut
    GENIALLLLLLLLLLLLLLLLLL

    Merci infiniment !!!!

    Excel ne finira pas de impressionner et vos connaissances également

    Voila mon projet finit a 95%
    Il me reste juste a trouver comment faire pour que tout ce qui n'a pas été validé dans le prévisionnel "V" une fois la date dépassée apparaisse sous forme de liste dans une nouvelle feuille que je dois appeler "A replanifier"

    Vous qui avez l'air bien caler la dedans, que pensez vous de ce genre de planning, il y a bcp de planning qui existent en excel mais je n'en avais trouver aucun sous cette forme, le planning de Gant n'est vraiment dans ce cas pas adapter car je trouve qu'il est plutôt fait pour de très long chantier ou il y a plusieurs corps de métier qui interviennent.

    Auriez vous fait autrement?

  14. #14
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Il me reste juste a trouver comment faire pour que tout ce qui n'a pas été validé dans le prévisionnel "V" une fois la date dépassée apparaisse sous forme de liste dans une nouvelle feuille que je dois appeler "A replanifier"
    Je pense que ça mérite un nouveau sujet afin de ne pas alourdir la discussion (dans ton intérêt)

    Mets ce sujet en résolu, penses à voter (ça fait toujours plaisir ) et crées une nouvelle discussion, je m'y attellerai.

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

Discussions similaires

  1. [XL-2007] Macro copier coller sous condition date
    Par isolf dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 24/07/2014, 18h32
  2. copier coller sous condition
    Par d.deneys dans le forum Macros et VBA Excel
    Réponses: 52
    Dernier message: 25/08/2013, 12h11
  3. [XL-2003] Copier coller sous condition
    Par Nathan87 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 10/03/2011, 11h20
  4. Débutant en VBA - Copier coller selon conditions
    Par anthony787 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/08/2010, 16h29
  5. [VBA-E] Copier coller sous conditions de couleur
    Par titeZ dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 10/04/2007, 18h27

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