Adaptation macro pour insertion données
Bonjour le forum
J'ai une macro qui permet d'insérer des adresses, contenues sur une feuille d'un premier classeur, vers des formulaires contenus dans une autre feuille d'un autre classeur.
(Pour info, j'utilise la feuille des adresses sur 2 fichiers différents et donc j'ai en fait 2 macros)
Actuellement, je déplace la feuille de données vers les classeurs à compléter, je lance la macro, et je supprime la feuille.
J'ai placé la (ou les macro) dans le fichier "personal xlmb" et créé des boutons de commande dans le ruban d'excel.
Ce que je voudrais, c'est modifier le code afin d'éviter de déplacer la feuille des adresses lorsque je suis dans tel ou tel fichier
Je joint les fichiers
Le fichier "basesAdresses_v1 contient les adresses (et les macros à placer dans le "personal xlmb"
les fichiers "Adresses" et" FICHES PB" sont les fichiers de destinations (ces 2 fichiers changent tout le temps, d'où mon besoin de sélection afin d'aller ouvrir le fichier "basesAdresses_v1)
D'avance merci pour votre aide et votre disponibilité
bonsoir,
Les fichiers *.xlmb ça n'existe pas encore... alors on va avoir du mal à se comprendre !
Les fichiers "personal" "." "quelquechose" tout le monde met ça un peu à n'importe quelle sauce. Alors il va falloir préciser un peu.
Il est ou ton "personal" "." "quelquechose" ?
C'est un addins dans le répertoire addins et coché dans les compléments... ou bien un classeur quelconque placé dans le XLSTART ?
Concernant BasesAdresses_V1 : Il n'y a jamais rien dans la colonne 1 ni dans les colonnes D et suivantes ????
A+
Bonjour le forum
Bonjour galopin01
Désolé pour les imperfections
1- c'est le "personal.xlsb" et non le "personal.xlsm"
2 - Sont emplacement : C:\Users\Mon profil\AppData\Roaming\Microsoft\Excel
3 - C'est simplement un fichier que j'affiche ou masque en fonction de ce que j'ai besoin de rajouter
Je précise qu'en faisant comme cela je copie ce fichier une fois mis à jour et je l'installe sur les postes de mes 4 autres collaborateurs.
Eux ne savent pas y aller.
Dans le fichier Adresses j'exécute 4 autres macros afin d'obtenir le résultat que tu vois sur la feuille "Adresses" alors oui par moment
il y a des données, mais je les supprimes.
Merci pour ton aide et ta disponibilité.
Bonjour le forum
Bonjour galopin01
Désolé pour les imperfections
1- c'est le "personal.xlsb" et non le "personal.xlsm"
2 - Sont emplacement : C:\Users\Mon profil\AppData\Roaming\Microsoft\Excel
3 - C'est simplement un fichier que j'affiche ou masque en fonction de ce que j'ai besoin de rajouter
Je précise qu'en faisant comme cela je copie ce fichier une fois mis à jour et je l'installe sur les postes de mes 4 autres collaborateurs.
Eux ne savent pas y aller.
Dans le fichier Adresses j'exécute 4 autres macros afin d'obtenir le résultat que tu vois sur la feuille "Adresses" alors oui par moment
il y a des données, mais je les supprimes.
Merci pour ton aide et ta disponibilité.
Bonsoir le forum
En fait ce que j'ai besoin lorsque je me trouve dans "FICHE PB " ou dans "Adresses", c'est d'exécuter l'une ou l'autre macro sans avoir été obliger d'importer la feuille "Adresses" du fichier "BasesAdresses_v1 dans chaqu'un des fichiers
Bonjour,
Désolé pour le manque de réactivité : Je ne suis pas si disponible que ça !
Macros à coller dans ton "personal.xlsb" (de préférence dans un module vierge...) avant de créer le bouton qui appellera la Sub CompleteAdresse
Option Explicit
Sub CompleteAdresse()
Dim i&, iLR&, iR, Ref$, SStr$, WBC$, WOF$, Y1 As Boolean, C(2), Tablo
Dim Ws As Worksheet
On Error GoTo GESTERR
Application.ScreenUpdating = False
C(1) = "Adresses.xlsm": C(2) = "FICHES PB.xlsx"
WBC = ActiveWorkbook.Name
'ne fonctionne que sur ces 2 classeurs
If WBC = C(1) Or WBC = C(2) Then
Y1 = WbIsOpen("personal.xlsb") 'vérifie si le personal.xlsb est ouvert ou non
WOF = "C:\Users\Mon profil\AppData\Roaming\Microsoft\Excel\"
Ref = "personal.xlsb"
'S'il n'est pas ouvert ouvre le personal.xlsb en lecture seule
If Not Y1 Then Workbooks.Open Filename:=WOF & Ref, ReadOnly:=True
'Enregistre les adresses (en mémoire) dans le "Tablo"
With Workbooks(Ref).Worksheets("Adresses")
'Compte le nombre de ligne
iLR = .Cells(.Rows.Count, 2).End(xlUp).Row
Tablo = .Range("B1:C" & iLR)
End With
'Et referme le personal.xlsb (s'il n'était pas ouvert
If Not Y1 Then Workbooks(Ref).Close
'Selon le classeur appelant
Select Case WBC
Case C(1)
Set Ws = Worksheets("Photo situation PB")
For i = 10 To 5000 Step 24
'récupère la valeur à chercher
SStr$ = Ws.Cells(i, 7)
'Et écrit le résultat sur la cellule destination
Ws.Cells(i, 3) = RECHADRESS(SStr, Tablo)
Next i
Case C(2)
For i = 1 To Sheets.Count - 1 'sauf feuille "Aide" qui doit toujours être la dernière
Set Ws = Worksheets(i)
'récupère la valeur à chercher
SStr$ = Ws.Cells(7, 3)
'Et écrit le résultat sur la cellule destination
Ws.Cells(2, 11) = RECHADRESS(SStr, Tablo)
Next i
End Select
End If
Exit Sub
GESTERR:
MsgBox Error(Err)
End Sub
Function RECHADRESS(S$, Tablo)
'renvoie le résultat de la recherche dans le "Tablo" d'adresses
Dim i
For i = 1 To UBound(Tablo)
If Tablo(i, 1) = S Then
RECHADRESS = Tablo(i, 2)
Exit For
End If
Next
End Function
Function WbIsOpen(WbName$) As Boolean
'Teste si un classeur est ouvert
On Error Resume Next
WbIsOpen = Not Workbooks(WbName) Is Nothing
End FunctionImportant : La macro est concue pour les noms exacts de chemin, de classeur et de feuilles que tu m'as donnés.
S'il y a des erreurs c'est à toi de corriger...
A+
Bonjour le forum
Bonjour galopin01
Merci pour le temps que tu me consacre, mais j'ai un PB
dans mon premier post je disais que les fichiers "FICHES PB" et "Adresses" changeaient tout le temps, mais même leurs noms changent
c'est pour ça que j'aurai voulu avoir la possibilité d'ouvrir le fichier"BasesAdresses" lorsque je suis dans un des deux fichiers, et de là lancer la macron contenue dans le "Personal" afin d'éviter d'importer à chaque fois la feuille "Adresses" et ensuite la supprimer.
En tout cas merci de ton aide
Bonsoir,
En effet j'ai zappé quelque chose... Pour l'essentiel c'est corrigé, mais ça ne va pas être possible avec ton personal.xlsb.
Je te donne le code et la mode opératoire pour créer un véritable complément.
Option Explicit
Sub CompleteAdresse()
Dim i&, iLR&, iR&, Ref$, SStr$, WBC$, WOF$, Y1 As Boolean, C$(4), Tablo
Dim Ws As Worksheet
Application.ScreenUpdating = False
C(1) = "Adresses.xlsm"
C(2) = "FICHES PB.xlsx"
C(3) = "BasesAdresses_v1.xlsm"
WBC = ActiveWorkbook.Name
'ne fonctionne que sur ces 2 classeurs
If WBC = C(1) Or WBC = C(2) Then
WOF = ActiveWorkbook.Path & "\"
Y1 = WbIsOpen(C(3))
If Not Y1 Then Workbooks.Open Filename:=WOF & C(3), ReadOnly:=True
With Workbooks(C(3)).Worksheets("Adresses")
iLR = .Cells(.Rows.Count, 2).End(xlUp).Row
Tablo = .Range("B1:C" & iLR)
End With
If Not Y2 Then Workbooks(C(3)).Close
Select Case WBC
Case C(1)
Set Ws = Worksheets("Photo situation PB")
For i = 10 To 5000 Step 24
SStr$ = Ws.Cells(i, 7)
Ws.Cells(i, 3) = RECHADRESS(SStr, Tablo)
Next i
Case C(2)
For i = 1 To Sheets.Count - 1
Set Ws = Worksheets(i)
SStr$ = Ws.Cells(7, 3)
Ws.Cells(2, 11) = RECHADRESS(SStr, Tablo)
Next i
End Select
End If
End Sub
Function RECHADRESS(S$, Tablo)
Dim i
For i = 1 To UBound(Tablo)
If Tablo(i, 1) = S Then
RECHADRESS = Tablo(i, 2)
Exit For
End If
Next
End Function
Function WbIsOpen(WbName$) As Boolean
On Error Resume Next
WbIsOpen = Not Workbooks(WbName) Is Nothing
End FunctionCes macros doivent être collées dans un module standard (Module1) d'un classeur vierge.
Une fois que tu as collées les macros dans ce classeur il faut l'Enregistrer sous... forme de macro complémentaire (*.xlam)
Voir en bas à droite de la boite de dialogue Enregistrer sous... (Type: Macro complémentaire : *.xlam)
Tu peux choisir n'importe quel nom "perso.xlam" ou "papillon.xlam" ça n'a aucune importance mais le .xlam n'est pas négociable...
Une fois enregistré ce classeur va apparaître dans la liste des compléments (onglet Développeur) il faudra le cocher dans la boite de dialogue compléments. (Bien vérifier que le coche est affiché car il est parfois difficile de le cocher : il faut cocher la boite et non le nom...)
Une fois déclaré en complément tu peux installr un bouton personnalisé dans le menu et ce bouton fonctionnera uniquement sur les 2 classeurs cibles. Attention toujours au nom des classeurs : si un jour l'un d'eux est renommé, il faudra penser à le renommer dans VBA.
Attention si tu fais une modification dans le vba d'un .xlam il ne faut pas oublier d'enregister le .xlam à partir du menu VBA. Aucune notification n'est faite au niveau VBA pour les xlam. Ceux-ci étant censé être manipulés par des pros, ils sont censés savoir ce qu'ils ont à faire...
Avec Win 7 et XL 2010 les macros complémentaires sont rangées automatiquement par le système dans :
...AppData\Roaming\Microsoft\Addins
Il est nécessaire de les copier d'une manière ou d'une autre dans le répertoire ad-hoc de chaque utilisateur si vous êtes en réseau...
Et bien sur il est nécessaire d'activer ce complément sur chaque poste pour qu'il fonctionne...
Bonne soirée.
A+
bonsoir le forum
bonsoir le fil
Désolé pour l
là ou j'étais (chez mes parents ) pas d'internet
Merci galopin01 pour ce que tu fais mais je pense que ce que j'ai besoin est beaucoup plus simple.
Je traite des dossiers dans lesquels j'insert des adresses provenqnt du fichier "BAsesAdresses_v1"
ces fichiers changent tout le temps en sont jamais nommés pareils.
Ex FICHES PB XXXXX.xls ou FICHES PB ZZZZZ.xls ou PA-00125.xls
Ce que je fais actuellement
Quand je suis dans ces fichiers, importer les données du fichier "BasesAdresses_v1" dans les feuilles concernées.
Les deux commandes, fonctionnent très bien, mais il faut qu'à chaque fois j'importe la feuille de "BasesAdresses_v1" dans le fichier que je veux modifier.
Les commandes installées dans le "personnal" fonctionnent impec si j'importe la feuille dans mon document
le problème c'est qu'il ne faut pas oublier de supprimer la feuille du document
Ce que je cherche à faire:
Sous mon document de travail "Fiches PB XXXXX;xls" ou "Adresses ccccc.xls" ou autre, par le biais d'un bouton dans le ruban, lancer la macro.
Cette macro me demanderai d'ouvrir le fichier "BasesAdresses_V1" , puis sans manipulation de feuille injecterai les données utiles dans mon document.
Les 2 macros une pour les fichiers "Fiches PB xxxxx.xls" et l'autre pour les fichiers "Adresses aaaaa.xls" à, placer dans le "personal", sont actuellement sur la feuille "Adresses" du fichier " Base_Adresses_v1"
j'ai juste besoin qu'elles soient modifiées afin d'éviter le transfert de feuilles
Merci beaucoup pour la patience et l'aide apportée