VBA : tests sur plusieurs onglets en fonction de 2 variables

Bonjour le forum,

Je fais appel aux gens qui maîtrise VBA car j'avoue, encore une fois, mon incompétence. J'ai bien essayé d'adapter une macro fournie par Dan, mais je bloque sur ces fichus boucles "for each" et "for in" avec les quelques variables qui vont avec.

Je joins un bout de fichier avec les explications, j'espère assez claires, de ce que je souhaiterai obtenir.

https://www.excel-pratique.com/~files/doc/Eoa_CDE_FR.xls

Merci d'avance pour votre aide...

Fabrice,

Bonsoir,

regarde le fichier joint

Tu doubles-clic sur le numéro d'ID, en colonne A (et seulement sur celui-là), et ce que tu veux, tu l'as...

https://www.excel-pratique.com/~files/doc/Eoa_CDE_FR_v1.zip

Bonsoir Félix,

J'ai cliqué sur le (ou les) numéro ID mais rien ne se produit... D'autre part, je ne peux pas cliquer à chaque fois sur le numéro ID pour voir s'il existe dans un onglet "date" car pour certaines journées, j'aurai plusieurs milliers de lignes...

C'est une extraction quotidienne alors j'aimerai que la macro teste chaque ligne de l'onglet "Extraction du jour" et qu'en fonction de la date dans la colonne B, elle aille dans le bon onglet "date" (qui existera puisque je vais créer tous les jours du mois en onglet...) vérifier si le numéro ID existe. Si c'est le cas, que le curseur se positionne sur le numéro ID dans l'onglet "date". S'il ne trouve pas le numéro ID dans l'onglet "date", il faudrait que la macro me copie la ligne (colonne A à N de l'onglet "Export du jour") à la suite des lignes existantes (de l'onglet "date").

C'est difficile à expliquer et j'espère avoir été relativement clair.

En tous cas, merci grandement pour ton aide...

Fabrice,

Re,

tout comme dans le classeur, tu demandes :

...que le curseur se positionne sur le numéro ID dans l'onglet "date".....

Tu veux, ou pas, te rendre dans l'onglet "Date"?

Bonjour Felix,

Effectivement, si le numéro ID existe, je souhaite que le curseur se positionne dans le bon onglet de date et sur le numéro ID. Par contre, s'il n'existe pas, je souhaite que la ligne complète soit copiée dans le bon onglet de date à la suite des autres lignes, s'il y en a, et à la colonne I...

Mais là, tu me dis de double-cliquer sur le numéro ID pour lancer la macro, mais rien ne se passe. Il y a peut-être une option que je n'ai pas activée...

Merci de ton aide précieuse...

Fabrice,

Felix,

CELA FONCTIONNE !!! j'avais testé hier soir chez moi et rien ne se produisait... Par contre, sur le poste de mon boulot tout est OK... Génial !!!

Le seul truc maintenant, c'est que j'aimerais éviter de double-cliquer sur le numéro ID (puisque je vais avoir des extractions de milliers de lignes) et que la macro teste les lignes une à une et effectue le même travail...

Je me penche dessus aujourd'hui même pour essayer de le faire mais ton aide sera la bienvenue (et tu iras certainement beaucoup plus vite...).

Merci encore.

Fabrice,

0test.xlsx (61.98 Ko)

Bonjour,

je vois à peu-près ce que tu veux, mais c'est cet "à peu-près" qui me bloque...

si tu as plusieurs milliers de lignes à traiter, et qu'à chaque fois que le code trouve un nouveau numéro, on copie la ligne, ça c'est OK..

Maintenant, si sur tes 1500 lignes, tu as 1450 ID déjà repertoriés, il faut que tu te déplaces sur ces 1450 ID?

Sur le premier déplacement, le code s'interrompra, il faudra donc le reprendre 1449 autres fois.....

S'il faut continuerle code automatiquement, seuls les derniers ID des onglets seront activés.....

Je ne saisis pas trop, ton "déplacement"...

Ou simplement, veux-tu créer les ID manquants?

Pour que cela fonctionne chez toi, il faut activer les macros....

Pour cela, tu fais Outils/Macros/Sécurités, et définis le niveau de sécurité à "moyen"

Quitte puis redémarre Excel

Bonsoir Felix,

Oublions les déplacements qui n'ont aucune importance... Ce qui m'importe le plus, c'est qu'il faut que la macro teste ligne par ligne si le numéro ID n'existe pas dans le bon onglet de date et qu'elle le copie si elle ne le trouve pas.

Avec cela, j'aurais tout ce qu'il me faut...

Merci beaucoup pour ton dévouement.

Fabrice,

Bonsoir Felix,

Oublions les déplacements qui n'ont aucune importance... Ce qui m'importe le plus, c'est qu'il faut que la macro teste ligne par ligne si le numéro ID n'existe pas dans le bon onglet de date et qu'elle le copie si elle ne le trouve pas.

Avec cela, j'aurais tout ce qu'il me faut...

Merci beaucoup pour ton dévouement.

Fabrice,

Re,

modifie le code ainsi :

Option Explicit
Sub cherche()
Dim Cel As Range, I As Long
Dim DerLig As Long, DerLig2 As Long
Dim sh As Worksheet, Lign2 As Long
Dim Flag As Boolean

DerLig = [A65000].End(xlUp).Row
For I = 2 To DerLig
    Lign2 = 0
    For Each sh In Sheets
        If sh.Name = ActiveSheet.Cells(I, 2) Then
            With sh
                DerLig2 = .[I65000].End(xlUp).Row + 1
                On Error Resume Next
                Lign2 = Application.Match(ActiveSheet.Cells(I, 1).Value, .Range("I1:I" & DerLig2), 0)
                On Error GoTo 0
                If Lign2 = 0 Then
                    ActiveSheet.Range(Cells(I, 1), Cells(I, 14)).Copy .Cells(DerLig2, 9)
                End If
            End With
        End If
    Next sh
Next I
End Sub

Bonjour le Forum,

Un grand merci à Felix pour le code. Cela fonctionne parfaitement et c'est exactement ce que je n'étais pas parvenu à faire...

Je vais en profiter pour essayer de comprendre un peu mieux l'imbrication des boucles "For x = ..." et "For each..." ainsi que l'instruction "With...". (d'ailleurs, si quelqu'un pouvait me conseiller un ouvrage ou un site sur ce sujet...).

Je me répète mais c'est vraiment super de pouvoir compter sur votre dévouement à tous dans ce forum et de savoir qu'en cas de problème, il y aura certainement quelqu'un pour vous tirer de ce mauvais pas...

Encore merci à tous et un grand bravo à toi Felix.

Bon week-end.

Fabrice,

Rechercher des sujets similaires à "vba tests onglets fonction variables"