Macro de cellule vide

nadia -  
 ernest -
bonjour,

je suis novice en visual basic et je dois chercher à réaliser une macro qui doit me renvoyer une valeur non vide sur une colonne.
ex: je me trouve en A5 et en A4; A3; A2 mes cellules sont vides alors qu'en A1 iil y a une valeur. cette valeur en A1 je veux la mettre en A5.
Comment puis je faire?

merci de votre aide

7 réponses

  1. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
     
    Re,

    ??? ça fonctionne chez moi copie/ colle direct le code dans un module, sur CCM le Exit For s'affiche sur une autre ligne alors qu'il doit etre en fin de ligne...Je te remets le code avec les nméros de ligne (à supprimer)
    ligne1 Sub toto()
    ligne2'remonte depuis A4 vers A1, prend la premiere cellule non-vide et mets la valeur en A5
    ligne 3Dim i As Integer
    ligne4For i = 4 To 1 Step -1
    ligne5If Not IsEmpty(Range("A" & i)) Then Range("A5").Value = Range("A" & i).Value: Exit For
    ligne6Next i
    ligne7End Sub
    

    Sinon tes cellules ne sont peut etre pas vides (espace,caractere spécial....) => il faudrait ds ce cas changer le critere non vide par autre chose (> à 0, numérique/non numérique etc...)
    Sinon...je vois pas trop....

    A+
    2
    1. nadia
       
      désolée mais cela ne fonctionne pas.
      pourrais tu m'envoyer ton fichier pour que je voie en fait excatement ton mécanisme?

      merci
      0
  2. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
     
    Salut,

    Bcp de solutions différentes, peux-tu expliquer le but de la manip pour qu'on puisse t'aider ("doit me renvoyer une valeur non vide sur une colonne" ???)
    Sinon :
    Range("A5").Value = Range("A1").Value
    ou encore : Range("A5").Formula = "=A1"
    ou copier/coller etc....

    A+
    0
    1. nadia
       
      en fait je dois récuperer la cellule qui est au dessus de A5. sauf que si elle est vide je dois aller chercher les cellules au dessus tant que je n'ai pas trouver de valeur. mais si il y a une valeur en A4 je dois la copier en A5

      j'espère etre plus lisible
      0
  3. nadia
     
    cela ne renvoie rien meme si j'enleve le exit for
    0
  4. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
     
    Re,

    Si tu veux, mais j'ai rien ds le classeur,j' ai fait ça par rapport à ta demande....Par contre tu peux m'envoyer ton classeur si tu veux (tomsound2222@yahoo.fr)ou laisse-moi ton adresse je t' envoie ce que j'ai fait( qui fonctionnne chez moi....)

    A+
    0
    1. nadia
       
      en fait en le faisant dans un autre classeur cela marche.
      je vais t'envoyer mon fichier pour voir
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
     
    OK, les cellules ne sont pas vides, il y a une formule....Ce qui t'intéresse est un montant donc une valeur numérique :
    Sub toto()
    'remonte depuis J49 vers J46, prend la premiere cellule numérique et mets la valeur en J50 puis stoppe
    Dim i As Integer
    For i = 49 To 46 Step -1
    If IsNumeric(Range("J" & i).Value) Then Range("J50").Value = Range("J" & i).Value: Exit For
    Next i
    End Sub
    


    A+
    -1
  7. céline
     
    Hello,

    J'ai besoin d'une macro qui me permettre de combler des cellules vides avec les infos se trouvant dans la cellule précédents les vides, sachant qu'il s'agit d'un tableau ou se problème se pose.
    301385337 10585067 29/03/2007

    301409243*10587086 03/04/2007

    ....

    En faite il faudrait que le premier 301..... soit copier jusqu'au suivant et ainsi de suite pour tout le fichier....

    Dur à expliquer, j'espère que vous m'avez comprise !!!
    0
    1. ernest
       
      essaye ce code :

      Option Explicit

      Sub FillBlanks()
      Dim rRange1 As Range, rRange2 As Range
      Dim lReply As Integer

      If Selection.Cells.Count = 1 Then
      'MsgBox "You must select your list and include the blank cells", _
      vbInformation, "OzGrid.com"
      MsgBox "Votre liste doit inclure les cellules vides.", _
      vbInformation, "CSI Nantes - RT"
      Exit Sub
      ElseIf Selection.Columns.Count > 1 Then
      'MsgBox "You must select only one column", _
      vbInformation, "OzGrid.com"
      MsgBox "Sélectionner une seule colonne.", _
      vbInformation, "CSI Nantes - RT"
      Exit Sub
      End If

      Set rRange1 = Selection
      On Error Resume Next
      Set rRange2 = rRange1.SpecialCells(xlCellTypeBlanks)
      On Error GoTo 0

      If rRange2 Is Nothing Then
      'MsgBox "No blank cells Found", _
      vbInformation, "OzGrid.com"
      MsgBox "Votre sélection ne comporte aucune cellule vide.", _
      vbInformation, "CSI Nantes - RT"
      Exit Sub
      End If

      rRange2.FormulaR1C1 = "=R[-1]C"
      'lReply = MsgBox("Convert to Values", vbYesNo + vbQuestion, "OzGrid.com")
      lReply = MsgBox("Convertir en Valeur", vbYesNo + vbQuestion, "Acceper de convertir ?")
      If lReply = vbYes Then rRange1 = rRange1.Value
      End Sub

      L'idéal est de l'affecter à un bouton.
      Tu sélectionne ta plage et tu clique sur le bouton .. ;)
      0
  8. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
     
    Re,

    Un truc comme ça doit fonctionner (doit y avoir moyen de faire mieux) -attention si tu as plusieurs non-vides, il s'arrete à la premiere, pour récupérer derniere non-vide(vers le haut),vire le ":Exit For "
    Sub toto()
    'remonte depuis A4 vers A1, prend la premiere cellule non-vide et mets la valeur en A5
    Dim i As Integer
    For i = 4 To 1 Step -1
    If Not IsEmpty(Range("A" & i)) Then Range("A5").Value = Range("A" & i).Value: Exit For
    Next i
    End Sub


    A+
    -1