Macro de cellule vide

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

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    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+
    1. 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
  2. Contributeur
    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+
    1. 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
  3. Contributeur
    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+
    1. en fait en le faisant dans un autre classeur cela marche.
      je vais t'envoyer mon fichier pour voir
  4. Contributeur
    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. 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 !!!
      1. 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 .. ;)
    2. Contributeur
      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+