Déplacement cellule au sein d'une colonne sous condition

  • Initiateur de la discussion Initiateur de la discussion James Dean
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

J

James Dean

Guest
Bonjour Bonsoir, je me présente : James Dean.

J'essaie de programmer la chose suivante :
- Sélectionner une colonne (colonne B dans mon cas)
- Avancer de cellule en cellule
- Si une cellule est négative, alors rien ne se passe, cellule suivante
- Si une cellule est positive, alors elle se décale sur la cellule de droite

J'ai essayé avec une boucle while mais après de nombreuses tentatives, je viens vous demander de l'aide.
Voici le début de mon code :

Sub Test_WhileWend()
Dim i As Integer

i = 2

'Boucle sur les cellules de la colonne B
'On sort de la boucle si la cellule testée est <=0
While (Cells(i, 1)) <= 0 Then ActiveCell.Offset(1, 2).Select

Wend

End Sub


Cordialement et à très vite !
 
Bonjour
A tester
VB:
Sub test()
Dim derlig As Integer
Dim test As Integer
Dim i As Integer
derlig = Range("B65536").End(xlUp).Row
For i = 1 To derlig
test = Range("B" & i).Value
If test >= 0 Then
Range("C" & i) = test

End If
Next i

End Sub
 
Bonjour
je me serais personnellement contenté de ceci :
VB:
Dim C As Range
For Each C In Columns(2).SpecialCells(xlConstants).Cells
   If C.Value > 0 Then C.Offset(, 1).Value = C.Value
Next

que l'on pourrait d'ailleurs également écrire ainsi par fainéantise (autre notation , interne)
VB:
Dim C As Range
For Each C In Columns(2).SpecialCells(xlConstants).Cells
   If C.Value > 0 Then C(1, 2).Value = C.Value
Next
 
Dernière édition:
Bonjour
je me serais personnellement contenté de ceci :
VB:
Dim C As Range
For Each C In Columns(2).SpecialCells(xlConstants).Cells
   If C.Value > 0 Then C.Offset(, 1).Value = C.Value
Next

que l'on pourrait d'ailleurs également écrire ainsi par fainéantise (autre notation , interne)
VB:
Dim C As Range
For Each C In Columns(2).SpecialCells(xlConstants).Cells
   If C.Value > 0 Then C(1, 2).Value = C.Value
Next
Merci ! C'est quasiment ce que je voulais, n'est-il pas possible de supprimer les données qui, du coup, ont été copié ? Histoire de les avoir seulement à droite et non pas en double à gauche ?
 
VB:
Sub test()
Dim derlig As Integer
Dim test As Integer
Dim i As Integer
derlig = Range("B65536").End(xlUp).Row
For i = 1 To derlig
test = Range("B" & i).Value
If test >= 0 Then
Range("C" & i) = test
Range("B" & i) = ""
End If
Next i

End Sub
 
Peut-être me suis-je emballé un peu vite.
Mon code m'affiche erreur "13" à la ligne "test = Range("B" & i).Value".

Voici mon code en entier
VB:
Option Explicit
Sub Suivi_Bancaire()
'
'

'Supprimer la colonne moyenne de paiement
    Columns("C").Select
    Selection.ClearContents
    
' Les dernières colonnes inutiles
    Columns("H:I").Select
    Selection.ClearContents

    'Déplacer la colonne "Type de dépense"
    Columns("E:E").Select
    Selection.Cut Destination:=Columns("D:D")
    Columns("D:D").Select

'Sélection tableau
    Range(Selection, Selection.End(xlDown)).Select
    Application.CutCopyMode = False
    ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$F$53"), , xlNo).Name = _
        "Tableau1"
    Range("Tableau1[[#Headers],[Colonne1]]").Select
    ActiveCell.FormulaR1C1 = "Date"
    Range("Tableau1[[#Headers],[Colonne2]]").Select
    ActiveCell.FormulaR1C1 = "Dépenses"
    Range("Tableau1[[#Headers],[Colonne3]]").Select
    ActiveCell.FormulaR1C1 = "Revenus"
    Range("Tableau1[[#Headers],[Colonne4]]").Select
    ActiveCell.FormulaR1C1 = "Débiteur"
    Range("Tableau1[[#Headers],[Colonne5]]").Select
    ActiveCell.FormulaR1C1 = "Types de Dépense"
     Range("Tableau1[[#Headers],[Colonne6]]").Select
    ActiveCell.FormulaR1C1 = "Types de Revenu"
    'Bonne taille des celules
    Columns("F:F").EntireColumn.AutoFit
    Columns("E:E").EntireColumn.AutoFit
    Columns("D:D").EntireColumn.AutoFit
    Columns("C:C").EntireColumn.AutoFit

' Déplacer les valeurs positives à droite
Dim derlig As Integer
Dim test As Integer
Dim i As Integer
derlig = Range("B65536").End(xlUp).Row
For i = 1 To derlig
test = Range("B" & i).Value
If test >= 0 Then
Range("C" & i) = test
Range("B" & i) = ""
End If
Next i

End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
9
Affichages
807
Retour