Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Offset d'une colonne VBA

  • Initiateur de la discussion Initiateur de la discussion XkevinX
  • 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 !

X

XkevinX

Guest
Bonjour,

Alors voilà, je souhaite décaler ma colonne B d'une ligne pour la feuille Recap.
Je désire le faire de la ligne 3 à la ligne x, x désignant la dernière ligne non vide.

J'ai essayé ce code :

Code:
Sub Decalage()
Dim ligne As Integer, n As Integer
Dim Sh As Worksheet

If Sh.Name = "Recap" Then
ligne = 3
col = Array("B")
For m = LBound(col) To UBound(col)
 For n = 3 To Sh.Range(col(m) & "65536").End(xlUp).Row
  If IsDate(Sh.Range(col(m) & n)) And Sh.Range(col(m) & n) <> 0 Then
   If Range("B" & n).Value <> 0 Then
   Range("B" & n).FormulaLocal = "=DECALER(B" & n & ",1,,)"
Next m
 ligne = ligne + 1
  End If
  End If
   End If
 Next
End Sub

Mais j'ai l'erreur "Next sans For" mais j'ai deux For et deux Next.

Merci.
 
Re : Offset d'une colonne VBA

Bonjour XkevinX

Sans prejuger du resultat ta macro serait plus correcte ainsi:

Code:
Sub Decalage()
Dim ligne As Integer, n As Integer
Dim Sh As Worksheet
If Sh.Name = "Recap" Then
ligne = 3
col = Array("B")
 For m = LBound(col) To UBound(col)
  For n = 3 To Sh.Range(col(m) & "65536").End(xlUp).Row
    If IsDate(Sh.Range(col(m) & n)) And Sh.Range(col(m) & n) <> 0 Then
      If Range("B" & n).Value <> 0 Then
        Range("B" & n).FormulaLocal = "=DECALER(B" & n & ",1,,)"
        ligne = ligne + 1
      End If
    End If
  Next n
 Next m
End If
End Sub
 
Re : Offset d'une colonne VBA

Bonjour,

Merci pierrejean, j'avoue que c'est plus clair et plus lisible.

Je regrette que l'indentation ne soit pas associée à Visual basic Editor comme un bon vieux Visual Studio ^^.

L'erreur a changée; la ligne If Sh.name= "Recap" le gêne. => Erreur 91 Variable Objet ou variable de Bloc With non définie.

Quésako ?
 
Re : Offset d'une colonne VBA

Re,

Oui j'ai compris entre-temps.

Sub Decalage2()
Dim ligne As Integer, n As Integer
Dim Sh As Worksheet
For Each Sh In Sheets
If Sh.Name = "Recap" Then
ligne = 3
col = Array("B")
For m = LBound(col) To UBound(col)
For n = 3 To Sh.Range(col(m) & "65536").End(xlUp).Row
If IsDate(Sh.Range(col(m) & n)) And Sh.Range(col(m) & n) <> 0 Then
If Range("B" & n).Value <> 0 Then
Range("B" & n).FormulaLocal = "=DECALER(B" & n & ",1,,)"
ligne = ligne + 1
End If
End If
Next n
Next m
End If
Next
End Sub


Maintenant, aucunes erreurs mais absolument aucun résultat.
 
Re : Offset d'une colonne VBA

Bonjour,

Je ne comprends pas pourquoi la macro n'exécute pas l'effet escompté.

Pouvez-vous m'aider ?

Sub Decalage2()
Dim ligne As Integer, n As Integer
Dim Sh As Worksheet
For Each Sh In Sheets
If Sh.Name = "Recap" Then
ligne = 3
col = Array("B")
For m = LBound(col) To UBound(col)
For n = 3 To Sh.Range(col(m) & "65536").End(xlUp).Row
If IsDate(Sh.Range(col(m) & n)) And Sh.Range(col(m) & n) <> 0 Then
If Range("B" & n).Value <> 0 Then
Range("B" & n).FormulaLocal = "=DECALER(B" & n - 1 & ";1;😉"
ligne = ligne + 1
End If
End If
Next n
Next m
End If
Next
End Sub


Merci.
 
Re : Offset d'une colonne VBA

Bonjour XkevinX, pierrejean,

Pourrais-tu donner quelques précisions supplémentaires sur ce que tu veux faire?

Simplement décaler toute ta colonne B d'une ligne?
Décaler ta ligne seulement si c'est un date?


VB:
For Each Sh In Sheets
  If Sh.Name = "Recap" Then
  ...
Next

Pourquoi faire un For Each quand thisWorkbook.Sheets("Recap") te renverrait directement ta feuille Recap?

VB:
ligne = 3
col = Array("B")
For m = LBound(col) To UBound(col)
...

Pourquoi créer un tableau pour un seul élément?
Au final, à quoi te sert ta variable ligne?

Voilà les quelques éléments que je n'ai pas compris dans ton code,
Bonne journée,
WUTED
 
Re : Offset d'une colonne VBA

Bonjour,

Merci WUTED.

J'ai une macro qui affiche des résultats dans ma colonne B suivant les feuilles précédent la feuille Recap.

Or, il me faudrait les décaler d'une ligne vers le bas.
La macro s'exécutant bien, la vérification de la date est inutile.

Code:
'With Sheets("Recap") ..... End With

=> sélection de Recap directement

Je crois que j'ai voulu décaler toute la plage de valeurs (qui est variable au passage) dans un premier temps et ensuite ligne par ligne dans le même code ... d'où les incohérences que tu as remarqué.

Ma variable ligne sert à indiquer le début de la plage concernée mais n aussi hum.

Je crée mon tableau pour récupérer toute la plage contenant des valeurs dans la colonne B et ensuite je décale ligne par ligne 😕

Ceci serait mieux :

Code:
Sub Decalage2()
Dim ligne As Integer, n As Integer
Dim Sh As Worksheet
 With Sheets("Recap")
  col = Array("B")
   For m = LBound(col) To UBound(col)
    For n = 3 To Sh.Range(col(m) & "65536").End(xlUp).Row
      If Range("B" & n).Value <> 0 Then
      Range("B" & n).FormulaLocal = "=DECALER(B" & n - 1 & ";1;;)"
      End If
     Next n
   Next m
  End If
 End With
End Sub
 
Re : Offset d'une colonne VBA

Re xKevinx,

VB:
Sub Decalage2()
  With Sheets("Feuil1")
    For n = Range("B65536").End(xlUp).Row To 3 Step -1
      If Range("B" & n).Value <> 0 Then
        Range("B" & n + 1).Value = Range("B" & n).Value
      End If
    Next n
    Range("B3").Value=""
  End With
End Sub

Est-ce que ce code, correspond à ce que tu veux faire?
J'ai enlever ton tableau, je persiste à pas comprendre son utilité..

Bonne journée,
WUTED.
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
4
Affichages
281
Réponses
2
Affichages
257
Réponses
5
Affichages
911
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…