Inversion de cellules sur une plage filtré

Salut à tous !

Voilà mon petit problème du jour : je cherche à inverser le contenu de certaines cellules dans la même ligne selon un critère ( en gros si la valeur de la cellule sur la même ligne dans colonne 5 est "null")

J'ai compris comment inverser deux cellules mais je n'arrive pas à le faire sur une boucle pour que ça le fasse à toutes. Si quelqu'un à une idée de comment je pourrais faire ^^ merci beaucoup

Sub inverser()
ActiveSheet.Range("$A$1:$AM$5000").AutoFilter Field:=5, Criteria1:= _
"=null"
Dim i As Double
i = 1
    Dim k As Integer
    k = 1
        For k = 2 To 5000
             If Rows(k).Hidden = False Then
                i = Cells(4, k).Value
                Cells(4, k).Value = Range(4, k).Value
                Cells(4, k).Value = i
            End If
Next
End Sub

Bonjour Alban, bonjour le forum,

Si tu fitres comme ça :

ActiveSheet.Range("$A$1:$AM$5000").AutoFilter Field:=5, Criteria1:="=null"

Toutes les cellules de la colonne 5 (pas 6) valent "null", il me semble...

Ensuite, tu inverses ligne et colonne. Le code corrigé :

Sub inverser()
Dim i As Double
Dim k As Integer

ActiveSheet.Range("$A$1:$AM$5000").AutoFilter Field:=6, Criteria1:="=null"
For k = 2 To 5000
    If Rows(k).Hidden = False Then
        i = Cells(5, k).Value
        Cells(5, k).Value = Range(7, k).Value
        Cells(7, k).Value = i
    End If
Next
End Sub

Merci, je m'étais décalé d'une colonne c'est sûr que ça allait avoir du mal à marcher ^^'

Le souci c'est que la boucle ne veut pas démarrer, ça me pose une erreur sur cette ligne (y compris avec ta correction) :

i = Cells(4, k).Value

si on peut m'expliquer le pourquoi du comment ^^'

Merci beaucoup

Re,

Quand tu as une erreur il est d'usage d'indiquer le message d'erreur pour qu'on puisse t'aider correctement.

En relisant je vois que moi aussi je me suis mélangé les pinceaux et inversé Ligne / Colonne

Le bon code serait :

Sub inverser()
Dim i As Variant
Dim k As Integer

ActiveSheet.Range("$A$1:$AM$5000").AutoFilter Field:=6, Criteria1:="=null"
For k = 2 To 5000
    If Rows(k).Hidden = False Then
        i = Cells(k, 5).Value
        Cells(k, 5).Value = Range(k, 7).Value
        Cells(k, 7).Value = i
    End If
Next
End Sub

De plus, j'ai remplacé le type de la variable i par Variant (au lieu de Double) ce qui permet un bug si la valeur de la cellule de la boucle est du texte ou une donnée non convertible en Double.

[Édition]

Tu as modifié le premier code !... Tu adapateras...

D'accord, désolé je tâcherai d'être plus explicite pour la suite, merci beaucoup en tout cas ^^

il y avait un dernier problème d'inattention mais c'était juste un range au lieu d'un cells donc j'ai corrigé et ça marche super bien ! merci beaucoup en tout cas :p

Rechercher des sujets similaires à "inversion plage filtre"