VBA - Démarrer une recherchev avec conditions

Bonjour à tous,

Je me permets de poster ma demande sur ce site. Je bloque depuis quelques jours sur une formule qui doit exister quelque part (en tout cas je l’espère).

Avec un code VBA, je cherche à faire démarrer une recherchev dans une cellule vide si la cellule précédente est renseignée avec du texte ou des chiffres (format standard).

Je ne veux pas écraser les données déjà existantes dans les cellules <> vides, et donc faire la recherchev dans les cellules suivantes... En sachant que les cellules nouvellement complétées seront à leur tour renseignées par cette recherchev et donc ne devront pas être écrasées non plus... ect ect. Il s'agit d'un fichier dynamique où je dois cumuler des données journalières sans écraser l'historique.

Je ne sais pas s'il existe une formule excel qui répondrait à ces critères, que je pourrais ensuite inclure dans un code VBA.

J’espère avoir été assez claire et précise dans ma demande...

Merci à vous, Bonne journée. Manon

bonjour Manon141,

n'avez-vous pas un petit fichier, comme ça, on sait où on doit chercher et quelles sont les valeurs à chercher et où on doit sauvegarder les résultats.

Bonjour BsAlv,

Je vous joins un exemple avec des données simples, en espérant que ça vous aide à visualiser ma demande.

Bonne réception,

Manon

10test.xlsx (10.55 Ko)

re,

si vous modifiez ou ajoutez une valeur en colonne A, la macro modifiera les colonnes B:D non vides.

Par exemple, faites F2 en cellule A18 et puis "Enter" pour changer cette cellule

12test-68.xlsb (24.29 Ko)
Private Sub Worksheet_Change(ByVal Target As Range)
     Set c = Intersect(Target, Me.Columns(1))     'les cellules modifiées de la colonne A
     If c Is Nothing Then Exit Sub           'on a rien changé en colonne A =arrêter

     For Each c0 In c.Cells                  'les cellules A modifiées
          If c0.Row > 1 And Len(c0.Value) > 0 Then     'ces cellules ne sont pas vides et pas en ligne 1
               r = Application.Match(c0.Value, Sheets("Feuil2").Range("A1:A1000"), 0)     'rechercher comme valeur
               If Not IsNumeric(r) Then r = Application.Match(CStr(c0.Value), Sheets("Feuil2").Range("B1:B1000"), 0)     'rechercher comme texte
               If IsNumeric(r) Then          'trouvé
                    For i = 1 To 4           'les 4 colonnes à droiite
                         If c0.Offset(, i).Value = "" Then c0.Offset(, i).Value = Sheets("feuil2").Cells(r, i + 1).Value
                    Next
               End If
          End If
     Next
End Sub

Bonjour BsAlv,

Je savais bien que c'était faisable :D

C'est top comme code ça ! Merci

Si je peux encore vous solliciter, j'ai des numéros de contrat qui commencent par "01" ou "46" en format standard (en cellule A20 à A22 sur le fichier excel). Si je viens faire fonctionner la touche F2+entrer sur le numéro de contrat, le zéro devant le 1 saute et le numéro commençant par 46 saute aussi, je ne peux pas modifier ce format puisque tous les exports excel utilisent ce format... Existe t-il une alternative au F2+entrer sur le numéro de contrat ?

Dernière question qui me viens en tête. En prenant en compte la contrainte citée si dessus, comment je peux compléter une colonne plus loin dans l'excel via votre code ?

Je vous joins l'excel en espérant que ce soit plus clair...

5test-68-1.xlsb (18.27 Ko)

Merci, Manon

bonjour,

pour ce format, il y a 2 solutions, c'est oubien changer le format de la colonne A en "TEXTE" (j'ai fait cela dans le PJ) oubien de précéder votre chiffre avec un ' donc '01312, comme ça, excel comprend que c'est un texte et ne pas un chiffre.

image

L'autre question, c'est peut-être déroutant, mais la partie gauche est avec un décalage (cet offset) et la partie droite est avec l'addresse "absolute". S'il y a encore d'autres colonnes nouvelles, vous pouvez utiliser la même méthode.

If c0.Offset(, 6).Value = "" Then c0.Offset(, 6).Value = Sheets("feuil2").Cells(r, 8).Value 'intervention est 6 colonne à droite de contract en feuil1 et dans la 8ième colonne de feuil2

ce F2+Enter était pour simuler un changement d'une cellule. plus tard, vous n'avez plus besoin de cela. Vous ajouterez un nouveau contrat ou modifierez un contrat dans la colonne A

4test-68-1.xlsb (24.94 Ko)

re,

ok merci pour votre patience ;) Je vais tenter d'adapter ce code à mes outils.

Vous avez des des modules à me recommander pour que je puisse m'améliorer en code vba ?

Manon

re,

non, pas directement, peut-être dans les cours VBA ici sur ce site.

Bonjour,

J'ai réussi à l'adapter à mon outil.

Mais j'aimerais aller plus loin avec ce code. Si je dispose d'une feuil3 avec des informations que je souhaite récupérer pour compléter la feuil1, des colonnes à renseigner entre les colonnes déjà renseignées avec le code précédent.

Que faut-il modifier au code initial pour faire la jonction entre les données à récupérer sur la feuil2 (pour compléter feuil1) et la feuil3 (pour compléter feuil1) pour compléter la feuil1 ?

Je vous joins l'excel en espérant avoir été claire...

Merci par avance, Manon

7test-68-3.xlsb (20.15 Ko)

bonjour Manon, ici la macro adaptée.

14test-68-3.xlsb (27.55 Ko)
Rechercher des sujets similaires à "vba demarrer recherchev conditions"