macro pour compléter un tableau déjà rempli par un autre utilisateur

sylvie62400

XLDnaute Nouveau
Bonjour à tous,
nouvelle ici je sollicite votre aide pour un problème de macro.
Je commence :
J'ai deux tableaux : un appelé appel et l'autre suivi des appels.
Dans appel, l'utilisateur de niveau 1 saisit le jour, l'identité de l'appelant, ses coordonnées et sa question. Une fois ces données saisies, il lance la macro qui remplit le tableau de suivi et enregistre le fichier appel sous le nom appel plus date et heure.

Le problème est que l'utilisateur de second niveau doit ouvrie ce fichier et compléter le formulaire, nom du rappelant et ,date et heure du rappel.

Je bloque sur la formulation de la macro pour qu'à partir du fichier appel plus date, les données complètent le tableau de suivi dans les colonnes vides.

Comment faire pour qu'il retrouve dans le suivi la bonne ligne à compléter? et la complète ?


Merci d'avance
 

Etienne2323

XLDnaute Impliqué
Re : macro pour compléter un tableau déjà rempli par un autre utilisateur

Salut Sylvie,
ta problématique me semble tout à fait réalisable. Par contre, pour répondre efficacement à ta demande, il faudrait que tu déposes un petit fichier exemple en pièce jointe, sans données confidentielles ou rien, pour que nous puissions travailler avec du concret.

Au plaisir de te relire,

Étienne
 

sylvie62400

XLDnaute Nouveau
Re : macro pour compléter un tableau déjà rempli par un autre utilisateur

Voici les modèles en question, merci beaucoup.
 

Pièces jointes

  • SuiviContreAppel.xls
    54.5 KB · Affichages: 100
  • APPEL.xls
    98 KB · Affichages: 113
  • APPEL.xls
    98 KB · Affichages: 103
  • APPEL.xls
    98 KB · Affichages: 99

Etienne2323

XLDnaute Impliqué
Re : macro pour compléter un tableau déjà rempli par un autre utilisateur

Salut Sylvie,
il faudrait que tu joignes également le fichier "ContreAppel.xls" pour que je puisse travailler avec tous les fichiers.

Edit : Ou alors, est-ce que le fichier ContreAppel.xls est le fichier "Appel" que tu as déposé ici ?

Merci,

Étienne
 

Etienne2323

XLDnaute Impliqué
Re : macro pour compléter un tableau déjà rempli par un autre utilisateur

Salut Sylvie,
voici tout d'abord une version de la macro EXPORTATION qui est selon moi beaucoup plus adaptée.

VB:
Option Explicit

Sub EXPORTATION()

Dim FICHIER_APPEL As String, FICHIER_CONTREAPPEL As String, FICHIER_CONTREAPPEL_COMPLET As String
Dim Ligne As Long
Dim Le_FichierOUVERT, Le_FICHIER
Dim fichierOUVERT As String, Le_Chemin As String

Application.ScreenUpdating = False

FICHIER_APPEL = ThisWorkbook.Name
FICHIER_CONTREAPPEL = "SuiviContreAppel.xls"
FICHIER_CONTREAPPEL_COMPLET = ThisWorkbook.Path & "\" & FICHIER_CONTREAPPEL

fichierOUVERT = "non"
For Each Le_FichierOUVERT In Application.Workbooks 'On parcours chacun des classeurs Excel ouverts.
    If Le_FichierOUVERT.Name = FICHIER_CONTREAPPEL Then 'Vérifie s'il n'est pas déjà ouvert.
        fichierOUVERT = "oui" 'Switch
        Exit For 'Sort de la boucle
    End If
Next Le_FichierOUVERT 'Passe au prochain fichier

If fichierOUVERT <> "oui" Then 'Une fois la boucle complétée, si la Switch n'a pas été tournée à oui, alors ouvre le fichier
    Set Le_FICHIER = Workbooks.Open(Filename:=FICHIER_CONTREAPPEL_COMPLET, UpdateLinks:=0)
End If

Ligne = Workbooks(FICHIER_CONTREAPPEL).Sheets("Suivi").Cells(65536, 3).End(xlUp).Row + 1

