VBA importation de données et remplacement caractère

pierrot63270

XLDnaute Nouveau
Bonjour à tous,

cela fait maintenant plusieurs jours que j'essaie en vain de trouver la (les) bonne(s) formule(s) pour remplir la partie non vide du tableau ci-joint. C'est une base de données que j'alimente tous les 3 mois environ.

J'y importe depuis un autre fichier excel (fermé) des données via du VBA. En gros si j'entre le numéro INSEE d'une commune (colonne AD) et que je lance le code, il me remplit les 5 cellules qui suivent (AE=>AI).
Jusque-là, j'y ai réussi mais non sans mal.
Code:
Sub Recherche()
Dim Fichier As Variant
Dim WbkA As String        ' Nom de ce fichier
Dim WbkB As String        ' Nom du fichier ouvert
Dim NomCommune As String
Dim NomDpt As String
Dim NumDpt As String
Dim NomReg As String
Dim Massif As String

  WbkA = ThisWorkbook.Name
  
  Fichier = Application.GetOpenFilename("Commune (*.xlsx),*.xlsx")
  If Fichier = False Then Exit Sub                                      ' pas de fichier on quitte
  '
  'Il y a un fichier donc on traite
  '
  Application.ScreenUpdating = False                                     ' Masque le rafraîchissement écran
  Workbooks.Open Filename:=Fichier                                       ' Ouverture du fichier
  WbkB = ActiveWorkbook.Name
  ' Récupère le nom du fichier
  '
  ' Définition de la zone de recherche dans le fichier Commune
  '
  NomCommune = Range("A2:Y" & Range("B" & Rows.Count).End(xlUp).Row).Address(ReferenceStyle:=xlR1C1, _
                                                                  RowAbsolute:=True, _
                                                                  ColumnAbsolute:=True)
  
  With Range("AE6:AE" & Range("AD" & Rows.Count).End(xlUp).Row)
    '
    ' C[-3] adresse relative à la colonne de la formule (D) donc D - 3 = A
    '
    .Formula = "=VLOOKUP(RC[-1],'[" & WbkB & "]Commune'!" & _
                                            NomCommune & ",2,FALSE)"
.Value = .Value
   
  
  
  NomDpt = Range("A2:Y" & Range("I" & Rows.Count).End(xlUp).Row).Address(ReferenceStyle:=xlR1C1, _
                                                                  RowAbsolute:=True, _
                                                                  ColumnAbsolute:=True)
  
  With Range("AF6:AF" & Range("AD" & Rows.Count).End(xlUp).Row)
   .Formula = "=VLOOKUP(RC[-2],'[" & WbkB & "]Commune'!" & _
                                            NomDpt & ",9,FALSE)"
    
   
   .Value = .Value                                                   ' Pour remplacer la formule par la valeur
  
  NumDpt = Range("A2:Y" & Range("H" & Rows.Count).End(xlUp).Row).Address(ReferenceStyle:=xlR1C1, _
                                                                  RowAbsolute:=True, _
                                                                  ColumnAbsolute:=True)
  
  With Range("AG6:AG" & Range("AD" & Rows.Count).End(xlUp).Row)
   .Formula = "=VLOOKUP(RC[-3],'[" & WbkB & "]Commune'!" & _
                                            NumDpt & ",8,FALSE)"
    
   
   .Value = .Value
   
  NomReg = Range("A2:Y" & Range("K" & Rows.Count).End(xlUp).Row).Address(ReferenceStyle:=xlR1C1, _
                                                                  RowAbsolute:=True, _
                                                                  ColumnAbsolute:=True)
   
  With Range("AH6:AH" & Range("AD" & Rows.Count).End(xlUp).Row)
   .Formula = "=VLOOKUP(RC[-4],'[" & WbkB & "]Commune'!" & _
                                            NomReg & ",11,FALSE)"
    
   
   .Value = .Value
   
  Massif = Range("A2:Y" & Range("Y" & Rows.Count).End(xlUp).Row).Address(ReferenceStyle:=xlR1C1, _
                                                                  RowAbsolute:=True, _
                                                                  ColumnAbsolute:=True)
  Workbooks(WbkB).Close savechanges:=False

  With Range("AI6:AI" & Range("AD" & Rows.Count).End(xlUp).Row)
   .Formula = "=VLOOKUP(RC[-5],'[" & WbkB & "]Commune'!" & _
                                            NomReg & ",25,FALSE)"
    
   
  .Value = .Value
 
  
   End With
   End With
   End With
  End With
  End With

End Sub

Après des recherches sur ce forum et ailleurs, je n'arrive pas à trouver le code qui me satisferait.

D'une part, j'aimerai que le code ne s'applique que sur les cellules vides une fois le code INSEE entré
D'autre part, dans les cellules sous le titre Massif/Hors Massif, je récupère M ou "vide". je voudrais arriver à ce que la valeur soit remplacée par Massif si c'est M le résultat et Hors Massif si c'est "vide".

Si l'un d'entre vous pouvait m'aiguiller, cela m'aiderait grandement.
Merci d'avance
 

Pièces jointes

  • Base Dossiers programmés.zip
    233.9 KB · Affichages: 26