Copier ligne dans une nouvelle feuille si
thomy54
Messages postés
10
Date d'inscription
Statut
Membre
Dernière intervention
-
michel_m Messages postés 18903 Date d'inscription Statut Contributeur Dernière intervention -
michel_m Messages postés 18903 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Voici mon cas, j'ai une base de donnée avec dans une des colonnes le nom de l'utilisateur et j'aimerais que mon code VBA me copie dans une nouvelle feuille toutes les lignes avec le nom choisi
je déclare un variable avec le nom désiré mais après je ne sais pas comment coder le fait de copier les lignes où il y a le nom choisi.
Merci d'avance
Thomas
Voici mon cas, j'ai une base de donnée avec dans une des colonnes le nom de l'utilisateur et j'aimerais que mon code VBA me copie dans une nouvelle feuille toutes les lignes avec le nom choisi
je déclare un variable avec le nom désiré mais après je ne sais pas comment coder le fait de copier les lignes où il y a le nom choisi.
Merci d'avance
Thomas
A voir également:
- Copier ligne dans une nouvelle feuille si
- Darkino nouvelle adresse - Guide
- Partager photos en ligne - Guide
- Comment copier une vidéo youtube - Guide
- Extreme download nouvelle adresse - Accueil - Outils
- Mètre en ligne - Guide
3 réponses
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
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
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,