Macro pour tableau comparatif : inverser son fonctionnement
Bonjour à tous
J'aurai besoin d'un coup de main pour modifier le fonctionnement de cette macro que nous utilisons au taf.
Son fonctionnement est ULTRA pratique (un truc de dingue) et facile à utiliser.
Explication :
On utilise 1 répertoire pour l'année
contenant autant de répertoire que de semaine dans l'année
contenant à leur tour des fichiers types pour la semaine
en clair :
2016>S01>Fichier_truc1, Fichier_Truc2
2016>S02>Fichier_truc1,, Fichier_Truc2
etc sur 52 semaines
Dans mon fichier de synthèse :
En colonne B, j'utilise mes semaines de l'année en guise de référence,
En colonne C jusqu'à... autant que j'en ai besoin : le lien vers la donnée que je veux.
Puis j'effectue un copier coller des liens de la première semaine sur l'ensemble de l'année
Ensuite je sélectionne la zone concernée puis je lance la macro qui va remplacer "S01" de la ligne S02 par la valeur.. S02 !
Puis S01 sera remplacé par S03 en ligne correspond à la valeur S03 etc
Ce qui permet de faire un tableau comparatif en 2 minutes au lieu de se taper chaque ligne manuellement.
Cela fonctionne parfaitement à condition d'opter pour un tableau dans lequel les semaines sur une seule colonne (ici la B)
J'ai besoin d'inverser son fonctionnement.
J'ai besoin d'étaler mes semaines de la colonne B à Z et d'avoir mes items dans la colonne A.
J'ai tenter de remplacer Rows par Columns et inversement mais ça ne fait rien, ça ne fonctionne pas...
Pouvez-vous m'aider ?
Je pense qu'en plus de me dépanner, cette macro pourra faire beaucoup d'heureux !!!
Je vous remercie par avance de votre aide !
Sub Tableau_comparatif()
'Designation de la valeur a remplacer dans rplct
rplct = "S01"
k = 0
L = 0
PL = Selection.Row
DL = Selection(Selection.Count).Row
PC = Selection.Column
DC = Selection(Selection.Count).Column
For I = PL To DL
For j = PC To DC
'Fonction de rechercher remplacer
'Pour designer la colonne de reference pour le rechercher remplacer il faut modifier le chiffre dans la parenthese (selection.row + k, 1).
'(selection.row + k, 2) = Ici 2 designe la colonne B
ActiveSheet.Cells(PL + k, PC + L).Replace What:=rplct, Replacement:=Cells(Selection.Row + k, 2).Value, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
L = L + 1
Next
L = 0
k = k + 1
Next
'Message affiché à la fin de la macro
MsgBox "Opération terminée"
End Sub
Bonjour
Un question
Tu sélectionnes quoi , les colonnes (les semaines) ou les lignes (liens) ?
Donne un exemple de ce que tu vas sélectionner
Voici le guide ! Ce sera plus simple et limpide pour comprendre le fonctionnement actuel !
1 - Création du lien qui sera ensuite réutilisé pour toute l'année
2 - Copier/coller du lien sur les semaines suivantes
3 - Sélection de la zone que l'on veut faire modifier
4 - Application et résultat de la macro
Le problème est dans ce cas de conception de tableau
Les lignes correspondent aux items
les colonnes aux semaines
c'est là que ça coince.
Bonsoir
Pour avancer il faut répondre à la question
Banzai64 a écrit :Tu sélectionnes quoi , les colonnes (les semaines) ou les lignes (liens) ?
Donne un exemple de ce que tu vas sélectionner
Sinon on fait une macro qui balaie toutes les colonnes de C à Z et qui remplace
Je me suis inspiré de ton image pour faire la macro
Sub Tableau_comparatif()
Dim Nblg As Long
Nblg = Range("B" & Rows.Count).End(xlUp).Row
For colonne = 3 To 26 ' de C à Z
Range(Cells(2, colonne), Cells(Nblg, colonne)).Replace What:="S01", Replacement:=Cells(1, colonne).Value, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Next colonne
'Message affiché à la fin de la macro
MsgBox "Opération terminée"
End Sub
Voici la zone de selection dont j'ai besoin :
Le plus simple est que ce soit la zone de sélection (parceque cela dépend vraiment des fichiers sur lequel je tombe).
j'ai testé la macro que tu viens de poster, elle me donne le même résultat lorsque je testais les modifications que j'opérais sur la macro de mon côté :
Elle a carrément supprimé la notion de "S01" au lieu de la remplacer par la valeur présente dans la ligne 4 !
Bonsoir
C'est vrai j'ai loupé la ligne
Un fichier dès le départ aurait éviter ces problèmes
Sub Tableau_comparatif()
Dim Nblg As Long
Nblg = Range("B" & Rows.Count).End(xlUp).Row
For colonne = 3 To 26 ' de C à Z
Range(Cells(5, colonne), Cells(Nblg, colonne)).Replace _
What:="S01", Replacement:=Cells(4, colonne).Value, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Next colonne
'Message affiché à la fin de la macro
MsgBox "Opération terminée"
End Sub
Le fichier... bordel c'est tout à fait vrai, ça ne m'est même pas venu à l'esprit, le boulet...
Ta macro fonctionne parfaitement !!!! C'est excellent, le gain de temps, tu n'imagines même pas !
Un énorme merci pour ce gigantesque coup de main, vraiment c'est top !!!!
Et tu as gardé la zone de sélection, ce qui est excellent ! Tu fais un heureux ce soir !