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 avec conditions


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 138
    Par défaut copier des données avec conditions
    Bonjour !
    Dans le jeu de données ci-joint, je voudrais copier les valeurs de la colonne C dans la colonne H selon plusieurs critères…
    Par exemple je veux copier pour les valeurs de la colonne A « 3160T1,1 » la plus petite valeur positive de la colonne C…ici, la valeur est 286.
    J’ai une ébauche de code que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Range("a1").Select
     
      For Index = 2 To 50
              If (Cells(Index, 1) = "3160T1,1" and cells(Index,3)>0)Then
               Range(Cells(Index, 3), Cells(Index, 3)).Select
     
            Selection.Copy
             Range(Cells(Index, 8), Cells(Index, 8)).Select
            ActiveSheet.Paste
     
          End If
        Next Index
     
    End Sub
    Ce code ne répond pas à « la plus petite valeur positive »…de plus, je ne sais pas généraliser ce code pour les autres valeurs de la colonne A : j’ai d’autres valeurs comme 3160t1,10 3160t1,11…(la valeur du chiffre après la virgule variant de 1 à 40 mais toutes les valeurs n’y sont pas forcément)…
    Merci à ceux qui pourront m’aider
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    SAlut
    Voila un debut je n'est aps trop le temps mais ce bout de code devrait te permettre de faire la liste des differents noms contenus dans ta colonne 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
    20
    21
    22
    23
    Sub MiniVal
    Dim PlageNom as Range, TestRange as range
    Dim StrList(10) as String
    Dim LastStr as Integer
     
    PlageNom = Range("A1", Range("A1").End(xlDown))
    LastStr = 0
    'On cré la liste de nom differents existant dans la colonne A
    For each TestRange In PlageNom
        For i = 0 to High(StrList)
             If TestRange.Text = StrList(I) Then 
                 Goto Deja
             ElseIf TestRange.Text = "" Then
                 Exit For
             End If
        Next i
        StrList(LastStr) = TestRange.Text 
        If LastStr = High(StrList) Then Redim Preserve StrList(High(StrList) + 10) 'Allocation par bloc de 10 pour evité l'etalement en memoire
        LastStr = LastStr +1
    Deja:
    Next TestRange 
     
    End Sub
    Je regarderai pour la suite apres mangé

    J'ai fait ca sous Open Office ! et oui je l'avais oublié celui la mais bon j'ai pas l'aide a la syntaxe donc y'a peut etre des erreur de terme je n'ai pas testé le code

    A++
    QWaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 138
    Par défaut
    Merci...
    Problème de définition de "High"...dois je le définir en range ?
    Encore merci de ton aide

  4. #4
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    'Ensuite il faut chercher la valeur la plus petite
    ValeurP 9999999 'Mettre une valeur tres grande je sais pas si en vb il y a pas un truc style Max_Int (qui represente la plus grande valeur possible pour un Integer
    For i = 0 To LastStr
        For each TestRange In PlageNom 'A la place de la boucle Fro each tu doit pouvoir utiliser Cells.find mais je ne l'ai jamais utilisé renseigne toi, ca gagnerai beaucoup de temps
            If (StrList(i) = TestRange.Text) And (cInt(ValeurP.text) > Cint(Cells(TestRange.row,3))) Then 
                ValeurP := CInt(Cells(TestRange.row,3))
                RowP := TestRange.row 
            end If
        Next TestRange      
        Cells(rowP,8) = ValeurP
        ValeurP.Text = cstr(9999999)
    Next i
    Heu zut pour High non c'est que je fait plus du Delphi que du VB High est un mot clef qui te permet d'optenir la plus grande valeur d'un tableau,je regarde ca
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  5. #5
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Re
    Voila j'ai pas retrouvé la function qui le fait je pensais a HigherBound ou HighBound mais je l'ai pas retrouvé, enfin bref

    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 MiniVal
    Dim PlageNom as Range, TestRange as range
    Dim StrList(10) as String
    Dim LastStr as Integer
    Dim ValeurP, RowP as Integer
    Dim MaxStr as Integer
     
    MaxStr = 10
     
    PlageNom = Range("A1", Range("A1").End(xlDown))
    LastStr = 0
    'On cré la liste de nom differents existant dans la colonne A
    For each TestRange In PlageNom
        For i = 0 to High(StrList)
             If TestRange.Text = StrList(I) Then 
                 Goto Deja
             ElseIf TestRange.Text = "" Then
                 Exit For
             End If
        Next i
        StrList(LastStr) = TestRange.Text 
        If LastStr = MaxStr Then
            MaxStr = MaxStr + 10 'Allocation par bloc de 10 pour evité l'etalement en memoire
            Redim Preserve StrList(MaxStr)
        End
        LastStr = LastStr +1
    Deja:
    Next TestRange
     
    'Ensuite il faut chercher la valeur la plus petite
    ValeurP 9999999 'Mettre une valeur tres grande je sais pas si en vb il y a pas un truc style Max_Int (qui represente la plus grande valeur possible pour un Integer
    For i = 0 To LastStr
        For each TestRange In PlageNom 'A la place de la boucle Fro each tu doit pouvoir utiliser Cells.find mais je ne l'ai jamais utilisé renseigne toi, ca gagnerai beaucoup de temps
            If (StrList(i) = TestRange.Text) And (cInt(ValeurP.text) > Cint(Cells(TestRange.row,3))) Then 
                ValeurP := CInt(Cells(TestRange.row,3))
                RowP := TestRange.row 
            end If
        Next TestRange      
        Cells(rowP,8) = ValeurP
        ValeurP.Text = cstr(9999999)
    Next i
     
    End Sub
    Je n'ai pas put le tester Open Office reconnait pas les as range .....

    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  6. #6
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    SAlut
    En cherchant autre chose pour quelqu'un d'autre je suis tombé sur BDMin qui te permet de sortir la plus petite valeur celon critere, en l'assemblant avec d'autre function ca serait peut etre possible de resortir ce que tu veux sans avoir a faire du code
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

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

Discussions similaires

  1. Grouper des données avec condition
    Par jzb10n dans le forum Excel
    Réponses: 3
    Dernier message: 21/01/2015, 11h01
  2. copier des infos avec condition entre deux feuilles
    Par suikasensei dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/07/2011, 17h36
  3. Copier des données sous condition
    Par delphine1987 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/04/2011, 22h17
  4. Copier des données selon conditions
    Par BOU59000 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/07/2009, 17h15
  5. Ajout des données avec une condition
    Par jean sami dans le forum SQL
    Réponses: 2
    Dernier message: 15/09/2008, 06h21

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