CopierColler avec condition très difficile

Bonjour à tous,

Alors premièrement, j'ai absolument besoin de votre aide,

Deuxièmement je suis une grosse bille en informatique

Alors je vous explique,

J'ai un identifiant en colonne B, un montant en colonne I

A chaque identifiant différent en colonne B, j'ai une ligne qui se saute, il se peut qu'il y ait plusieurs fois à la suite le même identifiant en colonne B

Exemple :

B ... I

1 ... 10

1 ... 10

1 ... 10

2 ... 15

3 ... 20

3 ... 17

4 ... 45

4 ... 50

4 ... 45

5 ... 10

5 ... 15

5 ... 15

6 ... 7

Ce que je voudrais, c'est que pour un identifiant en colonne B où le montant diffère en colonne I, copier toutes les lignes relatives à cet identifiant et les coller dans la feuille 2

Exemple d'algorithme en FR :

Déclaration z la ligne

Dans la plage A2 : N28065

SI le contenu de (z-1;B) = contenu de (z;B) et (z-1;I)=/=(z;I) ET z ou z-1 = NON VIDE ALORS (NON VIDE car une ligne se saute quand l'id change)

Copier toutes les lignes entre deux lignes vides

Coller en feuille 2

Sauter une ligne en feuille 2

z+1

Fin SI

J'imagine qu'il faudrait également un "compteur" de lignes pour la feuille 2 mais je sais pas comment la déclarer

Ce qui m'énerve c'est que j'ai la logique, je sens comment fonctionne le VBA, mais la syntaxe, la sémantique m'échappent et sur ça j'ai vraiment besoin d'aide parce que je n'y connais rien

Merci beaucoup

Up svp

J'ai vraiment besoin d'aide !!!

Bonsoir,

Sans fichier ? ...

Oui désolé j'avais oublié,

Bon je l'ai coupé mais il va jusqu'à 28065 lignes

7test-fichier.xlsx (24.77 Ko)

Ah ! Ah !

Tu veux transférer quoi exactement ? Uniquement ce qu'on voit ?

Et la ligne d'en-tête ? Il te la faut ou pas ?

Et la feuille il faut aussi la créer ?

Bon j'ai créé la deuxième feuille et ajouté l'entête

Ce que je voudrais, c'est que pour les ID Unique (colonne B), où les montants diffèrent, on copie toutes les lignes concernant cet identifiant unique

Et comme chaque identifiant unique est séparé par une ligne vide au dessous et au dessus, je soumettais l'idée en codage de copier toutes les lignes comprises en deux lignes vides (quand le montant diffère)

Vous voyez

Et les copier coller en feuille 2 en dessous de l'entete

Merci pour votre aide

6test-fichier.xlsx (25.42 Ko)

Bonjour,

Je ne posais pas de question sur la façon de faire ou pas....

Tu réponds indirectement sur la question des colonnes masquées... !

Mais pas sur le contenu à transférer (formules, type de données...) !

Ma préférence allant toujours à un transfert de valeurs, je vais donc voir dans ce sens !

Ah oui oui

Le but est de transférer les valeurs telles qu'elles, même si une formule a été appliquée sur des colonnes pour obtenir de nouvelles données sur une autre, il faut copier les valeurs telles qu'elles apparaissent sous la formule

Oui désolé j'avais mal compris, en fait oui c'est ça, je veux une "photo" de ces lignes en somme

Merci beaucoup

Voilà un essai :

Sub TftSiDifférences()
    Dim T, v, n%, i%, j%, k%, h%, Fc As Worksheet, tft As Boolean
    Set Fc = Worksheets("Feuil2")
    Fc.UsedRange.Offset(1).Clear
    With Worksheets("Feuil1")
        n = .Cells(.Rows.Count, 1).End(xlUp).Row
        For i = 2 To n
            If .Cells(i, 9) <> "" Then
                v = .Cells(i, 9): j = 0: tft = False
                Do While .Cells(i + j + 1, 9) <> ""
                    If .Cells(i + j + 1, 9) <> v Then tft = True
                    j = j + 1
                Loop
                If tft Then
                    T = .Cells(i, 1).Resize(j + 1, 14).Value2
                    For h = 0 To j
                        T(h + 1, 2) = "'" & .Cells(i + h, 2)
                        T(h + 1, 6) = CLng(DateValue(.Cells(i + h, 6)))
                        T(h + 1, 8) = CLng(DateValue(.Cells(i + h, 8)))
                    Next h
                    k = k + 2
                    Fc.Cells(k, 1).Resize(j + 1, 14).Value = T
                    k = k + j
                End If
                i = i + j
            End If
        Next i
    End With
    With Fc.Cells(2, 1).Resize(k, 14)
        .Columns(6).NumberFormat = "dd/mm/yyyy"
        .Columns(8).NumberFormat = "dd/mm/yyyy"
        .Columns(9).NumberFormat = "0.0"
        .Worksheet.Activate
    End With
End Sub

Bouton Test pour tester...

Explications selon besoins...

Cordialement.

Omg ce code

Franchement bravo là comme ça à vue d'œil je comprends RIEN DU TOUT

Je vais le lire et ensuite essayer de le comprendre puis le tester mais merci déjà ça m'a l'air bien énorme

Déjà, avec une ligne vide comme séparateur systématique dans la source on s'en sert comme critère unique pour détecter les blocs à transférer (ou pas), et on réintroduit cette ligne vide dans la cible par une incrémentation à +2 de la variable k lors d'un transfert (en veillant qu'en fin de transfert k soit alignée sur la dernière ligne utilisée dans la cible).

Pour les autres points pouvant réclamer des explications, je te laisse les inventorier d'abord...

Mais en fait je sais pas pourquoi tu mets des % aux variables, après c'est sûrement simple mais à mon niveau j'avais jamais encore trouvé une macro pareille

Et je ne sais pas pourquoi des variables qui seraient int ou range sont déclarée "as worksheet"

Si tu t'arrêtes aux déclarations de variables, on va préciser :

Il n'y a qu'une variable déclarée As Worksheet, et c'est effectivement pour l'initialiser avec une objet Worksheet (ta feuille cible).

Les variables se typent individuellement.

Les variables dont la déclaration se termine par % sont déclarées de type Integer, % étant équivalent à As Integer.

% est un caractère de déclaration de type (tape 'caractères de déclaration de type' dans l'aide VBA, tu auras la liste des caractères utilisables ainsi pour déclarer des variables). Cela raccourcit les déclarations.

Les variables ne comportant rien (ni caractère, ni As....) sont donc non typées, soit de type Variant.

L'une parce qu'elle est destinée à accueillir un tableau (les valeurs de la plage à transférer lors de chaque transfert), l'autre parce que le type de la valeur qui y sera affectée n'est pas absolument garanti à l'avance...

Cordialement.

Rechercher des sujets similaires à "copiercoller condition tres difficile"