'-----Indicateur AGENT
Workbooks(FICHIER_CONTREAPPEL).Sheets("Suivi").Cells(Ligne, 2) = Workbooks(FICHIER_APPEL).Sheets("Appel").[P6]

'---- Indicateur  DATE TRANSMISSION
Workbooks(FICHIER_CONTREAPPEL).Sheets("Suivi").Cells(Ligne, 3) = Workbooks(FICHIER_APPEL).Sheets("Appel").[P7]

'---- Indicateur APPELANT
Workbooks(FICHIER_CONTREAPPEL).Sheets("Suivi").Cells(Ligne, 5) = Workbooks(FICHIER_APPEL).Sheets("Appel").[P12]

'-----Numéro à rappeler
Workbooks(FICHIER_CONTREAPPEL).Sheets("Suivi").Cells(Ligne, 6) = Workbooks(FICHIER_APPEL).Sheets("Appel").[P13]
   
'-----jour et heures
Workbooks(FICHIER_CONTREAPPEL).Sheets("Suivi").Cells(Ligne, 7) = Workbooks(FICHIER_APPEL).Sheets("Appel").[P14]
   
'-----qualite appelant
Workbooks(FICHIER_CONTREAPPEL).Sheets("Suivi").Cells(Ligne, 8) = Workbooks(FICHIER_APPEL).Sheets("Appel").[P15]
   
'-----Domaine
Workbooks(FICHIER_CONTREAPPEL).Sheets("Suivi").Cells(Ligne, 9) = Workbooks(FICHIER_APPEL).Sheets("Appel").[P16]

'-----Impôt
Workbooks(FICHIER_CONTREAPPEL).Sheets("Suivi").Cells(Ligne, 10) = Workbooks(FICHIER_APPEL).Sheets("Appel").[P17]
    
'-----Cadre
Workbooks(FICHIER_CONTREAPPEL).Sheets("Suivi").Cells(Ligne, 11) = Workbooks(FICHIER_APPEL).Sheets("Appel").[P18]
    
'-----RAPPEL
Workbooks(FICHIER_CONTREAPPEL).Sheets("Suivi").Cells(Ligne, 12) = Workbooks(FICHIER_APPEL).Sheets("Appel").[P23]
    
'-----RETOUR
Workbooks(FICHIER_CONTREAPPEL).Sheets("Suivi").Cells(Ligne, 13) = Workbooks(FICHIER_APPEL).Sheets("Appel").[P26]

'Enregistrer sous du fichier Appel
Workbooks(FICHIER_APPEL).SaveAs Filename:="J:\ESPACE GSM\EN COURS\CONTREAPPEL " + Str(Day(Now)) + "-" + Str(Month(Now)) + "-" + Str(Hour(Now)) + "H" + Str(Minute(Now)) + "mn"

'sauv tableau récap
Workbooks(FICHIER_CONTREAPPEL).Close True

End Sub

Je vous reviens avec la suite plus tard,

Cordialement,

Étienne
 

Etienne2323

XLDnaute Impliqué
Re : macro pour compléter un tableau déjà rempli par un autre utilisateur

Re,
ensuite, pour ouvrir le bon fichier APPEL, tu peux utiliser ceci.

On ira ouvrir le bon fichier avec une fenêtre de sélection.

VB:
Sub Ouvrir_Bon_Fichier_Appel()

Dim Le_FichierOUVERT, Le_FICHIER, x
Dim fichierOUVERT As String, Le_Chemin As String, Le_Nom As String

x = Application.GetOpenFilename(, , "Sélectionnez le fichier APPEL à utiliser")
Le_Nom = Dir(x)

fichierOUVERT = "non"
For Each Le_FichierOUVERT In Application.Workbooks 'On parcours chacun des classeurs Excel ouverts.
    If Le_FichierOUVERT.Name = Le_Nom Then 'Vérifie s'il n'est pas déjà ouvert.
        fichierOUVERT = "oui" 'Switch
        Exit For 'Sort de la boucle
    End If
Next Le_FichierOUVERT 'Passe au prochain fichier

