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 :

Copier des données sous condition


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 49
    Points : 20
    Points
    20
    Par défaut Copier des données sous condition
    Bonjour à tous,

    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
    Sub Actualiser2()
     
    Dim c As Range, v As Range, y As Range
    Dim NewLig As Long
     
    Application.ScreenUpdating = False
    Set Sh = ThisWorkbook.Sheets("std")
    LastLig1 = Sh.Cells(Sh.Rows.Count, "A").End(xlUp).Row
    Dim valeur As String
     
    valeur = InputBox("Entrée période", "Choix de la période")
    If valeur <> "" Then
    Application.ScreenUpdating = False
     
    With Workbooks("2010 STD Activities status.xls").Sheets("2010")
        .AutoFilterMode = False
        LastLig2 = .Cells(.Rows.Count, "B").End(xlUp).Row
        With .Range("A4:X" & LastLig2)
            .AutoFilter field:=17, Criteria1:=valeur
            .AutoFilter field:=24, Criteria1:=">0"
            .AutoFilter field:=9, Criteria1:="STD"
        End With
        If .Range("A4:A" & LastLig2).SpecialCells(xlCellTypeVisible).Count > 0 Then
            For Each v In .Range("A5:A" & LastLig2).SpecialCells(xlCellTypeVisible)
                If v.Value <> "" Then
                    Set Sh = ThisWorkbook.Sheets("std")
                    Set c = Sh.Range("A2:A" & LastLig1).Find(v.Value, LookIn:=xlValues, lookat:=xlWhole)
                    NewLig = Sh.Cells(Sh.Rows.Count, "A").End(xlUp).Row + 1
                    For Each c In .Range("A5:A" & LastLig2).SpecialCells(xlCellTypeVisible)
                      Sh.Cells(NewLig, 1).Value = .Cells(c.Row, 2).Value
                      Sh.Cells(NewLig, 2).Value = .Cells(c.Row, 7).Value
                      Sh.Cells(NewLig, 3).Value = .Cells(c.Row, 8).Value
                      Sh.Cells(NewLig, 6).Value = .Cells(c.Row, 10).Value
                      Sh.Cells(NewLig, 8).Value = .Cells(c.Row, 12).Value
                      Sh.Cells(NewLig, 17).Value = .Cells(c.Row, 17).Value
                      Sh.Cells(NewLig, 13).Value = .Cells(c.Row, 24).Value
                      Sh.Cells(NewLig, 9).Value = .Cells(c.Row, 9).Value
                      Sh.Cells(NewLig, 10).Value = .Cells(c.Row, 29).Value
                      Sh.Cells(NewLig, 4).Value = UCase(Sh.Cells(NewLig, 1).Value) & UCase(Sh.Cells(NewLig, 2).Value)
                      Sh.Cells(NewLig, 4).Value = Replace(Cells(NewLig, 3).Value, " ", "")
                      NewLig = NewLig + 1
                        If Not c Is Nothing Then
                            v.Resize(1, 24).Copy c
                            Set c = Nothing
                            Else
                            LastLig1 = LastLig1 + 1
                            v.Resize(1, 24).Copy Sh.Range("A" & LastLig1)
                        End If
                    Next c
                End If
            Next v
        End If
        .AutoFilterMode = False
    End With
    End If
    Set Sh = Nothing
    End Sub

    Ci-dessus mon code, je souhaite copier des données sous conditions et que les données se mettent dans un ordre précis (dans le fichier qui consolide les données, STD)
    Le problème c'est que si la ligne existe déjà je veux juste que le programme recopie la ligne dessus mais si c'est une nouvelle ligne qu'elle soit copiée.
    Je ne sais pas si j'ai été assez claire.

    Merci de votre aide

    Delphine

  2. #2
    Membre habitué
    Femme Profil pro
    Inscrit en
    Février 2009
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2009
    Messages : 174
    Points : 195
    Points
    195
    Par défaut
    Bonjour Delphine,

    Clareté pas idéale...
    Pour l'instant, si je comprends bien, tu recopies des données en fonction de plusieurs critères (base de données filtrée), depuis l'onglet 2010 vers l'onglet STD.

    Ds l'onglet STD tu as déjà des données ? ou bien, l'onglet 2010 a des données en doublon ?

    Y a-t-il un n° de ref unique qui peut indiquer que la ligne existe déjà ? (ou il faut regarder tous les champs ?).
    S'il y a un tel n°, tu peux essayer un formule hlookup avt d'inserer la ligne.
    Attention, si la formule ne trouve pas la donnée, il renvoie une valeur d'erreur. Il faut donc border la formule avec "on error resume next" et "on error goto 0".

    Réponse rapide de ma part et pas très précise... mais je n'étais pas sûre de ton besoin... donc je n'ai pas trop développé...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 49
    Points : 20
    Points
    20
    Par défaut
    Bonjour,
    Merci pour ta réponse
    La feuille STD a déjà des données.
    Il y a la première colonne avec un numéro unique (et dans la feuille 2010 ce numéro se retrouve dans la deuxième colonne) et j'ai essayé de faire qq ch avec ce numéro mais sans résultats.
    je peux envoyer les fichiers si besoin
    Merci de votre aide et bon lundi de Pâques

Discussions similaires

  1. [XL-2007] D'un classeur, récupérer des données sous condition
    Par SenseniX dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 25/06/2010, 10h58
  2. [XL-2007] Récupérer des données sous conditions
    Par christophe31 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/05/2010, 15h20
  3. Copier des données selon conditions
    Par BOU59000 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/07/2009, 17h15
  4. copier des données avec conditions
    Par captaine93 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 13/12/2007, 16h47
  5. copier des lignes sous conditions (dans 2 colonnes différentes)
    Par olive08 dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 12/10/2007, 14h44

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