fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr en fr fr fr fr fr fr fr fr fr fr cs fr fr fr fr fr fr fr fr fr fr fr fr fr fr en en fr fr fr fr fr en fr nl fr fr fr fr fr fr fr fr en fr en fr fr fr fr fr fr fr fr fr fr fr fr fr fr pl fr fr en en en fr de fr fr fr fr fr fr fr es fr fr fr en fr fr fr en en fr de fr fr fr fr fr fr es fr pl fr fr en en en fr de fr fr fr en fr fr fr fr fr es fr fr fr en de fr de fr fr fr es fr de fr fr fr en en fr de fr fr en fr id fr pl fr fr en en en fr de fr fr fr fr fr fr fr en fr fr fr fr en en fr fr en en fr fr fr fr fr de fr fr fr en en fr de en fr fr fr fr fr en fr id sv fr pl fr fr en en en fr de fr fr fr fr fr fr es fr fr fr en de fr de fr fr fr fr fr fr fr fr fr fr de fr fr fr en en fr de en fr fr fr fr fr en fr id fr pl fr fr en en en fr de fr fr fr fr fr fr fr fr fr pl fr fr en en en fr de fr fr es fr fr fr en de fr de ro fr fr fr fr fr fr de fr fr fr en en fr de en fr fr fr fr id fr fr fr fr en en fr en fr fr en en en fr
Me voilà fraichement arrivé car essayant d'aller un peu loin dans Excel je me trouve qq peu bloqué...
Alors voilà, j'aimerai savoir comment l'on peut réaliser ce petit exercice :
J'insère dans un fichier excel dans le premier onglet une multitude de ligne. J'aimerai que par des formules, si c'est possible, les faire dispatcher automatiquement dans les onglets 2 & 3 selon un des critères que j'aurai défini.
Chacune des lignes que j'insère ont un identifiant et c'est par celui que les critères vont se baser :
_ Si le critère (identifiant) de la ligne dans l'onglet 1 est A, B ou C alors je retrouve la ligne dans l'onglet 2
Je connais qq trucs mais ca... Je me gratte la tête depuis qq jours et je ne sais pas du tout comment faire !
Si qq'un a une petite idée de la manière de procéder ca m'enleverait une sacré épine du pied !
Ce que tu demandes est faisable par formulee matricielles.
Mais il faut savoir que ces formules sont gourmandes en temps de calcul.
Pour aller plus loin et répondre de façon précise à ta demande, il faudrait que tu nous joignes un extrait de ton fichier (sans données confidentielles).
Indique nous également le nombre de lignes théorique de ton vrai fichier
Merci beaucoup pour ton aide.
Donc j'aimerai que les lignes où le lieu est "Jardin ou Maison" se retrouve dans l'onglet 1
Si le lieu est "Salle de bain ou Cuisine" les lignes se retrouvent dans l'onglet 2.
Le fichier sur lequel je travaille comporte environ une dizaine de colonnes et 5-600 lignes.
Merci pour ton aide en tout cas !
Le 29/09/2009 à 18:34
J'espère que ce que j'ai fait correspond à ce que tu veux! Il te suffit de cliquer sur le bouton pour dispatcher tes données.
Le 29/09/2009 à 21:19
2003 FR-2007 FR-MAC 2004 FR
Vois ce lien et le fichier placé dans ma réponse
Le 29/09/2009 à 21:59
Tout d'abord Merci Greg974 pour ta réponse !
C'est tout à fait ce que je cherche mais j'aimerai comprendre afin de le reproduire et pouvoir le transcoder pour mon travail.
En effet, bcp plus de colonnes, de critères différents (mais tjrs 2 onglets).
Alors si regarde la formule, voilà comment ca me parle (j'ai fait un peu de macro à l'école mais c'est devenu un peu des souvenirs)
Private Sub CommandButton1_Click() ==> ca c'est pour dire que ca se mets en route qd je clique dessus
For i = 1 To Sheets(1).[A65000].End(xlUp).Row ==> dire ou aller chercher (ca va jusqu'à la 65000 lignes)
Set critere = Sheets(1).Cells(i, "A") ==> donc de et la partie ci dessous c'est dire que si ma case = tel ou tel chose ca va dans la Sheet 2 ou 3 (c'est quoi le "i" ?)
Case Is = "Jardin", "Maison" ==> donc si dans la A1 jusqu'a 65000 on a tel ou telle chose alors ...
Set lignechoisie = Sheets(1).Range(Cells(i, "A"), Cells(i, "E")) ==> ... alors prends moi les cellules de la ligne de "A" à "E"
ligne = Sheets(2).[A65536].End(xlUp).Row + 1 ==> et là on lui copier et ou les mettre (mais je ne comprends pas bien la fin de la ligne End SubEnd(xlUp).Row + 1
Case Is = "Salle de bain", "Cuisine"
Set lignechoisie = Sheets(1).Range(Cells(i, "A"), Cells(i, "E"))
ligne = Sheets(3).[A65536].End(xlUp).Row + 1
Donc j'aurai qq questions (cf. plus haut) mais également celle-ci :
Avec ce genre de formules, on est sur de pas passer à coter d'une ligne non transposée dans l'un des onglets ?
En tout cas merci bcp pour ton aide !!! ca m'aide beaucoup à visualiser quel but à atteindre !
Et merci à toi également Nad-Dan ! mais j'ai testé la macro et j'ai, j'avouerai, un peu plus de mal avec la tienne. Je ne comprends pas bien comment elle marche, je mets une marque, bref ca m'a l'air un peu plus compliqué non ?
Le 30/09/2009 à 08:40
2003 FR-2007 FR-MAC 2004 FR
Et merci à toi également Nad-Dan ! mais j'ai testé la macro et j'ai, j'avouerai, un peu plus de mal avec la tienne. Je ne comprends pas bien comment elle marche, je mets une marque, bref ca m'a l'air un peu plus compliqué non
Non mais disons qu'il y a plus d'instructions car le code va plus loin.
Dès que tu as sélectionné en H2 le critère de ton choix (exemple "jardin"), le code efface les données existantes de la feuille concernée par ton choix (exemple feuille nommée "Jardin") et mets les nouvelles données dans cette feuille "jardin".
L'avantage si l'on peut dire, c'est que mets le critère dans la cellule H2 et que cela te permet de ne ventiler vers d'autres feuilles que les données de ton choix.
Le code adapté à ton cas auquel tu peux associer un bouton (via Affichage/Barre d'outils/Formulaire)
Option Compare Text Sub Transfert() 'Macro par DAN Dim i As Integer, lig As Integer, ligne As Integer Dim ws As String, bd As String bd = "BD" & Range("A1") ws = Sheets(bd).Range("H2") With Sheets(ws) .Activate .Range("A5", Range("E65536")).ClearContents End With lig = Sheets(bd).Range("A65536").End(xlUp).Row For i = 3 To lig If Sheets(bd).Range("D:D").Rows(i).Value = ws Then With Sheets(ws) ligne = .Range("a65536").End(xlUp).Row + 1 .Cells(ligne, 1) = Sheets(bd).Cells(i, 1) .Cells(ligne, 2) = Sheets(bd).Cells(i, 2) .Cells(ligne, 3) = Sheets(bd).Cells(i, 3) .Cells(ligne, 4) = Sheets(bd).Cells(i, 4) .Cells(ligne, 5) = Sheets(bd).Cells(i, 5) End With Sheets(bd).Rows(i).Delete End If Next i End Sub
Le 30/09/2009 à 09:20
Merci pour ta réponse Dan,
Mais ce qui difère également, c'est que je ne désire pas avoir à mentionner le critère dans une case pour que les lignes concernées basculent dans un autre onglet.
C'est qu'en appuyant sur un bouton, les lignes concernées par le critère A,B et C basculent en onglet 2 et celles concernées par le critère W,X,Y et Z bascuelent dans l'onglet 3.
C'est pour ca que je me dis que la requete de "Greg974" est plus appropriée ou ai je tord ? La tienne est plus que bien mais plus compliqué pour mon niveau.
Le 30/09/2009 à 11:19
C'est sûr que je ne suis pas du niveau de nad dan, c'est même la première fois que j'arrive à aider quelqu'un sur ce forum!!
Bon sinon pour tes questions:
Set critere = Sheets(1).Cells(i, "A") ==> donc de et la partie ci dessous c'est dire que si ma case = tel ou tel chose ca va dans la Sheet 2 ou 3 (c'est quoi le "i" ?)
le i fait partie de la boucle for...next et fait référence à toutes les lignes de la colonne A utilisées. Cà permet d'être sûr d'oublier aucune ligne.
ligne = Sheets(2).[A65536].End(xlUp).Row + 1 ==> et là on lui copier et ou les mettre (mais je ne comprends pas bien la fin de la ligne End SubEnd(xlUp).Row + 1
End(xlup).Row fait référence à la dernière ligne utilisée de la plage. Comme on veut insérer la ligne copiée à la suite, on met End(xlup).row+1 pour dire d'insérer dans la ligne en dessous de la dernière ligne utilisée.
Avec ce genre de formules, on est sur de pas passer à coter d'une ligne non transposée dans l'un des onglets ?
Comme i fait référence à toutes les lignes utilisées dans la colonne A, il ne rate aucune ligne. Mais il faut qu'il y ait une référence et qu'elle corresponde à un des cas de la formule, sinon tu peux en rajouter!
Le 30/09/2009 à 12:29
2003 FR-2007 FR-MAC 2004 FR
c'est que je ne désire pas avoir à mentionner le critère
Alors le code proposé par Greg est tout à fait approprié à ce que tu veux.
Mais c'est très bien Greg. Seule petite chose c'est que tu n'as pas déclaré les variables que tu utilises.
Ton code un peu simplifié :
Private Sub CommandButton1_Click() Dim i As Integer, ligne As Integer With Sheets(1) For i = 1 To .[A65536].End(xlUp).Row Select Case .Cells(i, "A") Case Is = "Jardin", "Maison" ligne = Sheets(2).[A65536].End(xlUp).Row + 1 .Range(Cells(i, "A"), Cells(i, "E")).Copy Sheets(2).Cells(ligne, 1) Case Is = "Salle de bain", "Cuisine" ligne = Sheets(3).[A65536].End(xlUp).Row + 1 .Range(Cells(i, "A"), Cells(i, "E")).Copy Sheets(3).Cells(ligne, 1) End Select Next i End With End Sub
Le 30/09/2009 à 12:33
Eh bien écoute merci pour ces éléments de réponse, je comprends mieux, beaucoup mieux même !!!
J'ai réussi à adapter la macro de l'exemple à mon travail et ca marche du tonnerre !
Pour le End(xlup).row+1 ==> je comprends, c'est génial, justement je me disais comment faire pour copier dans la Sheet2 et mettre à la suite sans faire de blanc
Par contre pour les colonnes on est obligé de renseigner celle que l'on veut faire remonter ? ps : j'ai du changer la lettre de la colonne "E" par celle de mon travail et ca foncitonne très bien
En tout cas, même si c'est la première personne que tu aides, tu l'as très bien fait et tu m'as enlevé une sacré épine du pied car je devait tout faire à la main avant avec risque d'erreur et tout le tralalala !
Merci à toi Greg pour ton aide et pour les liens ! et merci également à Nad-Dan !
Je pense y aller souvent et revenir par ici !
Le 30/09/2009 à 12:35
je viens de voir ta réponse Nad-Dan euhhh je comprends pas bien... Greg vois tu ?
Le 30/09/2009 à 13:28
En fait si j'ai bien compris nad-dan (tu diras si c'est bien çà!!), il t'as fait une macro que tu dois associer à un boutton qui permet de couper coller les lignes dans une feuille qui porte le nom du critère que tu auras saisi dans la cellule H2.
En clair si tu saisis "jardin" dans H2, il crée une feuille qui porte le nom "jardin" où toutes les lignes qui ont comme critère "jardin" sera coupées de la première feuille et collées dans la feuille créée!
Tant mieux si j'ai pu t'aider, j'en suis trés heureux (et surpris aussi d'y être arrivéi!!...) 8)
PS: Oublie pas de mettre Résolu sur ton post Merci!
Le 30/09/2009 à 15:48
2003 FR-2007 FR-MAC 2004 FR
En fait si j'ai bien compris nad-dan (tu diras si c'est bien çà!!), il t'as fait une macro que tu dois associer à un boutton qui permet de couper coller les lignes dans une feuille qui porte le nom du critère que tu auras saisi dans la cellule H2.
En clair si tu saisis "jardin" dans H2, il crée une feuille qui porte le nom "jardin" où toutes les lignes qui ont comme critère "jardin" sera coupées de la première feuille et collées dans la feuille créée!
Ce n'est pas copier - coller mais simplement une lecture des valeurs que tu reportes dans la feuille correspondant au critére en H2 puis on supprime au fur et à mesure les lignes de la première feuille.