Modification de ma macro

bonjour a tous étant nouveau en excel et connaissant pas du tout les VBA

j'ai trouver une ligne de code qui peux correspondre a mes attentes:

je les modifier en partie, mais des chose je n'arrive pas a modifier d’où une aide.

Sub testcpd()

' wsd = référence de la feuille pointage

Set wsd = Worksheets("pointage")

'dld dernière ligne de la feuille pointage sur base de la colonne A

dld = wsd.Range("G" & Rows.Count).End(xlUp).Row

-ce que je voudrais(cette ligne marche quand meme mais à la base ces sur une base de 7 ligne :G17 à G25)

' wsc référence de la feuille resultat

Set wsc = Worksheets("resultat")

' on recherche dans les colonnes de a à d, la date qui se trouve en G17 sur wsd, on met le résultat dans un range nommé re

Set re = wsc.Range("a:d").Find(wsd.Range("G17"), lookat:=xlWhole)

' si re n'est pas vide = on trouvé

If Not re Is Nothing Then

' on copie la cellule K17

wsd.Range("K17").Copy

' à partir de la cellule en ligne 7 dans la colonne dans laquelle on a trouvé la date

wsc.Cells(7, re.Column).PasteSpecial Paste:=xlValues

-(j aimerais ici)(la valeur trouver ici se colle a la case tout de suite a droite de la date qui correspond)(actuellement en colonne la )

wsd.Range("Q17").Copy

wsc.Cells(8, re.Column).PasteSpecial Paste:=xlValues

-(j aimerais ici)(la valeur trouver ici se colle a la case tout de suite a droite de la valeur du dessus)

End If

End Sub

Bonjour westcoast320, le forum,

Pourquoi le faire avec macro alors qu'une formule ferait l'affaire ?

A tester via formule...

Cordialement,

Bonjour je regarder sur pc quand je rentre mais a la base je prend pas de formule car la ou je rempli quand je change de semaine du coup j efface les résultats donc sa devrais effacer sur le 2em tableau aussi

Bonjour westcoast320,

quand je change de semaine du coup j efface les résultats

Un essai par macro....

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim ws1 As Worksheet, ws2 As Worksheet
 Dim i As Long, j As Long, dl As Long

Application.ScreenUpdating = False

Set ws1 = Sheets("pointage")
Set ws2 = Sheets("resultat voulu")

dl = ws2.Range("B" & Rows.Count).End(xlUp).Row

If Not Application.Intersect(Target, ws1.Range("G17:Q23")) Is Nothing Then
 For i = 6 To dl
  For j = 17 To 23
   If ws2.Range("B" & i) Like ws1.Range("G" & j) Then
    ws2.Range("C" & i) = ws1.Range("K" & j)
    ws2.Range("D" & i) = ws1.Range("Q" & j)
   End If
  Next j
 Next i
End If

If Not Application.Intersect(Target, ws1.Range("M13")) Is Nothing Then ws1.Range("K17:P23").ClearContents

 Application.ScreenUpdating = True
End Sub

A chaque modification sur la feuille "pointage" , la macro s'exécute.

Cordialement,

Re,

Si tu préfères lancer la macro par un bouton....

Cordialement,

bonjour

merci pour ces idée la 3em me plait bien,mais pour incorporer dans mon dossier de base j aurais besoin d’explication de chaque ligne pour pouvoir la modifier si ces possible.

ce code marche si les mois se suive en colonne ?

Re,

merci pour ces idée la 3em me plait bien

Celle avec le bouton ?

j aurais besoin d’explication de chaque ligne

Je ne suis pas très doué pour les explications, mais je vais essayer.

ce code marche si les mois se suive en colonne ?

Non, il faut adapter.

Un nouvel essai.....il y a certainement moyen de faire plus simple,

Cordialement,

merci beaucoup a toi tu ma beaucoup aider

je connais pas beaucoup les codes et je bloquais sur sa.

je vais tenter de faire un code sur bouton pour effacer des cellule quand je change année ^^ on va voir si j arrive a avoir du talent ^^

Re,

Ravi d'avoir pu t'aider,

je vais tenter de faire un code sur bouton pour effacer des cellule quand je change année ^^ on va voir si j arrive a avoir du talent ^^

Bon courage,

Spoiler

Au plus simple:

