Copier/coller et incrémentation sur autre feuille

Bonsoir à tous,

Je suis un totalement novice en matière de VBA.

De fait, je fais appel à vos services.

Je souhaite créer un fichier de travail comme tel :

  • 1 feuille principal récoltant et ordonnant des infos d'autres feuilles
  • 1 feuille qui reprend quelques cellules de la première pour en faire des analyses
  • 3 autres feuilles "utilisateurs" (Pierre, Paul, Jacques) où l'utilisateur alimente en informations

Le principe : 3 utilisateurs se partagent le fichier Excel (en mode partage) et remplissent chacun un tableau, ligne par ligne, sur leur feuilles respectives

  • 1 colonne n°de dossier
  • 1 colonne NOM
  • 1 colonne Adresse
  • 1 colonne date d'entrée du dossier
etc... le tout formant 1 ligne correspondant à un dossier traité.

J'essaie de faire en sorte que lorsque chaque utilisateur rentre un dossier, la feuille principale soit alimentée automatiquement (ligne par ligne, donc incrémentée au fur et à mesure) avec le nom de l'utilisateur correspondant au dossier qu'il a traité.

L'incrémentation par VBA permet de ne pas obtenir de dysfonctionnement lors de la rentrée de données et donc de pertes d'informations comme on peut en avoir lorsque deux utilisateurs opèrent sur la même cellules en mode partage.

La feuille d'analyse reprendrai automatiquement le numero de dossier de la feuille principale pour en faire une analyse (sur une ligne). Il y a donc le même format.

De manière synthétique :

Paul rentre les informations d'un dossier + le n° du dossier sur une ligne de son tableau utilisateur "Paul"

Automatiquement, la feuille principale se remplit de certaines cellules que Paul à rentré dans sa feuille utilisateur. Une ligne (juste en dessous du dernier dossier saisie de Jacques) se remplit en fonction des données des cellules remplient de Paul.

De fait, la feuille d'analyse se remplit aussi d'elle même à partir des informations de la feuille principale tirée de la feuille des utilisateurs.

J’essaie d'être clair

C'est avec détresse que je fais appel à vous, et je vous serai très reconnaissant pour votre aide.

Bonjour et bienvenue sur le forum

Un essai à tester.Te convient-il ?

Bye !

327classeur1-v1.xlsm (22.87 Ko)

Bonsoir,

Si tu me le permet :

Option Explicit

Dim f As Worksheet, fp As Worksheet, fa As Worksheet, cell As Range
Dim lgn&, derln&, derCol&

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

        If Target.Count > 1 Then Exit Sub
        If ActiveSheet.Name <> "FP" And ActiveSheet.Name <> "Analyses" Then
            Application.EnableEvents = False
            Set f = ActiveSheet
            derln = f.Range("A" & Rows.Count).End(xlUp).Row
            derCol = f.Cells(1, Columns.Count).End(xlToLeft).Column

            If Not Intersect(Target, f.Range(f.Cells(2, 1), f.Cells(derln, derCol))) Is Nothing Then '
                If f.Range("A" & Target.Row) <> "" Then
                    Set fp = Sheets("FP")
                    Set fa = Sheets("Analyses")

                    Set cell = fp.Range("A:A").Find(Range("A" & Target.Row), lookat:=xlWhole)
                    If Not cell Is Nothing Then
                        lgn = cell.Row
                    Else
                        lgn = fp.Range("A" & Rows.Count).End(xlUp)(2).Row
                    End If
                    Range(Cells(Target.Row, 1), Cells(Target.Row, derCol)).Copy fp.Range("A" & lgn)

                    Set cell = fa.Range("A:A").Find(Range("A" & Target.Row), lookat:=xlWhole)
                    If Not cell Is Nothing Then
                        lgn = cell.Row
                    Else
                        lgn = fa.Range("A" & Rows.Count).End(xlUp)(2).Row
                    End If
                    Range("B" & Target.Row).Copy fa.Range("A" & lgn)
                    Range("D" & Target.Row).Copy fa.Range("B" & lgn)
                End If
            End If
        End If
    Application.EnableEvents = True
End Sub

Sub Evenement()
    Application.EnableEvents = True
End Sub

Voici ton code.

