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 :

Copie de ligne avec 2 conditions


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2008
    Messages : 235
    Par défaut Copie de ligne avec 2 conditions
    Bonjour, j'aimerais copier certaines lignes en fonctions de 2 conditions, voici le code que j'ai entre pour le moment :
    Code vba : 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
        dl = .Range("a" & Rows.Count).End(xlUp).Row
        Set n = .Range("B1:B" & dl).Find(date1)
        Set c = .Range("A1:A" & dl).Find(nomjournal)
        'Set b = .Range("b" & a.Row, "b" & dl).Find(date2)
        If date1 <> "" Or date2 <> "" Then
            Sheets.Add After:=Worksheets(Worksheets.Count)
            ActiveSheet.Name = "Ecriture"
            irow = 0
            irow2 = 1
            firstaddress = n.Address
            For x = 1 To dl - 1
                irow = irow + 1
                'Emepeche le rafraichissement de l'écran, pour ne pas voir le traitement
                Application.ScreenUpdating = False
                    Worksheets(nomfeuille).Select
                    If Not n Is Nothing And c <> "***" Then
                        'copie des lignes concerner
                        Sheets("Ecriture").Cells(irow2, 1).Columns("A:BP").Value = n.EntireRow.Value
                        irow2 = irow2 + 1
                        Sheets("Ecriture").Select
                    End If
                Set n = .Range("b1:b" & dl).FindNext(n)
                'Set c = .Range("a1:a" & dl).FindNext(nomjournal)
                Set c = .Range("A" & c.Row, "A" & dl).Find(nomjournal)
                If n Is Nothing Or n.Address = firstaddress Then
                    Exit For
                End If
                'Set a = .Range("B" & a.Row, dl).Find(date1)
            Next x
        Else
            Set c = .Range("A1:A" & dl).Find(nomjournal)
            Sheets.Add After:=Worksheets(Worksheets.Count)
            ActiveSheet.Name = "Ecriture"
            irow = 0
            irow2 = 1
            For x = 1 To dl - 1
                irow = irow + 1
                'Emepeche le rafraichissement de l'écran, pour ne pas voir le traitement
                Application.ScreenUpdating = False
                If c <> "***" Then
                    'création d'une nouvelle feuille et on l'a renomme
                    firstaddress = c.Address
                    'copie des lignes concerner
                    Sheets("Ecriture").Cells(irow2, 1).Columns("A:BP").Value = c.EntireRow.Value
                    irow2 = irow2 + 1
                    Sheets("Ecriture").Select
                End If
                Set c = .Range("A" & c.Row, "A" & dl).Find(nomjournal)
            Next x
        End If
    Simplement, il me copie pas quand les deux conditions sont juste, mais quand l'une ou l'autre est juste, or j'ai bien mit un 'and' et non un 'or' dans mon test 'if'.

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

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour Lilp, re le forum,
    mais quand l'une ou l'autre est juste, or j'ai bien mit un 'and' et non un 'or' dans mon test 'if'.
    je suis peut-etre miro mais ce que je vois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If date1 <> "" Or date2 <> "" Then
    me laisse sceptique
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut
    Bonjour à tous,

    Je crois que lilp1 doit parler de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not n Is Nothing And c <> "***" Then
    sinon c'est vrai que c'est louche

    D'ailleurs qu'entends-tu par ? Est-ce c différent de "quelque chose" ? Cela reviendrait donc à dire If c Is Nothing non ?

    Peut-être pourrais-tu tester comme cela. De plus, essaie d'imbriquer les 2 conditions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If Not n Is Nothing Then
        If c <> "***"  Then
        End If
    End If
    A+

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2008
    Messages : 235
    Par défaut
    Oui cette ligne c'est bien un 'or', mais je ne teste pas encore la variable 'date2', je peut supprimer cette ligne pour le moment et la remplacer par
    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    If date1 <> "" then
    Je parle de la ligne :
    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not n Is Nothing And c <> "***" Then
    Qui est censer rentrer dans la boucle quand n n'est pas nul et quand c est différent de ***

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2008
    Messages : 235
    Par défaut
    J'ai résolut le probleme, j'avait mit :
    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Ecriture").Cells(irow2, 1).Columns("A:BP").Value = a.EntireRow.Value
    Au lieux de :
    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Ecriture").Cells(irow2, 1).Columns("A:BP").Value = c.EntireRow.Value

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2008
    Messages : 235
    Par défaut
    Enfaite le pbrs n'est pas du tout résolut, je n'avait pas fait attention, mais il ne tient pas du tout compte de ma date, il copie quelque soit la date. Mon test 'if' ac la date et la valeur de 'c' ne marche que pour la valeur de 'c'

    Code vba : 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
    dl = .Range("a" & Rows.Count).End(xlUp).Row
        Set a = .Range("B1:B" & dl).Find(date1)
        'Set b = .Range("B1:B" & dl).Find(date2)
        Set c = .Range("A1:A" & dl).Find(nomjournal)
        If date1 <> "" Or date2 <> "" Then
            Sheets.Add After:=Worksheets(Worksheets.Count)
            ActiveSheet.Name = "Ecriture"
            irow = 0
            irow2 = 1
            firstaddress = a.Address
            For x = 1 To dl - 1
                irow = irow + 1
                'Emepeche le rafraichissement de l'écran, pour ne pas voir le traitement
                Application.ScreenUpdating = False
                    Workbooks(nomfichier).Activate
                    Worksheets(nomfeuille).Select
                        If c <> "***" And myrange = a Then
                        Workbooks(classeur).Activate
                        Sheets(nomfeuil).Select
                            'copie des lignes concerner
                            Sheets("Ecriture").Cells(irow2, 1).Columns("A:BP").Value = c.EntireRow.Value
                            irow2 = irow2 + 1
                            Sheets("Ecriture").Select
                        End If
                Set a = .Range("b1:b" & dl).FindNext(a)
                'Set b = .Range("b1:b" & dl).FindNext(b)
                Set c = .Range("A" & c.Row, "A" & dl).Find(nomjournal)
                If a Is Nothing Or a.Address = firstaddress Then
                    Exit For
                End If
            Next x
    Je viens de voir, qu'en faite c'est que la valeur 'c' et la valeur 'a' ne tourne pas a la mm vitesse, ma valeur 'a' prend directement la valeur rechercher celle rentrer dans une cellule, puis passe a la valeur d'aps, au lieux de commencer a la premiere ligne du document texte, ce qui fait que les valeurs de 'a' et de 'c' st ts le tps decalé

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut
    Re,

    En même temps, je t'ai proposé quelque chose il y a quelques jours, tu ne l'as pas utilisé et tu as gardé ton code. Que veux-tu de plus ? Si tu veux 2 conditions, ben tu prends ce que je t'ai donné pour l'autre sujet où il y avait marqué 2 critères. Ca sert à rien de poster des sujets, d'obtenir des réponses, de marquer "Sujet Résolu" et de continuer avec ce que tu avais à la base. Enfin bref...

    Tu sais, moi et les .Find, on est pas trop amis. Alors je te parle même pas des .FindNext. Comprendre ton code revient au mal de crâne assuré pour moi. En plus, tu n'as pas une seule boucle. Bref, c'est pas mon truc.

    Alors soit quelqu'un d'autre t'aide soit tu reprends ce que je t'ai donné et tu essaies d'adapter. Si tu ne comprends pas tu demandes, je peux t'aider. Si t'es bloqué, pareil. Mais pour ça, il faut des détails : quelles sont les conditions, où sont-elles, que faire si oui ou si non...

    Voilà, @+

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

Discussions similaires

  1. Masquer des lignes avec une condition
    Par mjp06 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 08/03/2019, 19h23
  2. [XL-2003] Supprimer lignes avec 1 condition
    Par Vadorblanc dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 31/10/2010, 22h13
  3. Copie de ligne avec condition
    Par lucazzo dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 07/09/2009, 17h58
  4. [E-03] Copie de ligne avec condition de type rechercheV
    Par Lufia dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 27/02/2009, 14h24
  5. Copier des lignes avec une condition
    Par gliglian dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/02/2009, 00h06

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