If fichierOUVERT <> "oui" Then 'Une fois la boucle complétée, si la Switch n'a pas été tournée à oui, alors ouvre le fichier
    Set Le_FICHIER = Workbooks.Open(Filename:=x, UpdateLinks:=0)
End If

End Sub

Par la suite, pour entrer les nouvelles informations entrées par le 2e utilisateur, tu n'as qu'à ajouter un nouveau bouton et y attribuer une macro qui se base sur ce que je t'ai mis dans le message précédent, à savoir :

VB:
Sub Remplir_la_2e_vague_dinfos()

Dim FICHIER_APPEL As String, FICHIER_CONTREAPPEL As String, FICHIER_CONTREAPPEL_COMPLET As String
Dim Ligne As Long

FICHIER_APPEL = ActiveWorkbook.Name
FICHIER_CONTREAPPEL = "SuiviContreAppel.xls"
FICHIER_CONTREAPPEL_COMPLET = ThisWorkbook.Path & "\" & FICHIER_CONTREAPPEL

Ligne = Workbooks(FICHIER_CONTREAPPEL).Sheets("Suivi").Cells(65536, 3).End(xlUp).Row

'-----Premiere cellule manquante
Workbooks(FICHIER_CONTREAPPEL).Sheets("Suivi").Cells(Ligne, 1000) = Workbooks(FICHIER_APPEL).Sheets("Appel").[P1000]

'-----Deuxieme cellule manquante
Workbooks(FICHIER_CONTREAPPEL).Sheets("Suivi").Cells(Ligne, 2000) = Workbooks(FICHIER_APPEL).Sheets("Appel").[P2000]

'etc...


End Sub

À adapter bien sur !!!

Cordialement,

Étienne
 
Dernière édition:

sylvie62400

XLDnaute Nouveau
Re : macro pour compléter un tableau déjà rempli par un autre utilisateur

Coucou c'est encore moi
Je te remercie encore la première partie du code export fonctionne à merveilles.
J'ai un souci avec la partie ouvrir le bon fichier. En effet dans notre Process, l'utilisateur de premier niveau a enregistré le fichier appel sous contre appel +date+heure+minutes.
Le second utilisateur récupère ce fichier, l'ouvre renseigne 2 champs P8 et P23 et c'est là que je voudrai que la macro retrouve dans le tableau CONTREAPPEL, la bonne ligne et la complète
Je ne comprends pas la macro ouvrir le bon fichier.
Peux tu m'expliquer

Sylvie
 

Etienne2323

XLDnaute Impliqué
Re : macro pour compléter un tableau déjà rempli par un autre utilisateur

Salut Sylvie,
effectivement, en y repensant comme il faut, le second utilisateur va ouvrir tout simplement lui-même le fichier qui a été renommé. Ma macro est donc complètement inutile.

Il faudrait donc seulement ajouter les lignes suivantes et les attacher à un nouveau bouton pour faire fonctionner le tout, étant donné que le fichier sera déjà ouvert :

VB:
Sub Remplir_la_2e_vague_dinfos()

Dim FICHIER_APPEL As String, FICHIER_CONTREAPPEL As String
Dim Ligne As Long

FICHIER_APPEL = ThisWorkbook.Name
FICHIER_CONTREAPPEL = "SuiviContreAppel.xls"

Ligne = Workbooks(FICHIER_CONTREAPPEL).Sheets("Suivi").Cells(65536, 3).End(xlUp).Row

'-----Premiere cellule manquante
Workbooks(FICHIER_CONTREAPPEL).Sheets("Suivi").Cells(Ligne, 1000) = Workbooks(FICHIER_APPEL).Sheets("Appel").[P8]

'-----Deuxieme cellule manquante
Workbooks(FICHIER_CONTREAPPEL).Sheets("Suivi").Cells(Ligne, 2000) = Workbooks(FICHIER_APPEL).Sheets("Appel").[P23]

End Sub

Vous n'avez qu'à remplacer le 1000 et le 2000 par les bons numéros de colonne et le tour est joué.

Bonne continuité,

Étienne
 

sylvie62400

XLDnaute Nouveau
Re : macro pour compléter un tableau déjà rempli par un autre utilisateur

