OVH Cloud OVH Cloud

AIDE SUR UN CODE VBA

7 réponses
Avatar
Nicoh
Bonsoir à tous,

Grâce à lSteph (que je remercie encore une fois) j'utilise le code suivant :

Sub repCol()
Dim c As Range, i As Long, cpt As Long
For Each c In [dg17:DG26].Cells
If cpt > 1 Then
If c <> c.Offset(-1, 0) Then cpt = cpt + 1
End If
For i = 1 To c
cpt = cpt + 1
Range("di" & cpt) = c.Offset(0, -1)
If cpt = 65536 Then _
MsgBox "Dépassement, arrêt": Exit Sub
Next i
Next c
End Sub

Il s'agit de recopier un certain nombre fois (chiffre en dg) verticalement
en di les chiffres de la colonne df. Après chaque changement de chiffre il
doit y avoir une cellule vide. Or, la case vide s'insère uniquement quand le
nombre en dg n'est pas 1. Si c'est 1, il n'y a pas de cellule vide au
changement de chiffre.

Par ailleurs, le résultat en di commence à la cellule di1, je souhaite que
le résultat débute en di17 ?

quelqu'un a-t-il une solution à me proposer ?

Merci,

nicoh

7 réponses

Avatar
FxM
Si j'ai bien tout compris ... (Coluche)

@+
FxM


Sub test()
Dim plage As Range, debut As Range, cell As Range
Dim zone As Range, init As Range
Dim comb As Integer, deca As Integer, vide As Integer

Set plage = Range("DG17:DG26")
Set debut = Range("DI17")

For Each cell In plage
If cell <> "" Then
'zone s'étend cellule par cellule sur plage (1 puis 2 puis 3 ..)
Set zone = Range(plage(1).Address & ":" & cell.Address)

'comb = combien de cellules à remplir
comb = cell.Value

'decaler des cellules remplies ...
deca = Application.WorksheetFunction.Sum(zone) - com
'+ les cellules vides
vide = zone.Cells.Count - 1

'cellule initiale pur le nouveau remplissage
Set init = debut.Offset(deca + vide)

'remplir de puis init sur comb cellules
'avec la valeur prise à coté de cell
init.Resize(comb, 1) = cell.Offset(0, -1).Value

End If
Next cell

Set plage = Nothing
Set debut = Nothing
Set zone = Nothing
Set init = Nothing
End Sub




Bonsoir à tous,

Grâce à lSteph (que je remercie encore une fois) j'utilise le code suivant :

Sub repCol()
Dim c As Range, i As Long, cpt As Long
For Each c In [dg17:DG26].Cells
If cpt > 1 Then
If c <> c.Offset(-1, 0) Then cpt = cpt + 1
End If
For i = 1 To c
cpt = cpt + 1
Range("di" & cpt) = c.Offset(0, -1)
If cpt = 65536 Then _
MsgBox "Dépassement, arrêt": Exit Sub
Next i
Next c
End Sub

Il s'agit de recopier un certain nombre fois (chiffre en dg) verticalement
en di les chiffres de la colonne df. Après chaque changement de chiffre il
doit y avoir une cellule vide. Or, la case vide s'insère uniquement quand le
nombre en dg n'est pas 1. Si c'est 1, il n'y a pas de cellule vide au
changement de chiffre.

Par ailleurs, le résultat en di commence à la cellule di1, je souhaite que
le résultat débute en di17 ?

quelqu'un a-t-il une solution à me proposer ?

Merci,

nicoh



Avatar
JB
Bonjour,

ligne = 0
For Each c In [DG17:DG26]
For i = 1 To c
[DI1].Offset(ligne, 0) = c.Offset(0, -1)
ligne = ligne + 1
Next i
ligne = ligne + 1
If ligne > 65000 Then Stop
Next c

Cordialement JB


Bonsoir à tous,

Grâce à lSteph (que je remercie encore une fois) j'utilise le code su ivant :

Sub repCol()
Dim c As Range, i As Long, cpt As Long
For Each c In [dg17:DG26].Cells
If cpt > 1 Then
If c <> c.Offset(-1, 0) Then cpt = cpt + 1
End If
For i = 1 To c
cpt = cpt + 1
Range("di" & cpt) = c.Offset(0, -1)
If cpt = 65536 Then _
MsgBox "Dépassement, arrêt": Exit Sub
Next i
Next c
End Sub

Il s'agit de recopier un certain nombre fois (chiffre en dg) verticalement
en di les chiffres de la colonne df. Après chaque changement de chiffre il
doit y avoir une cellule vide. Or, la case vide s'insère uniquement qua nd le
nombre en dg n'est pas 1. Si c'est 1, il n'y a pas de cellule vide au
changement de chiffre.

Par ailleurs, le résultat en di commence à la cellule di1, je souhait e que
le résultat débute en di17 ?

quelqu'un a-t-il une solution à me proposer ?

Merci,

nicoh


Avatar
JB
+ court:

