Synthèse de 2 feuilles sur un 3e particulier

Bonjour

Je tente peut être l'impossible pour mon niveau vba (2 semaines de pratique).

Je cherche à partir de 2 tableaux à structure identique (1e cas et 2e cas) de faire une synthese dans une 3e feuille (Devis par os) en regroupant par personne.

Pour résumer, on recopie la 1e ligne du tableau de la feuille "1e cas" dans celle de "Devis par OS"

Si dans le 1e cas on retrouve le meme nom dans la collone des "Resp.OS" on fait un copier de la ligne et on la colle en feuille "Devis par OS" sous la tte 1e ligne collée du début (répetable tant que cette condition existe),

Si on a plus d'équivalence on passe au 2e cas et on recopie les memes lignes que dans le 1e tableau (sachant que la structure est la meme et que les noms sont tous aux memes lignes.

une fois terminé on replace la cellule de la feuille "1e cas" en a7, on déplace la cellule en a8 (si c'est different de a7) on refait les memes boucles avec le nouveau nom et ainsi de suite jusqu'à ce que l'on soit en bas du tableau.

J'ai tenté un algorithme mais je suis en train de me perdre complètement c'est pourquoi je vous écris (ci-joint mon fichier pour que vous y voyiez plus clair car expliquer seulement par du texte n'est pas forcement aisé).

37excelgladius.zip (45.00 Ko)

Bonjour

Un essai

Salut

Je te remercie et te félicite d'avoir résolu ce problème aussi rapidement, je dois reconnaître que ce n'était pas encore de mon niveau.

Je ne connaissais pas encore la technique de création de stockage de données virtuelles.

Par contre j'ai quelques soucis dans la lecture des codes suivants :

- For J = 0 To UBound(Tablo) >>> Ubound signifie la dernière valeure enregistrée du tab virtuel ?

Concernant j=0, ca fait référence au tableau virtuel donc rien à voir avec j=7 des tableaux d'origine ?

- Set Cell = .Range("A7:A" & Lg).Find(what:=Table(J), after:=.Range("A" & Lg), LookIn:=xlValues, lookat:=xlWhole) >>>>> je n'ai pas compris la démarche de recherche (dans l'esprit c'est surement une fonction d'initialisation mais à lire concrètement je n'y arrive pas)

- Replace(.Name, " ", "") >>>> si on n'avait pas des ensembles vides que doit on mettre dans la fonction Replace ?

- Cell.Address <> Depart >>>> Je ne connais pas cette lecture "<>"

Je suis ingénieur méca de formation donc je n'ai pas encore trop la démarche programmeur. Dsl si je pose des questions peut être triviales.

En tout merci pour ce programme et je reste scotché par la rapidité de résolution comme si ce problème posé n'était qu'une pure routine.

Bravo banzai

Bonsoir

Des réponses dans le fichier

Bonne soirée

Hello

Je vais poser un nouveau problème un peu plus corsé par rapport au début.

Comme vous pouvez le constater l'aménagement du tableau de départ est différent.

Je pensais qu'en ayant les lignes suivantes : Lg = .Range("A7").End(xlDown).Row

On Error Resume Next

on pouvait continuer à lire le tableau jusqu'en bas, ce qui n'est pas le cas puisque le programme prend en compte seulement le bloc de cellules du haut délimité par la frontière orange.

Je pourrais à chaque bloc répéter le programme en changeant la variable Lig par une autre valeur mais le programme serait surement trop lourd. De plus selon les besoins du moment, le tableau change de forme donc cette option est à proscrire.

Le 2e problème est sur le calcul des totaux par personne dans la feuille DEVIS_PAR_OS: le code n'accepte pas la formule SUM pour des raisons que j'ignore.

Bonjour

A voir

A tester

Hello

Toujours super réactif dans les réponses et en plus ca marche nickel .

mais j'avoue avoir du mal à me mettre à la place de l'ordinateur.

- Pourquoi ça marcherait avec la méthode de la ligne du bas Lg = .Range("A65536").End(xlUp).Row ,

et pas avec celle de la ligne du haut Lg = .Range("A1").End(xlDown).Row (en reprenant le 1e programme) sachant que dans les 2 cas tu ordonnes le passage à la cellule suivante en cas de vide ou d'erreur ?

-Et dernière question, j'essaie de faire un pourcentage pour apprendre un peu plus le language sur la ligne total avec la notation R1C1 mais avec une varibale ligne ca coince un peu. J'ai cherché un tutoriel la dessus mais rien sur ce cas de figure

ci joint ma formule normale qui fonctionne 8)

.Formula = "=" & .Offset(0, -1).Address & "/" & .Offset(0, -5).Address & "* 100 - 100"

Et celle-ci avec la méthode R1C1 qui ne marche pas

'.FormulaR1C1Local = "=(RC[-1]& LgDep /RC[-5]& LgDep)*100-100"

bonne lecture

Bonsoir

Il faudrait que tu marques exactement le formule que tu veux et dans quelle cellule

Bonne soirée

Les formules que j'applique sont dans la feuille Devis par OS, les cellules vertes des colonnes J et K

Voila le bout de code que j'ai utilisé avec la méthode Offset

With Ws3.Range("J" & Lig) ' Opération % heures en colonne J

.Formula = "=" & .Offset(0, -2).Address & "/" & .Offset(0, -4).Address & "* 100 - 100"

.NumberFormat = "0.00"

End With

Après j'ai tenté avec la méthode R1C1 histoire d'apprendre un peu l'état d'esprit vba mais sans succès

'.FormulaR1C1Local = "=(RC[-1]& LgDep /RC[-5]& LgDep)*100-100"

Ensuite j'ai tenté en page devis dans la ligne4 "global affaire" de faire des sommes de valeurs des cellules vertes (d'abord en colonne F) en suivant ta méthode des tableaux virtuels.