Sub Bouton1_Cliquer()
 With Sheets("resultat voulu")
   If MsgBox("Etes-vous certain de supprimer les données de la feuille resultat voulu ?", vbYesNo, "Demande de confirmation") = vbYes Then
    .Range("B6:C36,E6:F36,H6:I36,K6:L36,N6:O36,Q6:R36,T6:U36,W6:X36,Z6:AA36,AC6:AD36,AF6:AG36,AI6:AJ36").ClearContents
     MsgBox "Les données ont été effacées"
   End If
 End With
End Sub

Cordialement,

après je t'est pas dis je vais copier sur le code que tu me mis ^^ donc a demis essayer mdr

re bonjour j'ai modifier un truc mais je colle sur cette parti

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim ws1 As Worksheet
  Set ws1 = Sheets("pointage semaine")
   If Not Application.Intersect(Target, ws1.Range("O13")) Is Nothing Then ws1.Range("K17:P23").ClearContents

End Sub
tu ma donner se code et je voudrais que se code efface en plus les cellules "S17:S23" j arrive pas a savoir comment le mettre car je vaus pas efface les cellules "Q17:R23"

ps regarde la modification que j'ai fait je t'est encore copier j'espere tu m en veux pas

Private Sub CommandButton1_Click()
  Dim ws1 As Worksheet, ws2 As Worksheet   'déclaration des variables feuilles
 Dim i As Long, j As Long, dl As Long     'déclaration des variables lignes
 Dim x As Long                            'déclaration de la variable colonne

Application.ScreenUpdating = False        'évite le rafraichissement de l'écran à chaque tour de boucle

Set ws1 = Sheets("pointage semaine")              'définit la feuille ws1
Set ws2 = Sheets("pointage")        'définit la feuille ws2

dl = ws2.Range("A" & Rows.Count).End(xlUp).Row   'définit la dernière ligne utilisée de la feuille ws2 en colonne A

 For i = 9 To dl                          'boucle de la ligne 9 à la dernière ligne utilisée (feuille ws2)
  For j = 17 To 23                        'boucle de la ligne 17 à la ligne 23 (feuille ws1)
   For x = 1 To 39                        'boucle de la colonne 1 à la colonne 39 (feuille ws2 de A à AM)
       If ws2.Cells(i, x) Like ws1.Range("G" & j) Then  'si la date de la feuille ws2 correspond à la date de la feuille ws1
          ws2.Cells(i, x + 1) = ws1.Range("K" & j)      'le type de ws2 = type de ws1 (+1 car on se décale vers la droite)
          ws2.Cells(i, x + 2) = ws1.Range("Q" & j)       'le NB.H de ws2 = NB.H de ws1 (+2 car on se décale vers la droite)
       End If                             'fin de la condition
   Next x                                 'fin de la boucle sur les colonnes de ws2
  Next j                                  'fin de la boucle sur les lignes de ws1
 Next i                                   'fin de la boucle des lignes de ws2

 Application.ScreenUpdating = True        'on réactive le rafraichissement de l'écran
End Sub

Private Sub CommandButton2_Click()
  Dim ws1 As Worksheet, ws3 As Worksheet   'déclaration des variables feuilles
 Dim l As Long, j As Long, dk As Long     'déclaration des variables lignes
 Dim y As Long                            'déclaration de la variable colonne

Application.ScreenUpdating = False        'évite le rafraichissement de l'écran à chaque tour de boucle

Set ws1 = Sheets("pointage semaine")              'définit la feuille ws1
Set ws3 = Sheets("annualisation")                  'définit la feuille ws2

dk = ws3.Range("A" & Rows.Count).End(xlUp).Row   'définit la dernière ligne utilisée de la feuille ws3 en colonne A

For l = 9 To dk                          'boucle de la ligne 9 à la dernière ligne utilisée (feuille ws3)
  For j = 17 To 23                        'boucle de la ligne 17 à la ligne 23 (feuille ws1)
   For y = 1 To 39                        'boucle de la colonne 1 à la colonne 39 (feuille ws3 de A à AM)
          If ws3.Cells(l, y) Like ws1.Range("G" & j) Then  'si la date de la feuille ws3 correspond à la date de la feuille ws1
          ws3.Cells(l, y + 2) = ws1.Range("S" & j)       'le ANNU de ws3 = ANNU de ws1 (+2 car on se décale vers la droite)
       End If                             'fin de la condition
          Next y                                 'fin de la boucle sur les colonnes de ws3
  Next j                                  'fin de la boucle sur les lignes de ws1
 Next l                                   'fin de la boucle des lignes de ws3

 Application.ScreenUpdating = True        'on réactive le rafraichissement de l'écran
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim ws1 As Worksheet
  Set ws1 = Sheets("pointage semaine")
   If Not Application.Intersect(Target, ws1.Range("O13")) Is Nothing Then ws1.Range("K17:P23").ClearContents