ligne = 0
For Each c In [DG17:DG26]
Range("DI1").Offset(ligne, 0).Resize(c, 1).Value = c.Offset(0,
-1)
ligne = ligne + c + 1
Next c

JB



Bonsoir à tous,

Grâce à lSteph (que je remercie encore une fois) j'utilise le code su ivant :

Sub repCol()
Dim c As Range, i As Long, cpt As Long
For Each c In [dg17:DG26].Cells
If cpt > 1 Then
If c <> c.Offset(-1, 0) Then cpt = cpt + 1
End If
For i = 1 To c
cpt = cpt + 1
Range("di" & cpt) = c.Offset(0, -1)
If cpt = 65536 Then _
MsgBox "Dépassement, arrêt": Exit Sub
Next i
Next c
End Sub

Il s'agit de recopier un certain nombre fois (chiffre en dg) verticalement
en di les chiffres de la colonne df. Après chaque changement de chiffre il
doit y avoir une cellule vide. Or, la case vide s'insère uniquement qua nd le
nombre en dg n'est pas 1. Si c'est 1, il n'y a pas de cellule vide au
changement de chiffre.

Par ailleurs, le résultat en di commence à la cellule di1, je souhait e que
le résultat débute en di17 ?

quelqu'un a-t-il une solution à me proposer ?

Merci,

nicoh


Avatar
Nicoh
Bonjour JB,

Merci pour ta réponse, j'arrive au résultat escompté.

Par contre, en fin de réalisation de la macro j'ai une erreur qui apparait.
Le message est le suivant :
Erreur d'éxécution '13'
Incompatibilité de type.
Comment éviter ce désagrément ?

Par ailleurs, j'ai affecté un bouton dans ma barre d'outil pour éxécuter la
macro. Je souhaiterais pouvoir aussi effacer la macro si nécessaire. Comment
puis-je faire, sachant que je voudrais affecter un autre bouton pour effacer
la macro ?

Par avance merci

Nicoh


Bonjour,

ligne = 0
For Each c In [DG17:DG26]
For i = 1 To c
[DI1].Offset(ligne, 0) = c.Offset(0, -1)
ligne = ligne + 1
Next i
ligne = ligne + 1
If ligne > 65000 Then Stop
Next c

Cordialement JB


Bonsoir à tous,

Grâce à lSteph (que je remercie encore une fois) j'utilise le code suivant :

Sub repCol()
Dim c As Range, i As Long, cpt As Long
For Each c In [dg17:DG26].Cells
If cpt > 1 Then
If c <> c.Offset(-1, 0) Then cpt = cpt + 1
End If
For i = 1 To c
cpt = cpt + 1
Range("di" & cpt) = c.Offset(0, -1)
If cpt = 65536 Then _
MsgBox "Dépassement, arrêt": Exit Sub
Next i
Next c
End Sub

Il s'agit de recopier un certain nombre fois (chiffre en dg) verticalement
en di les chiffres de la colonne df. Après chaque changement de chiffre il
doit y avoir une cellule vide. Or, la case vide s'insère uniquement quand le
nombre en dg n'est pas 1. Si c'est 1, il n'y a pas de cellule vide au
changement de chiffre.

Par ailleurs, le résultat en di commence à la cellule di1, je souhaite que
le résultat débute en di17 ?

quelqu'un a-t-il une solution à me proposer ?

Merci,

nicoh






Avatar
JB
Bonjour,

Sur mon fichier, je ne vois le pb: http://cjoint.com/?llpqqhvz5A

JB

Bonjour JB,

Merci pour ta réponse, j'arrive au résultat escompté.

Par contre, en fin de réalisation de la macro j'ai une erreur qui appar ait.
Le message est le suivant :
Erreur d'éxécution '13'
Incompatibilité de type.
Comment éviter ce désagrément ?

Par ailleurs, j'ai affecté un bouton dans ma barre d'outil pour éxé cuter la
macro. Je souhaiterais pouvoir aussi effacer la macro si nécessaire. Co mment
puis-je faire, sachant que je voudrais affecter un autre bouton pour effa cer
la macro ?

Par avance merci

Nicoh


Bonjour,

ligne = 0
For Each c In [DG17:DG26]
For i = 1 To c
[DI1].Offset(ligne, 0) = c.Offset(0, -1)
ligne = ligne + 1
Next i
ligne = ligne + 1
If ligne > 65000 Then Stop
Next c

Cordialement JB


Bonsoir à tous,

Grâce à lSteph (que je remercie encore une fois) j'utilise le cod e suivant :

Sub repCol()
Dim c As Range, i As Long, cpt As Long
For Each c In [dg17:DG26].Cells
If cpt > 1 Then
If c <> c.Offset(-1, 0) Then cpt = cpt + 1
End If
For i = 1 To c
cpt = cpt + 1
Range("di" & cpt) = c.Offset(0, -1)
If cpt = 65536 Then _
MsgBox "Dépassement, arrêt": Exit Sub
Next i
Next c
End Sub

