Nota.
Si un seul classeur est ouvert, le rattachement au classeur n'est plus nécessaire.
Cela dit, cette précaution peut être utile pour las suite du projet.
Qu'est-ce qui ne fonctionne plus?
Toujours le même message d'erreur?
Nota.
Si un seul classeur est ouvert, le rattachement au classeur n'est plus nécessaire.
Cela dit, cette précaution peut être utile pour las suite du projet.
Qu'est-ce qui ne fonctionne plus?
Toujours le même message d'erreur?
Bien Cordialement.
Marcel
Dernier billet:
Suppression des doublons d'un tableau structuré, gestion d'un array
Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.
J'ai réessayé, le code fonctionne et cela copie-colle les commentaire comme convenu.
Cependant, cela prend un temps plus long et je me retrouve toujours avec la même ligne en "Erreur d'exécution '9'" (voir ci-dessous)
Voulez-vous le fichier ?
Oui.Voulez-vous le fichier ?
Bien Cordialement.
Marcel
Dernier billet:
Suppression des doublons d'un tableau structuré, gestion d'un array
Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.
Voici le fichier.
Fichier Test - RGS 2019.xlsm
Par ailleurs j'ai un autre soucis, le code écrase certain commentaire. Je m'explique.
Le VBA va analyser S01, copier-coller dans S02, et copier-coller dans S03 lorsque les lignes sont égales.
CEPENDANT : si je modifie des données dans S02 et lance la VBA, la macro va me remettre le commentaire de S01 (ce qui est logique puisqu'il analyse les données précédentes).
Il y a t-il une solution afin que le VBA analyse UNIQUEMENT sa feuille précédente ?
Tu adaptes, Antoine.
Et pour ce faire, tu vois la présence d'une feuille Synthèse 2018.
Son nom débute par "S" et les 2 derniers caractères sont numériques.
Elle est donc malencontreusement sélectionnée.
D'où cette modification:
La longueur d'exécution pourrait, à mon humble avis, s'expliquer par les calculs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part If IsNumeric(Right(.Name, 2)) And Len(.Name) = 3 Then
Tu peux donc gérer le mode de calcul.
D'où
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67 Option Explicit Public Sub ajout_comment() Dim wk As Worksheet, wkpréc As Worksheet Dim num As Byte Dim i As Integer, dernvide As Integer Dim j As Integer, dernpréc As Integer Application.Calculation = xlCalculationManual 'Balayage de la feuille S03 à la feuille S52 For Each wk In ThisWorkbook.Worksheets With wk If IsNumeric(Right(.Name, 2)) And Len(.Name) = 3 Then num = Right(.Name, 2) + 0 If (.Name Like "S*" And num > 1) Then Debug.Print .Name dernvide = .Cells(.Rows.Count, 1).End(xlUp).Row 'Définition de la feuille précédente d'où reporter le commentaire Debug.Print "lavaleur de num -1 " & num - 1 Set wkpréc = ThisWorkbook.Worksheets("S" & Format(num - 1, "0#")) Debug.Print "la valeur au format " & Format(num - 1, "0#") With wkpréc dernpréc = .Cells(.Rows.Count, 1).End(xlUp).Row End With 'Balayage de toutes les lignes à compléter For i = 2 To dernvide 'Balayage de toutes les lignes d'où reporter le commentaire éventuel For j = 2 To dernpréc 'Test égalité concaténation - Voir fonction personnalisée ci-dessous. If concat(Worksheets(.Name), i) = concat(wkpréc, j) Then 'Information du commentaire .Cells(i, 16).Value = wkpréc.Cells(j, 16).Value .Cells(i, 17).Value = wkpréc.Cells(j, 17).Value Exit For End If Next j Next i 'libération des variables Worksheet Set wkpréc = Nothing End If End If End With Next wk Application.Calculation = xlCalculationAutomatic End Sub Public Function concat(lawks As Worksheet, laligne As Integer) As String Dim lachaine As String Dim col As Byte 'Initialisation de la chaine de concaténation lachaine = "" 'Concaténation de la colonne A à la colonne O For col = 1 To 15 lachaine = lachaine & lawks.Cells(laligne, col) Next col concat = lachaine End FunctionSi tu souhaites effectuer la procédure sur une seule feuille, alors la gestion peut s'effectuer par InputboxIl y a t-il une solution afin que le VBA analyse UNIQUEMENT sa feuille précédente ?
(éventuellement à adapter)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 Option Explicit Public Sub ajout_comment() Dim wk As Worksheet, wkpréc As Worksheet Dim num As Byte Dim i As Integer, dernvide As Integer Dim j As Integer, dernpréc As Integer Application.Calculation = xlCalculationManual Dim num_mois As Byte num_mois = Application.InputBox( _ Prompt:="Numéro de feuille (mois) dont vous voulez effectuer la modification", _ Title:="Choix du mois", _ Type:=1 _ ) Set wk = ThisWorkbook.Worksheets("S" & Format(num_mois, "0#")) With wk dernvide = .Cells(.Rows.Count, 1).End(xlUp).Row 'Définition de la feuille précédente d'où reporter le commentaire Set wkpréc = ThisWorkbook.Worksheets("S" & Format(num_mois - 1, "0#")) With wkpréc dernpréc = .Cells(.Rows.Count, 1).End(xlUp).Row End With 'Balayage de toutes les lignes à compléter For i = 2 To dernvide 'Balayage de toutes les lignes d'où reporter le commentaire éventuel For j = 2 To dernpréc 'Test égalité concaténation - Voir fonction personnalisée ci-dessous. If concat(Worksheets(.Name), i) = concat(wkpréc, j) Then 'Information du commentaire .Cells(i, 16).Value = wkpréc.Cells(j, 16).Value .Cells(i, 17).Value = wkpréc.Cells(j, 17).Value Exit For End If Next j Next i 'libération des variables Worksheet Set wkpréc = Nothing End With Set wk = Nothing Application.Calculation = xlCalculationAutomatic End Sub
Bien Cordialement.
Marcel
Dernier billet:
Suppression des doublons d'un tableau structuré, gestion d'un array
Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.
Merci Marcel, ça fonctionne pas mal. Je viens de faire des tests et je ne rencontre plus de problème.
Pour le 'Synthèse 2018', ça semblait tellement évident... mais il fallait qu'une personne extérieure me le dise pour tilter rapidement.
En tout cas, merci.
MarcelG,
Je reviens vers vous en cette nouvelle année afin de revoir une partie du code qui me bloque.
Lors de la mise en route de la macro, celle-ci est incapable de faire l'opération "Onglet S03 - Onglet S02". Comme les variables sont en Byte, je comprends qu'il ne prenne pas en compte le zéro des semaines tel quel 'S02'.
Ainsi, cette ligne me revient en erreur :
Dois-je comprends qu'au travers de "0#" seul le dernier chiffre est considéré ? Et comme le zéro ne l'est pas, il compare du vide à du vide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Set wk = ThisWorkbook.Worksheets("S" & Format(num_mois, "0#"))
Je voudrais savoir comment procéder, est-ce que je peux mettre deux fois ## ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part Set wk = ThisWorkbook.Worksheets("S" & Format(num_mois, "##"))
Bonjour Antoine, Bonjour le Forum,
(Désolé pour cette absence. Débordé)
A toi et à l'ensemble du Forum, je souhaite une très belle année 2020, remplie de joies, santé et harmonie.
Il te faut bien noter que la fonction Format retourne une valeur de texte (String)Ainsi, cette ligne me revient en erreur :
Dédoubler le caractère " ne sert à rien. On peut en utiliser 4 si l'on souhaite un séparateur de milliers, ce qui n'est pas le cas ici.
A priori, l'erreur proviendrait de la variable num_mois.
Afin de vérifier sa valeur, pourrais-tu
- afficher la fenêtre des variables locales (Menu "Affichage" de l'éditeur VBE)
- placer un point d'arrêt à la ligne précédente
- lancer l'exécution de la procédure
- constater la valeur de la variable dans la fenêtre ci-dessus mentionnée.
- vérifier l'existence de la feuille de travail
A plus tard.
Bien Cordialement.
Marcel
Dernier billet:
Suppression des doublons d'un tableau structuré, gestion d'un array
Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.
MarcelG,
Ayant mis deux fois le "##", cela fonctionne parfaitement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 Public Sub ajout_comment() Dim wk As Worksheet, wkpréc As Worksheet Dim num As Byte Dim i As Integer, dernvide As Integer Dim j As Integer, dernpréc As Integer Application.Calculation = xlCalculationManual Dim num_mois As Byte num_mois = Application.InputBox( _ Prompt:="Numéro de la semaine générée (Ex: 2 pour S2, 11 pour S11)", _ Title:="Choix du mois", _ Type:=1 _ ) Set wk = ThisWorkbook.Worksheets("S" & Format(num_mois, "##"))
Concernant la valeur, celle-ci est un chiffre.
Antoine,
Je n'ai pas repris l'intégralité de la discussion.
A priori, les feuilles de ton classeur étaient nommées S02, S12....
D'où les codes proposés.
Ceci dit, je doute que, ne serait-ce que par exercice, tu aies suivi mes indications.
Cela étant, malgré tout, puis-je te demander de tester le simple #.
Ceci par cette simple procédure
Code : Sélectionner tout - Visualiser dans une fenêtre à part Set wk = ThisWorkbook.Worksheets("S" & Format(num_mois, "#"))
C'est bien beau de se satisfaire d'un "çà marche".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Option Explicit Public Sub essai_sem() Dim num_mois As Byte num_mois = 2 MsgBox _ Prompt:=(Format(num_mois, "##") = Format(num_mois, "#")), _ Buttons:=vbInformation, _ Title:="Test" End Sub
Encore faut-il prendre un peu de hauteur pour connaître les tenants et aboutissants du code que l'on rédige.
C'est, à mon modeste avis, un moyen de progresser, donc un investissement.
Bien Cordialement.
Marcel
Dernier billet:
Suppression des doublons d'un tableau structuré, gestion d'un array
Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.
Bonjour,
Je me permets de venir vers vous ce jour pour faire suite au dossier d'Antoine.
En effet, je viens de rejoindre l'entreprise qu'Antoine a quitté il y a peu en tant qu'alternant.
Des modifications de dossiers ont eu lieu, et les différents classeurs Excel ont "bougé".
Avec mon peu d'expérience en VBA, j'ai tant bien que mal réussi à remettre l'ensemble du processus sur pieds.
Sauf la copie automatique des lignes de commentaires qui étaient présent la semaine passée..
Je retrouve le même problème qu'Antoine " Erreur d'exécution '9' ".
Après plusieurs manipulation l'erreur n'apparait plus mais les commentaires ne remontent pas..
Merci d'avance pour votre aide !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager