VBA : saisie en boucle jusqu'à texte atteint [Résolu/Fermé]

Signaler
Messages postés
72
Date d'inscription
vendredi 6 juillet 2007
Statut
Membre
Dernière intervention
25 octobre 2018
-
Messages postés
72
Date d'inscription
vendredi 6 juillet 2007
Statut
Membre
Dernière intervention
25 octobre 2018
-
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

Messages postés
1063
Date d'inscription
lundi 22 septembre 2008
Statut
Membre
Dernière intervention
23 mars 2021
222
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 597
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


Cordialement,
Franck
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
72
Date d'inscription
vendredi 6 juillet 2007
Statut
Membre
Dernière intervention
25 octobre 2018

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