macro pour copier des données ...

C

Christian

Guest
Bonjour à tout le forum,

J'aimerais avoir de l'aide pour l'écriture d'une macro permettant de placer des données à un endroit indiqué....
fichier joint + clair

Je vous remercie, par avance, pour l'aide que vous voudrez bien
m'accorder.

Bien amicalement

Christian [file name=macrocopier.zip size=6213]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/macrocopier.zip[/file]
 

Pièces jointes

  • macrocopier.zip
    6.1 KB · Affichages: 13
  • macrocopier.zip
    6.1 KB · Affichages: 15
  • macrocopier.zip
    6.1 KB · Affichages: 15

Charly2

Nous a quittés en 2006
Repose en paix
Bonsoir Christian, bonsoir le forum,

Une petite explication de texte (en fait, des précisions quoi !) :

Tu écris : Je souhaiterais une macro qui copie le Nom (colonne I) et les 4 données (de la colonne AF) en fonction du N° indiqué par la cellule AB20…

Puis, dans ton exemple, pour le n° 6, tu copies et concatènes les cellules AF5 à AF8, soit !

Ma question : Sont-ce toujours ces mêmes cellules (non précisé dans ton explication) qu'il faut copier, ou doit-on se fier à la colonne AD pour trouver les bonnes lignes à copier ?

Amicalement
Charly
 
B

bebere

Guest
bonsoir Christian?Charly

j'ai supposé que...

Sub Mot()
Dim Plg1, C As Byte, Mot As String
Plg1 = Range('I21:L35')
C = Range('AB20').Value
'le nom
For l = 1 To UBound(Plg1, 1)
If Plg1(l, 4) = C Then Mot = Plg1(l, 1)
If Plg1(l, 4) = C Then Exit For
Next l
'les jours
Plg1 = Range('AD5:AF46')
For l = 1 To UBound(Plg1, 1)
If Plg1(l, 1) = C Then Mot = Mot & '/' & Plg1(l, 3)
If Plg1(l, 1) = '' And Plg1(l, 3) <> '' Then Mot = Mot & '/' & Plg1(l, 3)
If IsNumeric(Plg1(l, 1)) And Plg1(l, 1) > C Then Exit For
Next l
Range('AB' & 20 + C).Value = Mot
End Sub

à bientôt
 
C

Christian

Guest
Bonsoir à tout le forum,

Merci Bébère,

C'est exactement ce que je veux, il y a simplement le fait que ta macro ne place trois 'jours' sur les quatres (le premier 'jour' n'est pas copié, en l'occurence le 'dimanche impair en AF5.

Dans l'attente de te relire, encore merci à vous deux,

Bien amicalement
Christian
 

Charly2

Nous a quittés en 2006
Repose en paix
Re bonsoir Christian, bonsoir bebere,

bebere, j'ai juste 2 remarques à faire :

1) il vaut mieux éviter de donner à une variable locale le même nom que la procédure

2) Tu codes pour aller chercher des infos que tu as déjà.

Sinon, j'avais compris la demande comme toi, mais je l'aurais codé différemment :

Code:
Sub Mot2()
'
Dim C As Byte
Dim Numero As Byte
Dim Termine As Boolean
Dim CelluleTrouvee As Range
Dim StrResultat As String
'
  If Not IsEmpty(Range('O14').Value) Then
    C = Range('AB20').Value
    StrResultat = Range('O14').Value & ' : '
    Range('AD:AD').Select
    Set CelluleTrouvee = Selection.Find(what:=C, LookIn:=xlValues)
    If Not CelluleTrouvee Is Nothing Then
      i = 0
      Termine = False
      Numero = CelluleTrouvee.Offset(i, 0).Value
      Do
        If i = 0 Then
          StrResultat = StrResultat & CelluleTrouvee.Offset(i, 2).Value
        Else
          StrResultat = StrResultat & ' / ' & CelluleTrouvee.Offset(i, 2).Value
        End If
        i = i + 1
        If IsNumeric(CelluleTrouvee.Offset(i, 0).Value) Then
          Numero = CelluleTrouvee.Offset(i, 0).Value
          If Numero <> C Then Termine = True
        ElseIf CelluleTrouvee.Offset(i, 2).Value = '' Then
          Termine = True
        End If
      Loop Until Termine
    End If
    Range('AB20').Offset(C, 0).Select
    Selection.Value = StrResultat
  End If
End Sub

Voili, voilà ! ;)

Amicalement
Charly
 
C

Christian

Guest
Bonjour à tout le forum et bon WE,

Merci Charly2 pour ton travail.

la macro plante sur 'Dim Termine As Boole an' avec le message : Erreur de compilation Erreur de syntaxe'.