Il s'agit de recopier un certain nombre fois (chiffre en dg) vertical ement
en di les chiffres de la colonne df. Après chaque changement de chi ffre il
doit y avoir une cellule vide. Or, la case vide s'insère uniquement quand le
nombre en dg n'est pas 1. Si c'est 1, il n'y a pas de cellule vide au
changement de chiffre.

Par ailleurs, le résultat en di commence à la cellule di1, je sou haite que
le résultat débute en di17 ?

quelqu'un a-t-il une solution à me proposer ?

Merci,

nicoh








Avatar
Nicoh
Comment dois-je faire pour que tu aies accès à mon fichier ?


Bonjour,

Sur mon fichier, je ne vois le pb: http://cjoint.com/?llpqqhvz5A

JB

Bonjour JB,

Merci pour ta réponse, j'arrive au résultat escompté.

Par contre, en fin de réalisation de la macro j'ai une erreur qui apparait.
Le message est le suivant :
Erreur d'éxécution '13'
Incompatibilité de type.
Comment éviter ce désagrément ?

Par ailleurs, j'ai affecté un bouton dans ma barre d'outil pour éxécuter la
macro. Je souhaiterais pouvoir aussi effacer la macro si nécessaire. Comment
puis-je faire, sachant que je voudrais affecter un autre bouton pour effacer
la macro ?

Par avance merci

Nicoh


Bonjour,

ligne = 0
For Each c In [DG17:DG26]
For i = 1 To c
[DI1].Offset(ligne, 0) = c.Offset(0, -1)
ligne = ligne + 1
Next i
ligne = ligne + 1
If ligne > 65000 Then Stop
Next c

Cordialement JB


Bonsoir à tous,

Grâce à lSteph (que je remercie encore une fois) j'utilise le code suivant :

Sub repCol()
Dim c As Range, i As Long, cpt As Long
For Each c In [dg17:DG26].Cells
If cpt > 1 Then
If c <> c.Offset(-1, 0) Then cpt = cpt + 1
End If
For i = 1 To c
cpt = cpt + 1
Range("di" & cpt) = c.Offset(0, -1)
If cpt = 65536 Then _
MsgBox "Dépassement, arrêt": Exit Sub
Next i
Next c
End Sub

Il s'agit de recopier un certain nombre fois (chiffre en dg) verticalement
en di les chiffres de la colonne df. Après chaque changement de chiffre il
doit y avoir une cellule vide. Or, la case vide s'insère uniquement quand le
nombre en dg n'est pas 1. Si c'est 1, il n'y a pas de cellule vide au
changement de chiffre.

Par ailleurs, le résultat en di commence à la cellule di1, je souhaite que
le résultat débute en di17 ?

quelqu'un a-t-il une solution à me proposer ?

Merci,

nicoh












Avatar
JB
Dans options, il y a répondre à l'auteur.

JB

Comment dois-je faire pour que tu aies accès à mon fichier ?


Bonjour,

Sur mon fichier, je ne vois le pb: http://cjoint.com/?llpqqhvz5A

JB

Bonjour JB,

Merci pour ta réponse, j'arrive au résultat escompté.

Par contre, en fin de réalisation de la macro j'ai une erreur qui a pparait.
Le message est le suivant :
Erreur d'éxécution '13'
Incompatibilité de type.
Comment éviter ce désagrément ?

Par ailleurs, j'ai affecté un bouton dans ma barre d'outil pour é xécuter la
macro. Je souhaiterais pouvoir aussi effacer la macro si nécessaire . Comment
puis-je faire, sachant que je voudrais affecter un autre bouton pour effacer
la macro ?

Par avance merci

Nicoh


Bonjour,

ligne = 0
For Each c In [DG17:DG26]
For i = 1 To c
[DI1].Offset(ligne, 0) = c.Offset(0, -1)
ligne = ligne + 1
Next i
ligne = ligne + 1
If ligne > 65000 Then Stop
Next c

Cordialement JB


Bonsoir à tous,

Grâce à lSteph (que je remercie encore une fois) j'utilise le code suivant :

Sub repCol()
Dim c As Range, i As Long, cpt As Long
For Each c In [dg17:DG26].Cells
If cpt > 1 Then
If c <> c.Offset(-1, 0) Then cpt = cpt + 1
End If
For i = 1 To c
cpt = cpt + 1
Range("di" & cpt) = c.Offset(0, -1)
If cpt = 65536 Then _
MsgBox "Dépassement, arrêt": Exit Sub
Next i
Next c
End Sub

Il s'agit de recopier un certain nombre fois (chiffre en dg) vert icalement
en di les chiffres de la colonne df. Après chaque changement de chiffre il
doit y avoir une cellule vide. Or, la case vide s'insère unique ment quand le
nombre en dg n'est pas 1. Si c'est 1, il n'y a pas de cellule vid e au
changement de chiffre.

Par ailleurs, le résultat en di commence à la cellule di1, je souhaite que
le résultat débute en di17 ?

quelqu'un a-t-il une solution à me proposer ?

Merci,

nicoh