Dim Lg2 As Long

Dim Dico2 As Object

Dim Table2

Set Dico2 = CreateObject("Scripting.Dictionary")

With P3

Lig2 = .Range("A65536").End(xlUp).Row

On Error Resume Next

For J = 7 To Lg2

If Not Range("G" & J).Interior.ColorIndex <> 42 Then

Dico2(.Range("F" & J).Value) = .Range("F" & J).Value

End If

Next J

On Error GoTo 0

Table2 = Dico2.Items

End With

Créer le tableau, pas de soucis mais pour l'opération mathématique ça coince (ci dessous mes solutions)

Range("F4").FormulaLocal = "="Sum(Table2.Value)""

Range("F4").FormulaLocal = "="Sum(J:Ubound(Table2) & Lg2)"

what is ze pb sir ?

18gladius4.zip (60.47 Ko)

Bonjour

A voir

salut

Je viens de m'inscrire et je cherchais un tableau de ce type pour mais je n'arrive pas à comprendre les lignes

Formule = Formule & "R" & Lig & "C+"

.Range("F4:I4").Formula = "=SUM(" & Left(Formule, Len(Formule) - 1) & ")"

Si je souhaitais les lire je n'y arriverai pas, c'est possible de traduire ?

Autrement quand tu créé le stockage de données c'est cette partie de code qui fait en sorte de pas avoir les doublons ?

If .Range("A" & J) <> "" Then

Mondico(.Range("A" & J).Value) = .Range("A" & J).Value

End If

si c'est le cas je ne vois pas comment

En lisant ces lignes ca me dit que selon la position de la cellule, sa valeur = valeur de Mondico et répétable de J a ...

Bonjour

Formule = Formule & "R" & Lig & "C+"

Construction de la formule qui sera en ligne 4, elles est construite au fur à mesure.

C'est plus simple que de la construire à la fin du code car il faudrait rechercher ce que je connais en cours

.Range("F4:I4").Formula = "=SUM(" & Left(Formule, Len(Formule) - 1) & ")"

Ecriture de la formule (comme c'est la même (hors les colonnes)) dans les colonnes F à I de la ligne 4

Mais comme il n'y a pas de référence absolue pour les colonnes, c'est comme si l'on avait recopié la formule de F4 jusqu'à I4

If .Range("A" & J) <> "" Then

Mondico(.Range("A" & J).Value) = .Range("A" & J).Value

End If

Permet de créer une liste sans doublon

Bonne journée

thx bcp

avec un peu de retard ^^

sorry

Rechercher des sujets similaires à "synthese feuilles particulier"