Copier ligne dans une nouvelle feuille si
Fermé
thomy54
Messages postés
10
Date d'inscription
vendredi 8 mars 2013
Statut
Membre
Dernière intervention
14 octobre 2015
-
4 sept. 2014 à 17:26
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 10 sept. 2014 à 11:50
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 10 sept. 2014 à 11:50
A voir également:
- Copier ligne dans une nouvelle feuille si
- Darkino nouvelle adresse - Guide
- Darkino : le grand site pirate change d'adresse et d'interface - Accueil - Services en ligne
- Comment copier une vidéo youtube - Guide
- Extreme download nouvelle adresse - Accueil - Outils
- Aller à la ligne dans une cellule excel - Guide
3 réponses
PlacageGranby
Messages postés
393
Date d'inscription
mercredi 26 mars 2014
Statut
Membre
Dernière intervention
7 mars 2019
26
Modifié par PlacageGranby le 4/09/2014 à 19:34
Modifié par PlacageGranby le 4/09/2014 à 19:34
Dans cet exemple,
remplace feuil1 par le nom de la feuille ou ta base de données est.
remplace feuil2 par le nom de la feuille ou tu veux copier les données
Le nom à copier est entrée dans la case A1 donc la copie peut être dynamique.
On suppose que les données commemence à la ligne 4 et sont copié à la ligne 4,
On suppose qu'il n'y a pas de blanc dans la base de donnée, on copie, et la boucle s'arrête lorsqu'un vide est trouvé.
S'il y a des vide, il faut être créatif, rechercher durant 500 ligne, ou ajouter un FIN après le tableau et s'arrêter lorsqu'on trouve FIN.
L'exemple ne fait peut-être pas exactement ce que tu veux, mais tu peux adapter ce code selon tes besoins. Selon ou commencer les données, dans quel colonne est le nom.
Si tu veux que le nom choisi soit dynamique ou hard-codé (écrire Nom_choisi = "Sylvain".
Sub Macro3()
Dim Nom_Choisi As String
Dim Debut_Tableau As Integer
Dim Nouveau_tableau As Integer
Debut_Tableau = 4
Nouveau_tableau = 4
Nom_Choisi = Sheets("feuil1").Range("A1").Value
While Sheets("feuil1").Range("A" & Debut_Tableau).Value <> ""
If Sheets("feuil1").Range("A" & Debut_Tableau).Value = Nom_Choisi Then
Sheets("Feuil2").Rows(Nouveau_tableau).Value = Sheets("Feuil1").Rows(Debut_Tableau).Value
Nouveau_tableau = Nouveau_tableau + 1
End If
Debut_Tableau = Debut_Tableau + 1
Wend
End Sub
remplace feuil1 par le nom de la feuille ou ta base de données est.
remplace feuil2 par le nom de la feuille ou tu veux copier les données
Le nom à copier est entrée dans la case A1 donc la copie peut être dynamique.
On suppose que les données commemence à la ligne 4 et sont copié à la ligne 4,
On suppose qu'il n'y a pas de blanc dans la base de donnée, on copie, et la boucle s'arrête lorsqu'un vide est trouvé.
S'il y a des vide, il faut être créatif, rechercher durant 500 ligne, ou ajouter un FIN après le tableau et s'arrêter lorsqu'on trouve FIN.
L'exemple ne fait peut-être pas exactement ce que tu veux, mais tu peux adapter ce code selon tes besoins. Selon ou commencer les données, dans quel colonne est le nom.
Si tu veux que le nom choisi soit dynamique ou hard-codé (écrire Nom_choisi = "Sylvain".
Sub Macro3()
Dim Nom_Choisi As String
Dim Debut_Tableau As Integer
Dim Nouveau_tableau As Integer
Debut_Tableau = 4
Nouveau_tableau = 4
Nom_Choisi = Sheets("feuil1").Range("A1").Value
While Sheets("feuil1").Range("A" & Debut_Tableau).Value <> ""
If Sheets("feuil1").Range("A" & Debut_Tableau).Value = Nom_Choisi Then
Sheets("Feuil2").Rows(Nouveau_tableau).Value = Sheets("Feuil1").Rows(Debut_Tableau).Value
Nouveau_tableau = Nouveau_tableau + 1
End If
Debut_Tableau = Debut_Tableau + 1
Wend
End Sub
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 312
Modifié par michel_m le 8/09/2014 à 10:43
Modifié par michel_m le 8/09/2014 à 10:43
Bonjour
maquette de W ci jointe:
https://www.cjoint.com/?3IikGU5F7wT
sans aucune précision de ta part :-(
le nom recherché est dans une cellule nommée "nom", de m^me la ligne d'ent^te est en constante ainsi que la colonne des noms dans le code à adapter, enfin la feuille de base de données est nommée "bdd"
principe
on vérifie que le nom inscrit est bien dans la base de données (gestionnaire d'erreurs)
on ne boucle que sur les lignes où il y a le nom
et on les mémorise dans une variable tableau
On construit la feuille avec comme nom d'onglet le nom recherché
on copie la ligne d'entête et on restitue la variable tableau
on encadre le tableau
le code
Michel
maquette de W ci jointe:
https://www.cjoint.com/?3IikGU5F7wT
sans aucune précision de ta part :-(
le nom recherché est dans une cellule nommée "nom", de m^me la ligne d'ent^te est en constante ainsi que la colonne des noms dans le code à adapter, enfin la feuille de base de données est nommée "bdd"
principe
on vérifie que le nom inscrit est bien dans la base de données (gestionnaire d'erreurs)
on ne boucle que sur les lignes où il y a le nom
et on les mémorise dans une variable tableau
On construit la feuille avec comme nom d'onglet le nom recherché
on copie la ligne d'entête et on restitue la variable tableau
on encadre le tableau
le code
Option Explicit Option Base 1 '-- Const Col As Byte = 1 'colonne de recherche Const Lig_ent As Byte = 3 'ligne des entêtes '----------- Sub selectionner_selon_nom() Dim Qui As String, Dercol As Byte, Nbre As Integer, Entete Dim Lig As Integer, Idy As Integer, Idx As Byte, T_qui() '----------------initialisations Application.ScreenUpdating = False With ActiveSheet Qui = Range("nom") 'cellule nommée (adresse nom précisée dans la demande !) Dercol = .Rows(Lig_ent).Find("*", , , , , xlPrevious).Column 'verif nom existant Nbre = Application.CountIf(.Range(.Cells(Lig_ent, Col), .Cells(10000, Col)), Qui) If Nbre = 0 Then GoTo Vide ReDim T_qui(Nbre, Dercol - Col + 1) 'tableau des lignes avec "qui" 'mémorise la ligne d'ent^te Entete = .Range(.Cells(Lig_ent, Col), .Cells(Lig_ent, Dercol)) '---------------------traitement sur feuille database ' recherche les lignes avec "Qui" Lig = Lig_ent For Idy = 1 To Nbre Lig = .Columns(Col).Find(Qui, Cells(Lig, Col), xlValues).Row 'mémorisation des données à copier For Idx = Col To Dercol T_qui(Idy, Idx) = .Cells(Lig, Idx) Next Idx Next Idy End With '------------------construction de la feuille "qui" Sheets.Add With ActiveSheet .Move After:=Sheets("Bdd") ' A adapter nom de l'onglet base de données .Name = Qui .Range(.Cells(Lig_ent, Col), .Cells(Lig_ent, Dercol)) = Entete 'entêtes .Cells(Lig_ent + 1, Col).Resize(Nbre, Dercol - Col + 1) = T_qui 'restitution données de "qui" .Range(.Cells(Lig_ent, Col), .Cells(Lig_ent + Nbre, Dercol)).Borders.Weight = xlThin 'encadrement End With Exit Sub '----------------gestionnaire d'erreur Vide: MsgBox Qui & " Inconnu !", vbCritical End Sub
Michel
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 312
10 sept. 2014 à 11:50
10 sept. 2014 à 11:50
Merci ?
de rien...
de rien...
4 sept. 2014 à 19:32
Debut_tableau, c'est ta base de donnée, on commence a chercher à la ligne 4, ensuite dans la boucle, on recherche la colonne A à partir de la ligne 4 jusqu'a temps qu'une case est égale "" donc vide.
Nouveau tableau. J'ai mis 4 aussi, quand le nom choisi est trouvé (dans la condition IF), la ligne 4 recoit le contenu de la ligne debut_tableau. et on incrémente Nouveau_tableau pour écrire sur la ligne suivante.
Debut_tableau est incrémenté que le nom celui choisi ou non, il faut boucler toute la base de donnée jusqu'a la fin,