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é

17adresses.xlsm (34.27 Ko)
19fiches-pb.xlsx (91.33 Ko)

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 Function

Important : 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 Function

Ces 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

Rechercher des sujets similaires à "adaptation macro insertion donnees"