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 :

Code pour copier des cellules si elles respectent une condition


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 48
    Points : 41
    Points
    41
    Par défaut Code pour copier des cellules si elles respectent une condition
    Salut je galere trop pour faire une macro qui me copierait (idealement deplacer) une cellule et les 3 suivantes de la meme ligne sur la ligne precedente mais avec un decalage de 5 colonnes seulement si la premiere cellule contenait le caractere $ et ainsi de suite sur tout le fichier.
    Ex
    mon fichier a traiter:
    106-012-130 MC3#2 358901 PEPS 001
    106-012-131 MC3#2 359817 PEPS 001
    106-012-132 MC3#2 363254 PEPS 001
    106-012-133 MC3#2 373083 PEPS 001
    $ 8.13 152.00 $ 1,235.76
    106-012-134 MC3#2 373182 PEPS 001
    $ 8.13 79.00 $ 642.27
    106-012-135 MC3#2 373376 PEPS 001
    106-012-136 MC3#2 379438 PEPS 001

    Apres traitement il devrait etre comme suit:
    106-012-130 MC3#2 358901 PEPS 001
    106-012-131 MC3#2 359817 PEPS 001
    106-012-132 MC3#2 363254 PEPS 001
    106-012-133 MC3#2 373083 PEPS 001 $ 8.13 152.00 $ 1,235.76
    $ 8.13 152.00 $ 1,235.76
    106-012-134 MC3#2 373182 PEPS 001 $ 8.13 79.00 $ 642.27
    $ 8.13 79.00 $ 642.27
    106-012-135 MC3#2 373376 PEPS 001

    L'ideal serait meme de supprimer la ligne copier mais bon ca c'est superflu.
    Si quelqu'un pourrait m'aider ??
    Merci

  2. #2
    Membre confirmé Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Points : 638
    Points
    638
    Par défaut
    Bonjour,

    Commences par faire un boucle qui parcourt le fichier (Boucle verticale : iLigne).
    Utilises un If avec la validation du caractère à la position 1 si celui-ci correspond à "$".

    Si c'est le cas, copie et colle (boucle horizontale iColonne) à ligne précédente (iLigne-1) colonne 5-6-7 (comme tu veux)

    Ensuite, Supprime ligne courante (iLigne)

    Commences un code et postes ce que tu as ici!

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 48
    Points : 41
    Points
    41
    Par défaut
    Houla c'est trop schematique pour moi vu comment je suis nul.
    Pour l'instant j'avais fait ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub decaleDroite()
        Dim feuille As Worksheet, col As Integer
        Set feuille = Feuil2
        For i = 1 To feuille.UsedRange.Rows.Count
            col = feuille.Range("A" & i).End(xlToRight).Column
            If feuille.Cells(i, col) = "$" Then col = col + 5 And i = i - 1
            feuille.Cells(i, 1).Copy feuille.Cells(i, col)
            If col > 1 Then feuille.Range("A" & i).Clear
        Next i
    End Sub
    Mais je mélange mes i donc la variable peut pas marcher. J'ai tout faux??

  4. #4
    Membre confirmé Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Points : 638
    Points
    638
    Par défaut
    Je n'ai pas beaucoup de temps présentement, mais dans environ 2 heures je te reviens sur ce.

    Question en attendant, peux-tu donner un exemple de fichier?
    Pour savoir, est-ce que la dernière colonne de la ligne sans $ est la même?
    Si oui, c'est quelle? si non, est-ce qu'il a un parteurn?

  5. #5
    Membre confirmé Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Points : 638
    Points
    638
    Par défaut
    Essais ceci, tu auras bien sur à changer les colonnes.

    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
    Sub decaleDroite()
     
        Dim sh As Worksheet
        Dim icol As Integer 'Compteur de ligne
     
        Set sh = Worksheets("Feuil2")
        'Initialise à la première ligne de données.
        icol = 1    'Remplace 1 par la premières ligne de données (si tu as un en-tête de colonne ou autre).
     
        'Boucle verticale exécutant le code tanque que la première colonne est non vide.
        While sh.Cells(icol, 1) <> ""
     
            'Prend le caractère de gauche et vérifie si c'est le $
            If Left(sh.Cells(icol, 1), 1) = "$" Then
     
                'Fait un boucle horizontale pour copier et coller chaque colonne de la ligne $ à la suite de la ligne précédente.
                For i = 1 To 10 'Ici au lieu du 10 indique la colonne max que peut avoir la ligne commencant par $.
                    sh.Cells(icol - 1, i + 8) = sh.Cells(icol, i)   'Ici remplaces 8 par la dernière colonne que peut prendre la ligne SANS $.
                Next i
                'Supprime la ligne en cours.
                sh.Rows(icol).Delete Shift:=xlUp
     
            Else
     
                'Augmente le compteur de ligne si on ne supprime pas de ligne.
                icol = icol + 1
     
            End If
        Wend
     
    End Sub
    Mais le While fonctionne seulement si tu n'as pas de ligne vide au milieu de tes données. Si c'est le cas, on peut arranger le code avec un For et détecter la dernière ligne remplie!
    S'il a quelque chose, fais signe!

  6. #6
    Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 48
    Points : 41
    Points
    41
    Par défaut
    Ca marche c enorme tu m'as fait gagner un temps fou merci beaucoup.
    Juste pour info, si le caractere $ n'est pas en premiere position mais inclus dans le texte de la cellule quel test faut il faire??

  7. #7
    Membre confirmé Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Points : 638
    Points
    638
    Par défaut
    Au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Left(sh.Cells(icol, 1), 1) = "$" Then
    Utilise la rechercher dans une chaine.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If InStr(1, sh.Cells(icol, 1), "$") <> 0 Then
    Et voila!

  8. #8
    Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 48
    Points : 41
    Points
    41
    Par défaut
    Ok merci beaucoup.

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

Discussions similaires

  1. [XL-2007] Code pour remplir des cellules non basé sur les colonnes
    Par Philippe_shelby dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 22/01/2015, 23h46
  2. [XL-2007] Boucle pour copier des valeurs à la suite dans une même feuille
    Par LaMite dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/04/2014, 18h21
  3. [XL-2013] Copier des cellules en fonction d'une plage de cellules
    Par Flows dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 24/02/2014, 18h38
  4. Réponses: 7
    Dernier message: 22/03/2011, 18h00
  5. [XL-2007] Bouton pour copier des cellules d'une feuille à une autre
    Par Samizarrad dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/03/2010, 16h27

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