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
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 !
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 SubVoici 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.
Désolé mais je ne vois pas ce que tu veux dire...Est ce normal qu'à chaque cellule utilisateur rempli, une autre cellule située en dessous se sélectionne automatiquement ?
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
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
C'est curieux, sur mon PC, il fonctionne :Le double clic ne fonctionne pas
Etat initial j'ai :
Je remplace en C5 la valeur Adr 4 par Adr 5 et je valideJ 'obtiens :
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 :
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 SubLe 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