Ecrire avec décalage d'une colonne, une ligne sur 2

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

anber

XLDnaute Occasionnel
Bonjour,

Je recherche comment obtenir en vba le résultat suivant : décalage d'une colonne, une ligne sur 2 (résultat de la concatenation des colonnes ABCDE)

ch 135 66 2200 4 ch1356622004
ch 135 66 2200 5 ch1356622005
ch 135 66 2200 6 ch1356622006
ch 135 66 2200 7 ch1356622007
ch 135 66 2200 8 ch1356622008
ch 135 66 2200 9 ch1356622009
ch 135 66 2200 10 ch13566220010
ch 135 66 2200 11 ch13566220011
ch 135 66 2200 12 ch13566220012
ch 135 66 2200 13 ch13566220013

Merci
 

Pièces jointes

Re : Ecrire avec décalage d'une colonne, une ligne sur 2

Bonjour anber,

Formule en G2 à tirer sur H2 puis vers le bas :

Code:
=SI(MOD(LIGNE();2)=MOD(COLONNE();2);"";A2&B2&C2&D2&E2)

Edit : plus simple, et il fallait mettre des $ :

Code:
=SI(MOD(LIGNE()-COLONNE();2);$A2&$B2&$C2&$D2&$E2;"")

A+
 
Dernière édition:
Re : Ecrire avec décalage d'une colonne, une ligne sur 2

Bonjour,

Essayez cette macro

Code:
Sub aa()
Dim var
Dim i&
Dim j&
Dim A$
Dim T()
var = [a1].CurrentRegion
ReDim T(1 To UBound(var, 1), 1 To 2)
For i& = 2 To UBound(var, 1)
  A$ = ""
  For j& = 1 To 5
    A$ = A$ & var(i&, j&)
  Next j&
  If i& Mod 2 = 0 Then
    T(i&, 1) = A$
  Else
    T(i&, 2) = A$
  End If
Next i&
Range("g1:h" & UBound(var, 1) & "") = T
End Sub

Cordialement.

PMO
Patrick Morange
 
Re : Ecrire avec décalage d'une colonne, une ligne sur 2

Bonjour anber,

un essai

VB:
Sub test()
Dim i As Long
    For i = 2 To Range("A65536").End(xlUp).Row
        Cells(i, 7 + i Mod 2).Value = Cells(i, 1).Value & Cells(i, 2).Value & Cells(i, 3).Value & Cells(i, 4).Value & Cells(i, 5).Value
    Next i
End Sub
Edit : Bonjour job 😉, Bonjour PMO2
 
Re : Ecrire avec décalage d'une colonne, une ligne sur 2

Bonjour

un essai
VB:
Sub test()
Dim nb_lig As Long, lig As Long, decal As Long, col As Long
  nb_lig = UBound(ActiveSheet.UsedRange.Value, 1)
  For lig = 2 To nb_lig
    With ActiveSheet.Cells(lig, 7 + decal)
      .Value = ActiveSheet.Cells(lig, 1).Value
      For col = 2 To 5
        .Value = .Value + CStr(ActiveSheet.Cells(lig, col).Value)
      Next col
    End With
    If decal = 1 Then decal = 0 Else decal = 1
  Next lig
End Sub

Note Bonjour tout le monde
je n'avais pas vos réponses...
 
Re : Ecrire avec décalage d'une colonne, une ligne sur 2

Bonjour, salut les autres (pas vu !)

Solution par formule
En G2 : =SI(MOD(LIGNE();2)=MOD(COLONNE();2);"";$A2&$B2&$C2&$D2&$E2)
à copier vers le bas et vers la droite.

En enregistrant cette formule sous ta macro, tu obtiendras le résultat souhaité.

Edition :
Job : en mettant des $ devant les lettres des colonnes cela semble mieux fonctionner lors de la copie vers la droite.
 
Dernière édition:
Re : Ecrire avec décalage d'une colonne, une ligne sur 2

Re,

Comme il faut du VBA, utiliser cette macro :

Code:
Sub Concatener()
Dim plage As Range
Set plage = Range("G2:H" & Range("A65536").End(xlUp).Row)
plage.Formula = "=IF(MOD(ROW()-COLUMN(),2),$A2&$B2&$C2&$D2&$E2,"""")"
plage = plage.Value
End Sub

Elle entre la formule puis ne garde que les valeurs.

A+
 
Re : Ecrire avec décalage d'une colonne, une ligne sur 2

Bonjour job75, hoerwind,tbft,tototiti2008,PMO2

Merci pour vos réponses, qui m'ont bien aiguillées

tototiti2008 : ce qui me manquait c'était l'écriture de la boucle avec Mod : Cells(i, 7 + i Mod 2).

Encore merci
 
Dernière édition:
- 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

  • Question Question
XL pour MAC Calcul de notes.
Réponses
5
Affichages
813
Réponses
3
Affichages
442
Retour