C'est exactement ce que je cherche pour la relation Utilisateurs-Feuille principale

Mais pour la feuille d'analyse, il me semble que le code fait en sorte d'enregistrer chaque modificiation de ligne utilisateur.

De ce fait, je me demande s'il n'est pas possible de simplifier le code en gardant uniquement la relation ci-dessus d'utilisateur et feuille principal. Je pourrai faire un simple (=CELLULE) d'une feuille à une autre pour obtenir ce dont j'ai besoin.

A quoi ressemblerai le code que je pourrai emprunter ?

Merci beaucoup pour ton aide !

PS : Est ce normal qu'à chaque cellule utilisateur rempli, une autre cellule située en dessous se sélectionne automatiquement ? Mon fichier de travail a vocation à dépasser les 1000 lignes par utilisateurs, aurai-je un problème ?

Bonjour

Nouvelle version.

91classeur1-v2.xlsm (24.19 Ko)

Est ce normal qu'à chaque cellule utilisateur rempli, une autre cellule située en dessous se sélectionne automatiquement ?

Désolé mais je ne vois pas ce que tu veux dire...

Bye !

Lorsque je rentre un ligne ou un cellule, après avoir taper "Entrée", la cellule qui se sélectionne automatiquement est une cellule différente de d'habitude (qui devrait être celle du dessous)

Le VBA fonctionne bien dans ton exemple merci !

Y a t il une possibilité pour que lorsqu'une modification de la ligne utilisateur - dossier a lieu (en cas d'erreur de frappe du numéro de dossier par exemple), la ligne correspondante sur la feuille principale se modifie avec les nouvelles valeurs automatiquement au lieu de créer une nouvelle ligne (donc potentiellement un doublon) ?

J'ai vu que je ne pouvais rajouter qu'un seul critère (colonne) dans l'onglet utilisateur qui était repris dans la feuille principale, où doit aller sur le code VBA pour corriger si j'ai besoin d'ajouter des critères ?

Votre aide m'apporte beaucoup dans tous les cas !

bonjour

salut gmb au passage.

ma suggestion :

faire 3 fichiers séparés pour les saisies

puis dans ton fichier de synthèse, tu crées une feuille qui lit les 3 autres

et dans ton fichier tu crées tous les TCD et graphiques que tu veux

dans mon exemple, j'ai simulé 2 fichiers source par les 2 feuilles SAISIE.

