Macro position relative
Bonjour à tous,
Je suis complètement bloqué depuis hier avec un bête problème de macro.
Je vous explique un peu. Dans le fichier ci-joint, je dois effectuer une simple opération répétitive : placer les colonnes "sexe" et "âge" à droite de la colonne totale. Je vous ai mis un simple exemple, mais en fait je dois répéter cette opération (avec des données différentes dans chaque tableau) des centaines de fois... d'où la macro.
J'ai déjà fait ce genre de macro sans problème, mais là, pour une raison inconnue, ça beugue tout au début...
Voici ma macro :
Sub Macro10()
'
' Macro10 Macro
'
' Touche de raccourci du clavier: Ctrl+m
'
Range("A2:B9").Select
Range("B9").Activate
Selection.Cut
Range("D2").Select
ActiveSheet.Paste
Range("A12:E19").Select
Range("E19").Activate
Selection.Cut
Range("F2").Select
ActiveSheet.Paste
Rows("11:20").Select
Range("A20").Activate
Selection.Delete Shift:=xlUp
Range("C19").Select
End Sub
(Je commence à la cellule C9 - total 100%).
Et j'utilise bien les positions relatives...
Pourriez-vous m'aider ??
D'avance un GRAND MERCI,
François
bonjour Banzai !
Merci beaucoup ! ça marche super bien.
Mais il faudrait que je puisse l'adapter, car j'ai beaucoup plus de colonnes et de nombreuses lignes. Pourriez-vous éventuellement me dire ce que vous avez fait de spécial par rapport à ce que j'avais fait ?
Un grand merci !
Bonjour,
VBA n'utilise pas les positions relatives.
J'ai adapté ta macro un minimum pour rendre les positions relatives par rapport à la sélection d'une cellule. il faut sélectionnner la case en colonne A juste au dessus du tableau pour que la macro fonctionne (donc A1).
on peut répéter l'exécution de la macro sur toute la feuille en ajoutant une boucle
Sub Macro10()
'
' Macro10 Macro
'
' Touche de raccourci du clavier: Ctrl+m
'
'selection de la A case juste au dessus du tableau pour que la macro fonctionne
If Selection.Count <> 1 Then
MsgBox "vous ne pouvez selectionner qu'une seule cellule pour lancer cette macro"
Exit Sub
ElseIf Selection.Column <> 1 Then
MsgBox " vous devez selectionner une cellule en colonne A pour lancer cette macro"
Exit Sub
End If
While Selection.Range("A2") <> "" ' A2 par rapport à la selection= offset(1,0) même colonne, ligne+1
With Selection
.Range("A2:B9").Select
Selection.Cut
.Range("D2").Select
ActiveSheet.Paste
.Range("A12:E19").Select
Selection.Cut
.Range("F2").Select
ActiveSheet.Paste
.Rows("11:20").EntireRow.Select
Selection.Delete Shift:=xlUp
.Range("A11").Select
End With
Wend
End SubBonjour
Si tous tes tableaux sont disposés de manière identiques, tu n'as rien à faire ( à part indiquer la 1ère ligne de tes tableaux et la 1ère ligne de recopie)
Je n'ai pas trop regardé ta macro
Re-bonjour, et encore merci pour ton aide !
En fait, je souhaiterais comprendre mon erreur, histoire de pouvoir utiliser d'autres macros dans le futur...
J'ai travaillé il y a quelques mois sur exactement ce type de fichier, et je n'ai eu aucun problème à faire de simples macros.
Je ne comprends pas bien Visual Basic et les formules par contre...
Même pour faire une simple macro qui par de la case 100% et colle la colonne "Femme" à droite de la colonne totale, pour ensuite se positionner sur la case 100% du tableau suivant... Je n'y arrive plus !
C'est un problème de position relative, mais je n'arrive pas à le résoudre... Des idées ?
Bonjour
Ta macro n'utilises pas les références relatives, mais uniquement des références absolues
Relative veut dire qu'à partir du position de départ tout les actions se font en rapport de cette position
Si dés le départ tu n'es pas au bon endroit le résultat ne sera pas conforme
Voici un exemple de macro qui utilise les références relatives (assemble les 2 premiers tableaux et supprime les lignes et se positionne sur le début du tableau du groupe suivant)
Il faut se positionner au départ en A2
Sub Macro6()
ActiveCell.Range("A1:B8").Select
Selection.Cut
ActiveCell.Offset(0, 3).Range("A1").Select
ActiveSheet.Paste
ActiveCell.Offset(10, -3).Range("A1:E8").Select
Selection.Cut
ActiveCell.Offset(-10, 5).Range("A1").Select
ActiveSheet.Paste
ActiveCell.Offset(9, 0).Rows("1:10").EntireRow.Select
Selection.Delete Shift:=xlUp
ActiveCell.Offset(1, 0).Range("A1:B1").Select
End SubMais curieusement si l'on relance cette macro elle ne donne pas le même résultat
Obligé de la modifier ??????????
Sub Macro6Rectifié()
ActiveCell.Range("A1:B8").Select
Selection.Cut
ActiveCell.Offset(0, 2).Range("A1").Select
ActiveSheet.Paste
ActiveCell.Offset(10, -3).Range("A1:E8").Select
Selection.Cut
ActiveCell.Offset(-10, 1).Range("A1").Select
ActiveSheet.Paste
ActiveCell.Offset(9, 0).Rows("1:10").EntireRow.Select
Selection.Delete Shift:=xlUp
ActiveCell.Offset(1, 0).Range("A1:B1").Select
End Subbonjour !
Merci pour ton aide. Malheureusement, je ne comprends pas grand chose aux codes... D'habitude quand je fais des macros, j'utilise simplement la fonction "enregistrer".
je voudrais bien comprendre mon problème afin de pouvoir utiliser une macro pour d'autres types de tableaux.
Je vois bien que mon problème est relatif à la fonction position relative. pourtant je clique bien sur cette case...
Merci et bonne journée
Voilà, j'ai enfin réussi à résoudre mon problème.
J'ai dû décortiquer le problème dans sa forme la plus simple.. en fait, ça ne fonctionnait bêtement pas, pcq je sélectionnais les cellules à couper-coller en partant du bas, et pas en partant de la cellule en haut à gauche du groupe de cellule à sélectionner...
je ne me rappelais pas que c'était si sensible :-S
merci en tous cas pour ton aide !