Transférer des données vers une feuille

bonjour,

J'ai besoin de transférer des données d'une feuille ("données") vers une autre feuille ("synthèse"). Les données de la feuille ("données") sont issues à partir d'un USf. Normalement au bout d'une année je devrais avoir plus de 2500 lignes. ce qui représente une bdd assez importante. En gros je récupère avec cet USf les autorisations d'urbanisme (Permis de construire......CUB...) qui sont déposées par commune (environ une vingtaine) et la décision finale (refus accord etc...). Et si ce n'est pas un accord, le ou les motifs de motivation.

Donc nous avons le type de demande (PC-dp-Pa-cub) le numéro de la demande, la proposition (refus....) le ou les motifs de motivation et la commune concernée.

on m'a vantait le mérite d'un tableau comme variable (vba) mais j'avoue je coince pour transférer tout ce beau monde dans le tableau de la feuille synthèse. le cours tableau vba sur ce même site m'a aidé un peu a comprendre mais je n'ai pas la fibre pour le personnaliser à mon cas.

j'ai réussi à récolter les données de la sheets données vers la sheets synthèse avec une formule somproduct mais lors d'un nouvel enregistrement d'une nouvelle demande par l'usf, il met 20 secondes à enregistrer ce nouvel enregistrement

si vous avez une piste de réflexion je suis preneur

merci a vous

je joins mon fichier

Bonjour et bienvenue

Un TCD (Tableau Croisé Dynamique) semble répondre à ta demande.

Amicalement

Nad

merci Nad, pour cette solution qui répond à mes attentes mais il parait qu'avec comme variable un tableau peut gérer trés rapidement de grande quantité de données. C'est aussi pour progresser en vba que j'essaie de comprendre comment fonctionne les variables tableau et rien de plus pratique qu'un exemple

Bonjour,

T'as prévu l'aspirine ?

Voici une solution en VBA qui répond à ton attente :

Sub DemoArrayPC()
'Pour Commencer quelques déclarations préliminaires...
Dim i%, ii%, x%, WSS As Worksheet, WSC As Worksheet, TabloS, TabloC '(S= Source,C=Cible)
'On gèle l'affichage écran
Application.ScreenUpdating = False
Set WSS = Worksheets("DONNEES")
Set WSC = Worksheets("SYNTHESE")
TabloS = WSS.Range("A2:K" & WSS.Range("A" & WSS.Rows.Count).End(xlUp).Row)
TabloC = WSC.Range("A5:V" & WSC.Range("A" & WSC.Rows.Count).End(xlUp).Row)
'Et on va parcourir les tableaux à la recherche d'égalité
'Pour chaque ville de TabloC
For i = 1 To UBound(TabloC)
'On va parcourir tabloS
  For ii = 1 To UBound(TabloS)
  'On regarde dans la colonne J (10) si la ville est identique
    If TabloS(ii, 10) = TabloC(i, 1) Then
        'Si oui on peut déjà transcrire l'année
        WSC.Cells(i + 4, 2) = TabloS(ii, 11)
        'Et on regarde le type de demande
        On Error GoTo GESTERRCASE
        Select Case TabloS(i, 1)
        Case "PC": x = 3 ' x est le N° de colonne correspondant à l'item dans WSC
        Case "PA": x = 8
        Case "DP": x = 13
        Case "Cub": x = 18
        Case Else: x = "Err"
        End Select
        'Et on transcrit le résultat (Nécessite un léger effort d'abstraction...)
        If TabloS(ii, 3) = "ACCORD" Then WSC.Cells(i + 4, x) = WSC.Cells(i + 4, x) + 1
        If TabloS(ii, 3) = "REFUS" Then WSC.Cells(i + 4, x + 1) = WSC.Cells(i + 4, x + 1) + 1
        If TabloS(ii, 3) = "REJET TACITE" Then WSC.Cells(i + 4, x + 2) = WSC.Cells(i + 4, x + 2) + 1
        If TabloS(ii, 3) = "SAS" Then WSC.Cells(i + 4, x + 3) = WSC.Cells(i + 4, x + 3) + 1
    End If
  Next
Next
MsgBox "C'est fini !"
Exit Sub
GESTERRCASE:
MsgBox "Erreur Feuille DONNEES " & Chr(13) & _
"          Ligne " & ii + 1 & ", Colonne 1"
End Sub