avantage : pas de partage de fichier (source de problèmes comme tu l'as constaté)

hyper-simple

aucune formule, aucune macro

amitiés

Nouvelle version.

Bye !

94classeur1-v2.xlsm (29.42 Ko)

bonjour

salut gmb au passage.

ma suggestion :

faire 3 fichiers séparés pour les saisies

puis dans ton fichier de synthèse, tu crées une feuille qui lit les 3 autres

et dans ton fichier tu crées tous les TCD et graphiques que tu veux

dans mon exemple, j'ai simulé 2 fichiers source par les 2 feuilles SAISIE.

avantage : pas de partage de fichier (source de problèmes comme tu l'as constaté)

hyper-simple

aucune formule, aucune macro

amitiés

Merci pour ton aide

Le problème de fichiers disparates c'est que le fait que la feuille principale fonctionne dépend directement des chemins d'accès des autres fichiers. Autrement dit, impossible de procéder à des déplacements de fichiers, ou encore à des duplications de fichiers (dont on peut avoir besoin pour x raisons) !

De plus je cherche une application VBA pour l'incrémentation qui est essentielle pour mon projet ! Comme dit au dessus, chaque utilisateurs peut avoir à rentrer plusieurs centaines voir millier de lignes. Impossible donc d'estimer une quantité/utilisateur en ciblant une cellule précise pour faire commencer sa liste sur la feuille principale

Nouvelle version.

Bye !

Le double clic ne fonctionne pas

Merci pour vos apports

Le double clic ne fonctionne pas

C'est curieux, sur mon PC, il fonctionne :

Etat initial j'ai :

capture 1

Je remplace en C5 la valeur Adr 4 par Adr 5 et je valideJ 'obtiens :

capture 2

Je fais un double cilc sur une cellule de la ligne 5 (dans le tableau). J'obtiens bien Adr 4 en C5, c'est à dire la valeur que j'avais avant de la remplacer par Adr 5 :

capture 3

Bye!

bonjour

salut gmb au passage.

ma suggestion :

faire 3 fichiers séparés pour les saisies

puis dans ton fichier de synthèse, tu crées une feuille qui lit les 3 autres

et dans ton fichier tu crées tous les TCD et graphiques que tu veux

dans mon exemple, j'ai simulé 2 fichiers source par les 2 feuilles SAISIE.

avantage : pas de partage de fichier (source de problèmes comme tu l'as constaté)

hyper-simple

aucune formule, aucune macro

amitiés

Merci pour ton aide

Le problème de fichiers disparates c'est que le fait que la feuille principale fonctionne dépend directement des chemins d'accès des autres fichiers. Autrement dit, impossible de procéder à des déplacements de fichiers, ou encore à des duplications de fichiers (dont on peut avoir besoin pour x raisons) !

De plus je cherche une application VBA pour l'incrémentation qui est essentielle pour mon projet ! Comme dit au dessus, chaque utilisateurs peut avoir à rentrer plusieurs centaines voir millier de lignes. Impossible donc d'estimer une quantité/utilisateur en ciblant une cellule précise pour faire commencer sa liste sur la feuille principale

re

alors tu peux essayer Power BI Desktop gratuit

si les 3 fichiers source changent de place, il suffit de reconnecter aux nouvelles adresses

concernant la numérotation, tu peux mettre un code VBA dans chaque fichier de saisie,

lors de l'import dans Power BI, il y a création d'une colonne contenant le nom de chaque fichier importé. En composant les données nom et n° de ligne, tu as un identifiant unique

amitiés

Bonjour à tous,

Je m'excuse pour mon absence.

Je croulai sous les requêtes professionnelles et ait du mettre ce projet de côté.

J'ai cependant consacré mon dimanche après-midi à entreprendre avec humilité un code VBA de pro que je vous présente ci-dessous :

Sub envoi()

        Dim dossier As Integer
        Dim nom As String
        Dim numero_ligne As Integer
        Dim nb_lignes As Integer

         'Attribution des variables
        numero_ligne = ActiveCell.Row
        dossier = Cells(numero_ligne, 1).Value
        nom = Cells(numero_ligne, 2).Value

        'Conditions
        If dossier <> "" Then

            If MsgBox(" n° de dossier : " & dossier & " au nom de " & nom & "?", vbYesNo) = vbYes Then

        'Réception de la validation
                With Cells(numero_ligne, 1)
                    .Font.Bold = True
                    .Interior.ColorIndex = 4
                End With

        'Envoi des valeurs
                Sheets("Synthese").Activate

                nb_lignes = WorksheetFunction.CountA(Range("A:A"))

                Cells(nb_lignes + 1, 1) = dossier
                Cells(nb_lignes + 1, 2) = nom

            Else

                MsgBox ("Le dossier n'a pas été envoyé sur la feuille principale")

            End If

        Else

        MsgBox ("Remplir le n° de dossier")

        End If

End Sub

Le code ne fonctionne pas et me met en surbrillance des éléments. Pourtant il se met à fonctionner par intermittence.

Forcé de constaté que mon code VBA de pro n'en a que le nom.

Auriez vous des conseils ?

Je précise que j'ai tenu compte de votre apport, mais que j'ai toutefois pris la décision de simplifier le code VBA et le principe du code.

EDIT : Dans le principe du code, il y a toujours une notion utilisateur/feuille et 1 feuille principale regroupant les données de chaque utilisateurs. La macro part d'un bouton (objet inséré) sur la feuille d'un utilisateur.

Aussi et optionnellement, je cherche une ligne de code me permettant de retourner sur la feuille où a été saisi les informations.

En vous remerciant

re

as-tu essayé PQuery pour la récupération de données entre fichiers ?

amitiés

re

as-tu essayé PQuery pour la récupération de données entre fichiers ?

amitiés

Non, pour la bonne raison que nous ne disposons pas de PowerBI dans mon etp. et que je n'ai malheureusement eu l'accord de modification des fichier par VBA que dans les termes que je vous ai transmis...

Rechercher des sujets similaires à "copier coller incrementation feuille"