Bonjour à tous,
Pour situer le contexte, je réalise une base de données qui regroupe plusieurs autres bases. Cette base regroupe un ensemble documentaire (notes, courriers, plans, etc.) et chaque ligne renseigne un document par son titre ainsi que divers autres champs (auteur, sujet, périmètre technique, etc.). Je n'effectue pas de concaténation en tant que tel mais plutôt une simple adaptation des bases à importer sur leurs formes (sélection des colonnes pouvant être renseignées dans la base globale, suppression des colonnes inutiles, etc.).
Une macro me permet pour chacun des documents (chacune des lignes tu tableau Excel), à partir du titre du document, d'identifier des données utiles pour d'autres colonnes de la ligne de renseignement du document et de remplir automatiquement les colonnes concernées (4 colonnes sont concernées) si un terme recherché est trouvé dans la cellule "titre".
L'ordre des opérations est le suivant :
1 - je copie les colonnes de ma base à importer dans la nouvelle base directement en dessous de la dernière ligne renseignée.
2 - je lance la macro de recherche.
3 - les colonnes concernées par le remplissage auto se remplissent par des termes définis dans la macro si des termes également définis dans la macro sont trouvés dans le titre du document.
Voici mon problème : parmi ces colonnes concernées par la macro de remplissage auto certaines cellules sont déjà renseignées sur les bases d'origine. Or la macro fonctionne tel que si rien n'est identifié dans le titre du document alors la valeur renvoyée dans la cellule est " " (rien / cellule vide). Je ne souhaite pas effacer les informations qui sont déjà renseignées dans ces cellules. Je souhaite donc que ma macro identifie que la cellule est non vide et qu'elle ne remplace pas sa valeur par " " ou bien par la nouvelle valeur qu'elle aura trouvé dans la cellule du titre.
Exemple :
Sub Fruit()
Dim h As Integer
'Boite de dialogue pour entrer le numéro de la dernière ligne
h = InputBox("Numéro de la dernière ligne renseignée ?", "Numéro")
'Définition de trois tableaux pour contenir les trois informations correspondant à chacun des fruits
Dim a(10000)
' Boucle sur l'ensemble des cellules de la colonnes A
For i = 1 To h
' Définition des termes à trouver pour renvoyer le fruit fraise
With Worksheets(1).Range("A" & i)
Set a1 = .Find(fraise)
Set b1 = .Find("fraise des bois")
Set c1 = .Find("gariguette")
Set d1 = .Find("charlotte")
' Si le terme est trouvé dans la cellule "Ai" on incrémente de 1 la valeur de a(i)
If Not a1 Is Nothing Then
a(i) = a(i) + 1
End If
If Not b1 Is Nothing Then
a(i) = a(i) + 1
End If
If Not c1 Is Nothing Then
a(i) = a(i) + 1
End If
If Not d1 Is Nothing Then
a(i) = a(i) + 1
End If
End With
Next i
' Boucle sur les cellules de la colonne A
For i = 3 To h
' Si a(i) est non nul et que b(i) et c(i) sont nuls, le fruit est fraise
If Not (a(i) = 0) Then
Range("O" & i) = "fraise"
End If
Next i
End Sub
Ainsi, en Oi (pourquoi mentionnes-tu O2 ?) la macro me permet d'afficher "fraise" si en Ai (colonne des titres) un des termes "fraise", "fraise de bois", "gariguette" ou "charlotte" sont rencontrés. Dans mon fichier Excel j'ai effectivement répété cette macro 3 fois afin de pouvoir remplir les colonnes Pi, Qi et Ri --> Cette macro fonctionne, mon problème n'est pas ici mais plutôt dans les commentaires sur la feuille Excel jointe.
Nota : je suis conscient que la macro peut paraître bien chiadée pour pas grand chose mais l'exemple est simplifié et dans la base réelle je fais des recherche de combinaisons de "fruits" pour renseigner la case cible en conséquence ce qui impose un peu la structure présentée dans l'exemple.
Merci à tous pour votre contribution future, je reste disponible pour plus d'explication si nécessaire.
Fabien.
Partager