Etienne,
merci beaucoup encore une fois. Je compte rajouter un if
if Workbooks(FICHIER_CONTREAPPEL).Sheets("Suivi").Cells(Ligne, 5) = Workbooks(FICHIER_APPEL).Sheets("Appel").[P12]
then Workbooks(FICHIER_CONTREAPPEL).Sheets("Suivi").Cells(Ligne, D) = Workbooks(FICHIER_APPEL).Sheets("Appel").[P8]

Afin que la deuxième vague de donnée retrouve le contre appel d'origine, il faudra mettre une boucle je pense ?

Pour moi, il est 20H35 alors bonne journée à toi
sylvie
 

sylvie62400

XLDnaute Nouveau
Re : macro pour compléter un tableau déjà rempli par un autre utilisateur

Re- bonjour
j'ai essayé deux solutions mais rien ne se recopie dans le tableau de suivi, vois tu où il y a un raté ?

Sub supervisor()



Dim FICHIER_APPEL As String, FICHIER_CONTREAPPEL As String
Dim Ligne As Long

chemin = "J:\ESPACE GSM\EN COURS\CONTREAPPEL\"
FICHIER_APPEL = ThisWorkbook.Name
FICHIER_CONTREAPPEL = "SuiviContreAppel.xls"


Workbooks.Open Filename:=chemin + "SuiviContreAppel.xls"


'-----Premiere cellule manquante
Ligne = 1
If Workbooks(FICHIER_APPEL).Sheets("Appel").[P12] = Workbooks(FICHIER_CONTREAPPEL).Sheets("Suivi").Cells(Ligne, 5) Then
Workbooks(FICHIER_APPEL).Sheets("Appel").[P8].Copy
Workbooks(FICHIER_CONTREAPPEL).Sheets("Suivi").Cells(Ligne, 4).Select
ActiveSheet.Paste
Application.CutCopyMode = False

Else: Ligne = Ligne + 1
Do Until Workbooks(FICHIER_CONTREAPPEL).Sheets("Suivi").Cells(Ligne, 2) Is Empty

End If

'-----Deuxieme cellule manquante
Ligne = 1
If Workbooks(FICHIER_CONTREAPPEL).Sheets("Suivi").Cells(Ligne, 5) = Workbooks(FICHIER_APPEL).Sheets("Appel").[P12] Then
Workbooks(FICHIER_CONTREAPPEL).Sheets("Suivi").Cells(Ligne, 12) = Workbooks(FICHIER_APPEL).Sheets("Appel").[P23]
Else: Ligne = Ligne + 1
Do Until Workbooks(FICHIER_CONTREAPPEL).Sheets("Suivi").Cells(Ligne, 2) Is Empty
End If
MERCI

Sylvie
 

Etienne2323

XLDnaute Impliqué
Re : macro pour compléter un tableau déjà rempli par un autre utilisateur

Salut Sylvie,
tout d'abord, un peu déçu de voir que tu n'appliques pas grand chose de ce que je t'ai présenté jusqu'à maintenant. Ça ne m'a jamais dérangé de donner un coup de main et de faire une bonne partie du travail, mais j'apprécie quand l'autre fait son bout de chemin aussi. Par exemple :

1) Vérifier si le fichier ContreAppel est déjà ouvert avant de l'ouvrir de nouveau et perdre toutes les infos qui auraient pu y être entrées.

2) Les boucles qui ne servent à rien ici ...

3) Les copier coller non plus ...

En tout cas, voici la dernière macro modifiée.

Aussi, juste à titre informatif, si tu veux poster du code VBA, l'idéal est d'aller en mode avancé et d'utiliser les balises de code (le bouton avec un #).

VB:
Option Explicit

Sub supervisor()


Dim FICHIER_APPEL As String, FICHIER_CONTREAPPEL As String, FICHIER_CONTREAPPEL_COMPLET As String
Dim Ligne As Long, DL As Long
Dim Le_FichierOUVERT, Le_FICHIER, c
Dim fichierOUVERT As String, Chemin As String, Nom_Appelant As String

Application.ScreenUpdating = False

