VBA : saisie en boucle jusqu'à texte atteint

Résolu/Fermé
Evedll Messages postés 74 Date d'inscription vendredi 6 juillet 2007 Statut Membre Dernière intervention 26 septembre 2023 - 23 oct. 2018 à 22:51
Evedll Messages postés 74 Date d'inscription vendredi 6 juillet 2007 Statut Membre Dernière intervention 26 septembre 2023 - 24 oct. 2018 à 16:20
Bonjour à toutes et à tous,

Pour avancer un peu plus dans mon fichier, j'ai besoin de créer une macro qui me permet de saisir un tiret dans les cellules vides de ma colonne A. J'ai essayé de comprendre et de reproduire selon d'autres lignes de vba puisées sur le site. En bref, ça ne fonctionne pas et en plus, mon fichier s'est planté et j'ai perdu ce que j'ai fait donc je ne peux pas vous le montrer. J'étais presque arrivée (du moins je pense) mais ma macro n'a pas voulu s'arrêter et je pense avoir mis les lignes dans le désordre.

Voilà :
en colonne A, saisir un tiret - dans chaque cellule vide de la colonne (sans supprimer les données existantes de la colonne) jusqu'à la cellule dont la valeur est "Nombre de règlements total". Les cellules du dessous doivent rester vide
J'ai bien compris qu'il faut faire une boucle mais je bloque.
Voici le fichier joint, j'ai créé une deuxième feuille dans laquelle j'ai montré ce qu'il me faut

https://we.tl/t-I7GiNpoD5W

Un grand merci à ceux qui voudront bien m'aider
Bonne nuit
Evelyne

3 réponses

M-12 Messages postés 1333 Date d'inscription lundi 22 septembre 2008 Statut Membre Dernière intervention 8 avril 2023 299
24 oct. 2018 à 06:43
Bonjour,

Teste avec cette macro

Sub Cherche()
  Dim Trouve As Range, PlageDeRecherche As Range
  Dim Valeur_Cherchee As String, Dl%, i%
  Valeur_Cherchee = "Nombre de règlements total"
  Set PlageDeRecherche = ActiveSheet.Columns(1)
  Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)
  Dl = Trouve.Row - 1
    For i = 2 To Dl
      If Cells(i, 1) = "" Then Cells(i, 1) = "-"
    Next i
End Sub
1
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
Modifié le 24 oct. 2018 à 09:02
Bonjour,

M-12, ton code plantera violemment en cas de simple faute de saisie.
Il te faut tester si Trouve est ou non égal à Nothing avant d'utiliser sa propriété Row :

Sub Cherche()
  Dim Trouve As Range, PlageDeRecherche As Range
  Dim Valeur_Cherchee As String, Dl%, i%
  Valeur_Cherchee = "Nombre de règlements total"
  Set PlageDeRecherche = ActiveSheet.Columns(1)
  Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)
  If Not Trouve Is Nothing Then
    Dl = Trouve.Row - 1
    For i = 2 To Dl
      If Cells(i, 1) = vbNullString Then Cells(i, 1) = "-"
    Next i
  Else
    MsgBox "Pas trouvé " & Valeur_Cherchee
  End If
End Sub


Une autre version, sans boucle, utilisant la méthode SpecialCells :
Option Explicit

Sub ChercheV2()
  Dim Trouve As Range, PlageDeRecherche As Range, Plage As Range
  Dim Valeur_Cherchee As String
  
  Valeur_Cherchee = "Nombre de règlements total"
  Set PlageDeRecherche = ActiveSheet.Columns(1)
  Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)
  If Not Trouve Is Nothing Then
    On Error Goto Fin 'si aucune cellule vide évite l'erreur 1004 : pas de cellules correspondantes
    Set Plage = Range("A1:A" & Trouve.Row).SpecialCells(xlCellTypeBlanks)
    Plage.Value = "-"
  Else
    MsgBox "Pas trouvé " & Valeur_Cherchee
  End If
Fin:
End Sub


1
Evedll Messages postés 74 Date d'inscription vendredi 6 juillet 2007 Statut Membre Dernière intervention 26 septembre 2023
24 oct. 2018 à 16:20
Bonjour,

Merci à vous deux pour votre aide.
Pijaku, je vais garder les deux méthodes et les analyser pour bien les comprendre.
Ca pourra aussi m'aider pour essayer seule une prochaine fois.
Les deux méthodes fonctionnent super bien.
A bientôt peut être pour une prochaine demande
Cordialement
Evelyne
0