Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[VBA] est-ce une bonne idée : transformer chaque ligne d'une base vers une feuille par ligne....

4 réponses
Avatar
Alfred Wallace
Bonsoir les guruz :-)

grace à vous (le 3 et 6 fevrier) j'avance dans mon projet.
C'est pas gagné, parceque je suis pas (et de loin) spécialiste
dans le VBA.

j'ai une base de cette nature :

NOM PRENOM AGE VILLE
AAAA Ttttt 15 PARIS
BBBB Uuuuuu 22 DIJON
CCCC Kkkkkkk 20 LILLE

chaque colonne est nommée grace à son étiquette Base_NOM, Base_PRENOM
Base_AGE et Base_VILLE

j'aimerai faire un etat de cette forme par exemple :
Nom : AAAAA Tttttt Age : 15 ans
Résidence principale : PARIS

je dois créer une feuille pour chaque ligne de la colonne NOM

j'ai créer une feuille "caneva" qui est comme çà
Nom : <Etat_NOM> <Etat_PRENOM> Age : <Etat_Age> ans
Résidence principale : <Etat_VILLE>

en sachant que <Etat_NOM>,<Etat_PRENOM>,<Etat_Age> et <Etat_VILLE> sont
des cellules nommées et positionnées à l'avance dans la feuille "caneva"

ouf !!! ma recherche, et donc ma question est la suivante.

Au lieu de faire :



Pour chaque lignes de la base

dupliquer la feuille "canevas", et lui donner le nom :
Intersect(Range("Base_NOM"), Rows(lignes))

<Etat_NOM> = Intersect(Range("Base_NOM"), Rows(lignes))
<Etat_PRENOM> = Intersect(Range("Base_PRENOM"), Rows(lignes))
<Etat_Age> = Intersect(Range("Base_Age"), Rows(lignes))
<Etat_VILLE> = Intersect(Range("Base_VILLE"), Rows(lignes))

Fin Pour

Est-ce que je peux faire :

Pour chaque lignes de la base

dupliquer la feuille "canevas", et lui donner le nom :
Intersect(Range("Base_NOM"), Rows(lignes))

Pour chaque champs nommé de la nouvelle feuille
Champ_nommé_courant =
Intersect(Range("colonne courante de la base "), Rows(lignes))
Fin Pour chaque champs nommé


Fin Pour chaque lignes



Pardon si j'ai été trop "touffu" dans la démarche.

MErci encore
José

4 réponses

Avatar
Alfred WALLACE
Alfred Wallace wrote:
Bonsoir les guruz :-)

grace à vous (le 3 et 6 fevrier) j'avance dans mon projet.
C'est pas gagné, parceque je suis pas (et de loin) spécialiste
dans le VBA.

j'ai une base de cette nature :

NOM PRENOM AGE VILLE
AAAA Ttttt 15 PARIS
BBBB Uuuuuu 22 DIJON
CCCC Kkkkkkk 20 LILLE

chaque colonne est nommée grace à son étiquette Base_NOM, Base_PREN OM
Base_AGE et Base_VILLE

j'aimerai faire un etat de cette forme par exemple :
Nom : AAAAA Tttttt Age : 15 ans
Résidence principale : PARIS

je dois créer une feuille pour chaque ligne de la colonne NOM

j'ai créer une feuille "caneva" qui est comme çà
Nom : <Etat_NOM> <Etat_PRENOM> Age : <Etat_Age> ans
Résidence principale : <Etat_VILLE>

en sachant que <Etat_NOM>,<Etat_PRENOM>,<Etat_Age> et <Etat_VILLE> sont
des cellules nommées et positionnées à l'avance dans la feuille "ca neva"

ouf !!! ma recherche, et donc ma question est la suivante.

Au lieu de faire :



Pour chaque lignes de la base

dupliquer la feuille "canevas", et lui donner le nom :
Intersect(Range("Base_NOM"), Rows(lignes))

<Etat_NOM> = Intersect(Range("Base_NOM"), Rows(lignes))
<Etat_PRENOM> = Intersect(Range("Base_PRENOM"), Rows(lignes))
<Etat_Age> = Intersect(Range("Base_Age"), Rows(lignes))
<Etat_VILLE> = Intersect(Range("Base_VILLE"), Rows(lignes))

Fin Pour

Est-ce que je peux faire :

Pour chaque lignes de la base

dupliquer la feuille "canevas", et lui donner le nom :
Intersect(Range("Base_NOM"), Rows(lignes))

Pour chaque champs nommé de la nouvelle feuille
Champ_nommé_courant =
Intersect(Range("colonne courante de la base "), Rows(lignes))
Fin Pour chaque champs nommé


Fin Pour chaque lignes



Pardon si j'ai été trop "touffu" dans la démarche.

MErci encore
José


je me répond à moi même... un petit coup de main s'youplé les
guruzzzzz ?

Merci

Avatar
JLuc
*Bonjour Alfred Wallace*,
Est ce que quelque chose comme ca t'irai ?

Sub CreerFeuilleBase()
Set base = Sheets("Base")
For x = 2 To base.Range("A65536").End(xlUp).Row
Sheets("Caneva").Copy after:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = Sheets("Base").Cells(x, 1) & _
" " & Sheets("Base").Cells(x, 2)
Set nouvelle = Sheets(Sheets.Count)
nouvelle.Range("Etat_NOM") = base.Cells(x, 1)
nouvelle.Range("Etat_PRENOM") = base.Cells(x, 2)
nouvelle.Range("Etat_AGE") = base.Cells(x, 3)
nouvelle.Range("Etat_VILLE") = base.Cells(x, 4)
Next
End Sub