End Sub

j'ai hesiter a laisser sur la meme bouton on verra si je change ou pas sans me planter mdr

Bonjour westcoast320, le forum,

je voudrais que se code efface en plus les cellules "S17:S23" j arrive pas a savoir comment le mettre car je vaus pas efface les cellules "Q17:R23"

If Not Application.Intersect(Target, ws1.Range("M13")) Is Nothing Then ws1.Range("K17:P23,S17:S23").ClearContents 'à chaque changement du n° de semaine, on vide le tableau

Cordialement,

PS: pour plus de clarté, n'hésite pas à mettre les codes sous balises pour une meilleure compréhension,

(5ème bouton : </> )

For i = 9 To dl                          'boucle de la ligne 9 à la dernière ligne utilisée (feuille ws2)
  For j = 17 To 23                        'boucle de la ligne 17 à la ligne 23 (feuille ws1)
   For x = 1 To 39                        'boucle de la colonne 1 à la colonne 39 (feuille ws2 de A à AM)
       If ws2.Cells(i, x) Like ws1.Range("G" & j) Then  'si la date de la feuille ws2 correspond à la date de la feuille ws1
          ws2.Cells(i, x + 1) = ws1.Range("K" & j)      'le type de ws2 = type de ws1 (+1 car on se décale vers la droite)
          ws2.Cells(i, x + 2) = ws1.Range("Q" & j)       'le NB.H de ws2 = NB.H de ws1 (+2 car on se décale vers la droite)

question pour toi les lettre i j x comment elle font pour être défini sur leur page précise?

Bonjour westcoast320, le forum,

je voudrais que se code efface en plus les cellules "S17:S23" j arrive pas a savoir comment le mettre car je vaus pas efface les cellules "Q17:R23"

If Not Application.Intersect(Target, ws1.Range("M13")) Is Nothing Then ws1.Range("K17:P23,S17:S23").ClearContents 'à chaque changement du n° de semaine, on vide le tableau

Cordialement,

PS: pour plus de clarté, n'hésite pas à mettre les codes sous balises pour une meilleure compréhension,

(5ème bouton : </> )

juste sa la loose j'ai essayer plein de truc mais pa sa

autant pour moi j'ai mal ecris desoler

Re,

Il faut que tu apprennes à maitriser les boucles, regarde ici:

https://www.excel-pratique.com/fr/vba/boucles.php

J'ai utilisé 3 boucles For...

For i = 6 To dl                          'boucle de la ligne 6 à la dernière ligne utilisée (feuille ws2)
  For j = 17 To 23                        'boucle de la ligne 17 à la ligne 23 (feuille ws1)
   For x = 1 To 36                        'boucle de la colonne 1 à la colonne 36 (feuille ws2 de A à AM)
       If ws2.Cells(i, x) Like ws1.Range("G" & j) Then  'si la date de la feuille ws2 correspond à la date de la feuille ws1
          ws2.Cells(i, x + 1) = ws1.Range("K" & j)      'le type de ws2 = type de ws1 (+1 car on se décale vers la droite)
          ws2.Cells(i, x + 2) = ws1.Range("Q" & j)       'le NB.H de ws2 = NB.H de ws1 (+2 car on se décale vers la droite)

Au premier tour de boucle i , i=6 ; j=17 ; x=1

If ws2.Cells(i, x) Like ws1.Range("G" & j) then

--->
  If ws2.Cells(6, 1) Like ws1.Range("G17") then  'ws2.cells(6,1)=A1 

ws2.Cells(i, x + 1) = ws1.Range("K" & j)

--->
ws2.Cells(6, 2) = ws1.Range("K17" ) 'ws2.cells(6,2)=B1

ws2.Cells(i, x + 2) = ws1.Range("Q" & j)

--->
ws2.Cells(6, 3) = ws1.Range("Q17" ) 'ws2.cells(6,3) = C1

Cordialement,

Bonjour,

Je souhaiterait savoir si vous aurait la possibilité de m'aider a modifier une macro, un tableau excel que j'ai modifier pour un concours de pétanque ?

Cordialement,

Pimpom69

Rechercher des sujets similaires à "modification macro"