'****************************************************************************************************************
'1re étape : déclare les variables de fichiers et de chemins à utiliser
'****************************************************************************************************************
Chemin = "J:\ESPACE GSM\EN COURS\CONTREAPPEL\"
FICHIER_APPEL = ThisWorkbook.Name
FICHIER_CONTREAPPEL = "SuiviContreAppel.xls"
FICHIER_CONTREAPPEL_COMPLET = Chemin & FICHIER_CONTREAPPEL

'****************************************************************************************************************
'2e étape : vérifie si le fichier ContreAppel est déjà ouvert. Si c'est le cas, on ne l'ouvre pas de nouveau.
          ' Si ce n'est pas le cas, alors on l'ouvre
'****************************************************************************************************************
fichierOUVERT = "non"
For Each Le_FichierOUVERT In Application.Workbooks 'On parcours chacun des classeurs Excel ouverts.
   If Le_FichierOUVERT.Name = FICHIER_CONTREAPPEL Then 'Vérifie s'il n'est pas déjà ouvert.
       fichierOUVERT = "oui" 'Switch
       Exit For 'Sort de la boucle
   End If
Next Le_FichierOUVERT 'Passe au prochain fichier

If fichierOUVERT <> "oui" Then 'Une fois la boucle complétée, si la Switch n'a pas été tournée à oui, alors ouvre le fichier
   Set Le_FICHIER = Workbooks.Open(Filename:=FICHIER_CONTREAPPEL_COMPLET, UpdateLinks:=0)
End If

'****************************************************************************************************************
'3e étape : Effectuer une recherche dans le fichier ContreAppel pour trouver la bonne ligne à renseigner. Pour ce
        '   faire, on va utiliser une recherche qui se base sur le nom de l'appelant.
'****************************************************************************************************************
Workbooks(FICHIER_APPEL).Activate
Nom_Appelant = Range("P12").Value 'Met dans une variable le nom de l'appelant.

Workbooks(FICHIER_CONTREAPPEL).Activate
DL = Cells(65536, 3).End(xlUp).Row 'Trouve la dernière ligne de notre onglet.

'On va faire la recherche. Une fois qu'on trouve le nom de l'appelant dans l'onglet, alors on conserve le numéro
'de la ligne dans une variable (Ligne)
Set c = Range(Cells(1, 1), Cells(DL, 13)).Find(Nom_Appelant, LookIn:=xlValues, Lookat:=xlWhole)
If Not c Is Nothing Then
    Ligne = c.Row
Else
    Exit Sub
End If


'****************************************************************************************************************
'4e étape : On va renseigner les cellules manquantes avec la nouvelle information
'****************************************************************************************************************
'-----Premiere cellule manquante
Workbooks(FICHIER_CONTREAPPEL).Sheets("Suivi").Cells(Ligne, 4) = Workbooks(FICHIER_APPEL).Sheets("Appel").[P8]

'-----Deuxieme cellule manquante
Workbooks(FICHIER_CONTREAPPEL).Sheets("Suivi").Cells(Ligne, 12) = Workbooks(FICHIER_APPEL).Sheets("Appel").[P23]

End Sub

Cordialement,

Étienne
 

sylvie62400

XLDnaute Nouveau
Re : macro pour compléter un tableau déjà rempli par un autre utilisateur

Etienne,

Je suis désolée que tu penses que je n'utilises pas tes conseils. Je ne suis pas le genre de personne à prendre l'info , m'en servir et basta!
J'ai utilisé tes ligne de codes : la partie exportation n'a nécessité qu'un modification au niveau des fichiers sources.
La deuxième partie me pose problème depuis hier après midi, j'ai eu toujours le même message d'erreur concernant une ligne.
Je ne suis pas spécialiste des macros ma formation et mon métier en sont à des kilomètres.
Ton code ne fonctionnant pas en l'état j'ai essayé avec mes petites capacités de trouver une solution depuis hier jusque ce matin.
Je te remercie encore pour ton travail, j'ai essayé ton nouveau code et rien ne se passe je vais donc revoir ligne par ligne pourquoi ,
Bon après midi.

Sylvie
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 949
Membres
101 851
dernier inscrit
vaiata