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

31probleme-macro.xlsm (18.29 Ko)

Bonjour

Un essai rapide à tester

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 Sub

Bonjour

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 Sub

Mais 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 Sub

bonjour !

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 !

Rechercher des sujets similaires à "macro position relative"