Copier ligne sur autre onglet

Bonjour,

Je souhaiterais avoir une formule pour copier une ligne compète sur un autre onglet en fonction de la première colonne.

Par exemple sur la première colonne de ma ligne 12 est "A" je veux qu'elle se copie sur l'onglet "A" si la première colonne de ma deuxième ligne est "B" je veux qu'elle se colle sur l'onglet "B" et si la troisième est encore "A" qu'elle se colle sous le ligne qui se sera copiée pour la première ligne avec un "A" dans l'onglet "A".

J'espère être clair. Ma grande difficulté est que si plusieurs ligne correspondent à "A", qu'elles se copie les une sous les autres dans 'onglet "A".

Merci de m'avoir lu,

Nico.

Bonjour,

Voici une proposition, qui serait certainement perfectible si vous déposiez un fichier avec des informations plus précises comme stipulé sur la charte du forum.

Donc pour ce voyage en eaux troubles, je poserais un petit pré-requis, avoir à chaque fois le nom de l'onglet "A", "B", ... sur l'onglet correspondant, disons en A1.

Supposons que la feuille commune s'appelle Origine. Il faut qu'il y ait une clé sur la colonne B, du moins dans cet exemple. C'est-à-dire que les valeurs de la colonne B sont numérotées à la suite 1, 2, .... et sont des valeurs uniques.

En A3 de chaque onglet (A, B, ...), vous avez vos entetes :

=INDEX(Origine!A:A;sommeprod(equiv(1;(Origine!A:A=$A$1)*(Origine!B:B>$B3);0))) 'en A4
=INDEX(Origine!B:B;sommeprod(equiv(1;(Origine!A:A=$A$1)*(Origine!B:B>$B3);0))) 'en B4
=INDEX(Origine!C:C;sommeprod(equiv(1;(Origine!A:A=$A$1)*(Origine!B:B>$B3);0))) 'en C4
etc

Cdlt,

Bonjour le fil, bonjour le forum,

Comme 3GB, sans fichier...

Une proposition VBA qui fonctionne si le tableau original commence en A1 avec une ligne de titre :

Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim NL As Integer 'déclare la variable NL (Nombre de Lignes)
Dim NC As Integer 'déclare la variable NC (Nombre de Colonnes)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim L As Integer 'déclare la variable L (incrément)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)

Set OS = Worksheets("Feuil1") 'définit l'onglet source OS (à adapter à ton cas)
TV = OS.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
NL = UBound(TV, 1) 'définit le nombre de lignes NL du tableau des valeurs TV
NC = UBound(TV, 2) 'définit le nombre de colonnes Nv du tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To NL 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
    D(TV(I, 1)) = "" 'alimente le dictionnaire D avec les éléments de la colonne 1 du tableau des valeurs TV