Classeur exemple :
http://cjoint.com/?ciuGrAo5zf

Bonsoir les guruz :-)

grace à vous (le 3 et 6 fevrier) j'avance dans mon projet.
C'est pas gagné, parceque je suis pas (et de loin) spécialiste
dans le VBA.

j'ai une base de cette nature :

NOM PRENOM AGE VILLE
AAAA Ttttt 15 PARIS
BBBB Uuuuuu 22 DIJON
CCCC Kkkkkkk 20 LILLE

chaque colonne est nommée grace à son étiquette Base_NOM, Base_PRENOM
Base_AGE et Base_VILLE

j'aimerai faire un etat de cette forme par exemple :
Nom : AAAAA Tttttt Age : 15 ans
Résidence principale : PARIS

je dois créer une feuille pour chaque ligne de la colonne NOM

j'ai créer une feuille "caneva" qui est comme çà
Nom : <Etat_NOM> <Etat_PRENOM> Age : <Etat_Age> ans
Résidence principale : <Etat_VILLE>

en sachant que <Etat_NOM>,<Etat_PRENOM>,<Etat_Age> et <Etat_VILLE> sont des
cellules nommées et positionnées à l'avance dans la feuille "caneva"

ouf !!! ma recherche, et donc ma question est la suivante.

Au lieu de faire :



Pour chaque lignes de la base

dupliquer la feuille "canevas", et lui donner le nom :
Intersect(Range("Base_NOM"), Rows(lignes))

<Etat_NOM> = Intersect(Range("Base_NOM"), Rows(lignes))
<Etat_PRENOM> = Intersect(Range("Base_PRENOM"), Rows(lignes))
<Etat_Age> = Intersect(Range("Base_Age"), Rows(lignes))
<Etat_VILLE> = Intersect(Range("Base_VILLE"), Rows(lignes))

Fin Pour

Est-ce que je peux faire :

Pour chaque lignes de la base

dupliquer la feuille "canevas", et lui donner le nom :
Intersect(Range("Base_NOM"), Rows(lignes))

Pour chaque champs nommé de la nouvelle feuille
Champ_nommé_courant > Intersect(Range("colonne courante de la base "), Rows(lignes))
Fin Pour chaque champs nommé


Fin Pour chaque lignes



Pardon si j'ai été trop "touffu" dans la démarche.

MErci encore
José



--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O

Avatar
Alfred Wallace

*Bonjour Alfred Wallace*,
Est ce que quelque chose comme ca t'irai ?

Sub CreerFeuilleBase()
Set base = Sheets("Base")
For x = 2 To base.Range("A65536").End(xlUp).Row
Sheets("Caneva").Copy after:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = Sheets("Base").Cells(x, 1) & _
" " & Sheets("Base").Cells(x, 2)
Set nouvelle = Sheets(Sheets.Count)
nouvelle.Range("Etat_NOM") = base.Cells(x, 1)
nouvelle.Range("Etat_PRENOM") = base.Cells(x, 2)
nouvelle.Range("Etat_AGE") = base.Cells(x, 3)
nouvelle.Range("Etat_VILLE") = base.Cells(x, 4)
Next
End Sub

Classeur exemple :
http://cjoint.com/?ciuGrAo5zf

hum, en tout cas,,il y a beaucoup de choses que je peux réutiliser

effectivement.

Je ne "comprend" pas du premier coup d'oeil ton code, je vais le tester
aujourd'hui (j'ai pas excel chez moi).

mais disons que,

1 - ma base a toutes ces colonnes nommées avec son étiquette (le titre
de a colonne quoi).

2 - la feuille "canevas" qui est donc dupliquée, dispose d'une liste
de zones nommées, à certains endroits précis, pour pouvoir faire un état.

je souhaitais parcourir dans une boucle, pour chaque noms de base,
copier le contenu de la ligne traitée, dans la zone destinataire de la
feuille caneva.

Je sais, c'est tordu,mais, l'avantage est que, si ma base évolue, avec
une colonne suplémentaire, il suffira de créer une nouvelle zone
correspondante dans le caneva, pour que l'état dispose de cette nouvelle
zone. sans toucher le code vba.


Merci de ton aide. je vais tester tout çà.


José

Avatar
JLuc
Alfred Wallace avait soumis l'idée :

je souhaitais parcourir dans une boucle, pour chaque noms de base, copier le
contenu de la ligne traitée, dans la zone destinataire de la feuille caneva.
C'est ce que j'ai fais. Mais j'ai placer les donnees dans une nouvelle

feuille renommee avec "nom" & "prenom" de la base. Regarde le fichier
joint. Avant de relancer la macro, pense a supprimer les feuilles,
(j'ai pas fais de gestion d'erreur) sinon ca va planter. Conserve
seulement "Base" et "Caneva"

Je sais, c'est tordu,mais, l'avantage est que, si ma base évolue, avec une
colonne suplémentaire, il suffira de créer une nouvelle zone correspondante
dans le caneva, pour que l'état dispose de cette nouvelle zone. sans toucher
le code vba.
Desole, il faudra faire appelle aux grands maitres, ca je sais pas

encore faire :oÞ

Merci de ton aide. je vais tester tout çà.
Je t'en prie, ce fut un plaisir :')


José



--
JLuc