Que faut-il corriger?

Dand l'attente de te relire, je vous remercie Bébère et Charly2 pour le temps que vous m'avez gentillement accordé.

Bien amicalement,
Christian
 

Charly2

Nous a quittés en 2006
Repose en paix
Salut Christian :)

Beau temps, hein ? D'où je suis, je vois le lever de soleil ;)

Sinon, pour l'erreur de syntaxe, elle est normale si tu as simplement copié le code (des espaces s'y insèrent sans qu'on en soit responsables).

Il faut mettre : Dim Termine As Boolean.

Bon dimanche.
Charly
 
C

Christian

Guest
reBonjour à tout le forum,
Bonjour Charly2,

Message reçu, j'ai corrigé suivant tes indications
Mais ça ne place que le nom et pas les quatres 'dates' de AF5 à AF8?
Merci pour ta réponse

Sub Mot2()
'
Dim C As Byte
Dim Numero As Byte
Dim Termine As Boolean
Dim CelluleTrouvee As Range
Dim StrResultat As String
'
If Not IsEmpty(Range('O14').Value) Then
C = Range('AB20').Value
StrResultat = Range('O14').Value & ' : '
Range('AD:AD').Select
Set CelluleTrouvee = Selection.Find(what:=C, LookIn:=xlValues)
If Not CelluleTrouvee Is Nothing Then
i = 0
Termine = False
Numero = CelluleTrouvee.Offset(i, 0).Value
Do
If i = 0 Then
StrResultat = StrResultat & CelluleTrouvee.Offset(i, 2).Value
Else
StrResultat = StrResultat & ' / ' & CelluleTrouvee.Offset(i, 2).Value
End If
i = i + 1
If IsNumeric(CelluleTrouvee.Offset(i, 0).Value) Then
Numero = CelluleTrouvee.Offset(i, 0).Value
If Numero <> C Then Termine = True
ElseIf CelluleTrouvee.Offset(i, 2).Value = '' Then
Termine = True
End If
Loop Until Termine
End If
Range('AB20').Offset(C, 0).Select
Selection.Value = StrResultat
End If
End Sub



Bien amicalement
Christian
 

Charly2

Nous a quittés en 2006
Repose en paix
Re :)

Effectivement, ça ne place les données de AF5 à AF8 que pour Christian 1.

C'est la question que je te posais en début de fil :
Les données de la colonne AF sont elles fonction du n° en AB20 que l'on devrait retrouver dans la colonne AD.

Je t'explique les opérations effectuées par le code :

si la cellule O14 n'est pas vide (c'est le nom)
on va cherche le n° dans AB20
on initialise la chaîne de caractères StrResultat
puis, dans la colonne AD, on va chercher si un numéro correspond à AB20
si oui, on prend les données de la colonne AF à partir de cette ligne
et pour les lignes suivantes
jusqu'au moment où soit (AD non vide et <> AB20) soit AF vide

StrResultat est ajustée durant cette recherche.

Si tu ne souhaites que les cellules AF5 à AF8 quelque soit le nom, tu modifies le code ainsi :

Sub Mot2()
'
Dim C As Byte
Dim Numero As Byte
Dim Termine As Boolean
Dim CelluleTrouvee As Range
Dim StrResultat As String
'
If Not IsEmpty(Range('O14').Value) Then
StrResultat = Range('O14').Value & ' : '
Range('AF5').Select
StrResultat = StrResultat & Selection.Value
For i = 1 To 3
StrResultat = StrResultat & ' / ' & Selection.Offset(i, 0).Value
Next i
Range('AB20').Offset(C, 0).Select
Selection.Value = StrResultat
End If
End Sub

Voilà, mais ça te donnera toujours les cellules AF5 à AF8... à toi de voir ;)

Amicalement
Charly
 

Charly2

Nous a quittés en 2006
Repose en paix
Bonjour bebere, bonjour à toutes et à tous,

Eh oui ! Et moi, je fais des erreurs dans le code en recopiant et supprimant des lignes...

Rectification :

Sub Mot2()
'
Dim StrResultat As String
'
If Not IsEmpty(Range('O14').Value) Then
StrResultat = Range('O14').Value & ' : '
Range('AF5').Select
StrResultat = StrResultat & Selection.Value
For i = 1 To 3
StrResultat = StrResultat & ' / ' & Selection.Offset(i, 0).Value
Next i
Range('AB20').Offset(Range('AB20').Value, 0).Select
Selection.Value = StrResultat
End If
End Sub

A+
Charly
 

Discussions similaires

Statistiques des forums

Discussions
313 344
Messages
2 097 337
Membres
106 916
dernier inscrit
Soltani mohamed