Next I 'prochaine ligne de la boucle
TMP = D.keys 'récupère dans le tableau temporaire TMP la liste des éléments du dictionnaire D sans doublon
For J = 0 To UBound(TMP) 'boucle 1 : sur tous les éléments J du tableau temporaire TMP
    K = 0: Erase TL 'initialise la variable K, efface le tableau des lignes TL
    On Error Resume Next 'gestion des errurs (en cas d'erreur passe à la ligne suivante)
    Set OD = Worksheets(TMP(J)) 'définit l'onglet de destination OD (génere une erreur si cet onglet n'existe pas)
    If Err > 0 Then 'condition : si une erreur a été générée
        Err.Clear 'supprime l'erreur
        Worksheets.Add After:=Sheets(Sheets.Count) 'ajoute un onglet vierge en derniere position
        Set OD = ActiveSheet 'définit l'onglet OD
        OD.Name = TMP(J) 'renomme l'onglet OD
    End If 'fin de la condition
    On Error GoTo 0 'annule la gestion des erreurs
    OD.Cells.ClearContents 'efface le contenu de l'onglet OD
    For I = 2 To NL 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
        If TV(I, 1) = TMP(J) Then 'condition : si la donnée ligne I colonne 1 de TV est égale à l'élément J de TMP
            K = K + 1 'incrémente K
            ReDim Preserve TL(1 To NC, 1 To K) 'redimensionne le tableau des lignes TL (autant de ligne de TV a de colonnes, K colonnes)
            For L = 1 To NC 'boucle 3 : sur toutes les colonne L du tableau des valeuts TV
                TL(L, K) = TV(I, L) 'récupère dans la ligne L de TL la donnée en colonne L de TV (=> Tranposition)
            Next L 'prochaine colonne de la boucle 3
        End If 'fin de la condition
    Next I 'prochaine ligne de la boucle 2
    OD.Range("A1").Resize(1, NC) = Application.Index(TV, 1) 'renvoie la premiere ligne de TV en A1 redimensionné de l'onglet OD
    OD.Range("A2").Resize(K, NC) = Application.Transpose(TL) 'renvoie le tableau TL transposé en A2 redimensionnée de l'onglet OD
Next J 'prochain élément de la boucle 1
OS.Activate 'active l'onglet OS
End Sub

Les onglets sont crées ou actualisés (s'ils existent déjà) à chaque lancement de la macro...

Pardon, effectivement j'ai zappé de vous mettre un exemple de la construction...

Je ne suis pas sûr de bien comprendre la construction de la formule proposée.

Voici un fichier exemple.

6fichier-test.xlsx (16.01 Ko)

Et la colonne où l'on doit prendre l'information pour la transposer à un onglet est la colonne "F" sur cet exemple mais elle peut être bouger si cela facilite les formules.

Re,

Quel exemple de flemmard !... Tu demandes de l'aide mais tu n'es même pas capable de nous permettre de t'aider...

Voici votre fichier avec des tableaux structurés. Vous pourrez adapter à votre convenance ensuite, déplacer les colonnes, faire comme vous voulez, c'est surtout pour avoir l'idée.

Vous avez mis des valeurs en colonne I donc je suis parti sur cette colonne mais si vous voulez, vous pouvez remplacer Analytique par Imputation dans les formules.

ORIGINAL[[Colonne]:[Colonne]] permet de figer la colonne pour plus facilement propager les formules.

Cdlt,

19fichier-test.xlsx (25.39 Ko)

Re,

Merci 3Gb pour la réponse, j'essaye de comprendre votre formule pour l'appliquer correctement mais je n'ai pas l'habitude d'en avoir de si compliquées.

Thauthème si l'exemple est comme ça c'est qu'il n'y a pas besoin de plus ! On n'a pas tous des fichiers de malades !!! Si tu ne veux pas aider je ne t'oblige pas mais pas la peine de venir mettre ton venin ici.

Re,

Et bien n'hésitez pas à me demander. Le fait de faire référence aux colonnes de tableaux (figées qui plus est) rallonge les formules et donne une impression de complexité au début mais la formule est de mémoire un index equiv (si j'en crois mon premier commentaire).

C'est vrai que ThauThème a la gâchette facile mais il faut comprendre que le manque d'explications nous pousse à fournir davantage d'efforts que nécessaire et nous donne l'impression d'un désinvestissement de la part de l'auteur du sujet, ce qui peut agacer à la longue, malgré toutes nos bonnes intentions.

@ThauThème : Décidément, je vais finir par te facturer des honoraires d'avocat .

OK, je comprends que ça ne soit pas évident sans infos. En tout cas merci pour les réponses :) C'est vraiment chouette de pouvoir avoir de l'aide comme ça !

ThauThème désolé pour le message c'est déjà cool de prendre le temps de répondre. Merci aussi pour ça :)

Merci beaucoup ! Cela fonctionne parfaitement :)

Bon jour le fil, bonjour le forum,

Aïe 3GB ! Ça va encore me coûter un bras j'imagine...

Rechercher des sujets similaires à "copier ligne onglet"