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 :

Utilisation de Copier/Coller avec Condition


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2
    Par défaut Utilisation de Copier/Coller avec Condition
    Bonjour à tous,

    Je suis débutant en langage VBA et je bloque un peu.

    J'ai un tableau de la forme suivante : (approximativement 200lignes)

    (NOM) (PRENOM) (HORAIRE) (LIEU DE TRAVAIL) (HEURE NORMAL)
    JACK HENRI Jour LYON OUI
    ERIC LOLO NUIT LYON OUI
    TOTO HEPAR jour LYON NON
    RENE POLO NUIT LYON OUI


    Mon but est d'insérer automatiquement une ligne en dessous dès que la condition horaire normal est à Non.
    Dans cette ligne inséré je voudrais retrouver exactement les mêmes informations que celle du dessus.

    Résultat final :

    (NOM) (PRENOM) (HORAIRE) (LIEU DE TRAVAIL) (HEURE NORMAL)
    JACK HENRI Jour LYON OUI
    ERIC LOLO NUIT LYON OUI
    TOTO HEPAR jour LYON NON
    TOTO HEPAR jour LYON NON
    RENE POLO NUIT LYON OUI


    Pour l'instant j'ai écrit cette formule :

    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
    Sub test()
     
    i = 2
    compteur = 1
    nbcell = Application.WorksheetFunction.CountA(Feuil1.Range("$A:$A"))
     
    While i <= nbcell
     
    VARTEST = Range("O" & i).Value
    If VARTEST = "Normal" Then
    MsgBox "ok"
     
    Rows(i + 1).Copy Rows(i)
    Rows(i + 1).Insert
    i = i + 1
    nbcell = nbcell + 1
    End If
    MsgBox "shit"
    i = i + 1
     
    Wend
     
    End Sub
    J'ai bien une ligne qui s'insère en dessous correctement mais je ne colle strictement rien dedans, de plus j'ai des formules sur toute ma feuille et je ne veux que cela fonctionne de la même manière sans décaler.

    Merci par avance de vos conseils et de votre aide.

    Bonne soirée

  2. #2
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Je te propose le code suivant :
    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
    Sub test()
    Dim test As Range
    Dim i As Integer
     
    With Worksheets("Feuil3")
        Set test = .Rows(1).Find("(HEURE NORMAL)", LookIn:=xlFormulas, lookat:=xlWhole)
        For i = 1 To .Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
            If test.Offset(i, 0) = "NON" Then
                test.Offset(i + 1, 0).EntireRow.Insert Shift:=xlUp
                test.Offset(i, 0).EntireRow.Copy
                test.Offset(i + 1, 0).EntireRow.Select
                test.Offset(i + 1, 0).EntireRow.PasteSpecial
                i = i + 1
                Application.CutCopyMode = False
            End If
        Next i
        .Columns(1).Find("*", , , , xlByColumns, xlPrevious).Offset(1, 0).Select
    End With
    End Sub
    Il fonctionne mais n'est surement pas optimal. Probablement que quelqu'un d'autre aura une meilleur solution.
    Pour autant, j'imagine qu'il répondra à tes attentes ! ^^

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2
    Par défaut
    Bonjour,

    Merci pour votre réponse. Par contre je rencontre plusieurs soucis.

    Tout d'abord, je ne comprends pas pourquoi vous avez mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Find("*", , , , xlByColumns, xlPrevious)
    De plus quand je lance le programme j'ai l'erreur suivante :

    Variable objet ou Variable de bloc WITH non définie
    Et dans If test.Offset(i, 0) = "Normal" Then j'ai en résultat de variable "Nothing", le problème doit donc venir d'ici.

    Merci par avance de vos réponses.

  4. #4
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Ce message d'erreur signifie que tu n'as pas stipulé la bonne feuille sur laquelle tu travailles...

    J'aurais peut-être du préciser qu'il faut changer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With Worksheets("Feuil3")
    par le bon nom.

  5. #5
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Pour te répondre malgré tout :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Find("*", , , , xlByColumns, xlPrevious).Row
    signifie que je cherche la dernière ligne non-vide. Cela permet permet de toujours aller jusqu'a la dernière ligne si ton tableau augmente ou diminue => gain de "temps".

    De plus : As-tu bien "(HEURE NORMAL)" comme entête exacte ? J'entends par là est-ce que la cast est bien MAJ avec des parenthèses de chaque côté ? Si ce n'est pas le cas, remplace cette recherche par le nom exacte du titre de ta colonne.

Discussions similaires

  1. Macro- Copier-coller avec conditions
    Par touchard.mathieu dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 15/02/2014, 17h17
  2. Copier coller avec condition if and then
    Par blackty1 dans le forum Excel
    Réponses: 7
    Dernier message: 18/07/2013, 10h20
  3. [XL-2007] Macro- Copier-coller avec conditions
    Par natou_pc dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 12/05/2013, 18h57
  4. copier coller avec condition
    Par ons1402 dans le forum Excel
    Réponses: 4
    Dernier message: 14/09/2012, 12h45
  5. [XL-2000] macro copier coller avec condition ne marche pas
    Par antfo dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 17/03/2010, 10h54

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