Nota : Tous les cas d'erreurs possibles ne sont pas traités en particulier si les noms de villes ne sont pas écrits de manière identiques dans les feuilles Synthèse et Données ou si le motif comporte une faute ou des espaces parasites...

C'est le cas notament dans ton fichier Feuille Synthèse "charlie" et dans la feuille Données "charlie " (avec espace de fin)

A+

merci Galopin01

Je prends connaissance de ta réponse ce matin et je te remercie d'avoir planché dessus à une heure tardive.

En plus j'apprécie les commentaires verts qui sont très appréciables pour comprendre le code.

Je n'ai pas d'aspirine mais j'espère que tu n'as pas fait une overdose de caféine

merci encore

Bonjour,

Une 'tite erreur de plume corriger cette ligne (manque un i ) :

Select Case TabloS(ii, 1)

Attention de corriger sur les deux feuilles ça doit être Cub et pas Cub dans l'un et CUb dans l'autre...

A+

merci,

désolé pour le MP

j'ai cherché en vain l'erreur, mais quand on débute, on s'égare tout azimut

chapeau bas pour ce petit programme

merci encore

bjr,

pour amender cette base je souhaiterais connaitre pour chaque commune (nb17) les principaux motifs de motivation (nb 33).

je ne sais comment m'y prendre. Faire une boucle pour chaque motif tout en sachant que la liste des 33 peut évoluer devient long et fastidieux.

Chaque demande peut avoir plusieurs motifs de motivation.

je pensais récupérer le tout dans une feuille sous forme de tableau avec les communes en ordonnée et les motifs en abscisse..

je suis preneur de toutes vos lumières

merci

Bonjour,

Perso je récupèrerai en colonne la liste des villes et celle des motifs + un TCD et hop le tour est joué.

Mais la difficulté réside dans les motifs multiples.

On pourrait le contourner avec un mauvais bricolage mais c'est vrai que l'idéal est de passer par VBA.

Pour annuler l'effet de modification des listes de villes et des listes de motif, il faut en effet passer par ta feuille "Motif".

J'y réfléchi et je te tiens au courant.

A+

Bonsoir,

J'ai modifié un peu TOUSSA pour tenir compte de tes observations

J'ai défini les communes et les motifs comme plages dynamiques (voir gestionnaire de noms) de sorte qu'on puisse en ajouter sans modifier le prog. Et désormais le prog part de ces plages pour comparer avec la feuille source.

(en d'autres termes même si la feuille Synthèse ne comporte pas de noms de communes le tableau se remplit quand même.)

Ce n'était d'ailleurs pas obligatoire mais je suis parti du principe que la liste des communes était complète et que le tableau de données pouvait avoir des "trous"

Les stats sont dans la feuille Synthèse.

Bon... Heu... J'ai pas trop vérifié... Il faut bien que je te laisse quelque chose à faire !

Bonne nuit.

A+

merci,

Que c'est beau la (ta) maitrise

eh oui il faut bien que je fasse quelque chose, et je commence par essayer de comprendre ce que tu as écrit. Je ne suis qu'un petit débutant en VBA, et tu comprendras aisément qu'un tel code je ne pouvais pas le sortir seul. Pourrais tu m'expliquer pourquoi

dans les déclarations de variables, le c% cc% sont avec le signe %

Dim c%, cc%, i%, ii%, x%, WSS As Worksheet, WSC As Worksheet, TabloS, TabloC, TabloM, o As Range '(S= Source,C=Cible)

alors qu'après ils sont présents sont le signe %

For c = 4 To 9

For cc = 1 To UBound(TabloM)

en fait c'est comme si c'était d'autres variables non déclarés ou il y a une subtilité particulière?

Je n'ai pas vérifié si tout fonctionnait mais encore un grand MERCI

a+

Bonjour,

Dim c%, cc%, i%, ii%, x% est l'équivalent de :

Dim c as integer, cc as integer, i as integer, ii as integer, x as integer

Après on fait comme on aime...

A mon age on déteste se fatiguer inutilement alors je préfère la première méthode !

Les objets (Worksheets et Range) n'ont pas d'abréviation particulière et les Tablo (en l'absence d'autre précision dont déclarés comme Variant. A ce sujet voir l'aide de Dim sur VBA.

A+

Rechercher des sujets similaires à "transferer donnees feuille"