Menu

Aide pour modifier une petite macro

- - Dernière réponse : Fulsten
Messages postés
178
Date d'inscription
samedi 19 mars 2011
Statut
Membre
Dernière intervention
9 juillet 2019
- 9 juil. 2019 à 15:11
Bonjour à tous,

Avec l'aide de Daniel j'ai pu faire quelques petites macro qui m'aide presque au quotidien.

Ces macros m'aident à faire de l'avancement de projet pour une activité semi-professionnelle.

Le fichier que je vous joins est une version simplifié de mon fichier réel.
https://www.cjoint.com/c/IGjmbLCsLXP

J'ai donc une étape d'étude de projet, une fois l'étude terminée le projet est copié (via une macro) avec les autres projets déjà étudiés où ils sont comparé les uns les autres jusqu'à ce qu'un seul soit sélectionné à l'aide d'une autre macro qui enverra le projet en question en colonne AA projet sélectionné.

Une autre macro me permet de sortir un projet de la liste des projet étudié.

Le problème que je rencontre c'est qu'après avoir supprimé un projet, le 2 dans l'exemple, je souhaite que la prochaine copie de projet se fasse à l'endroit manquant. Or la macro est faite pour le situer en dernière position parmi tous.

Ce qu'il faudrait c'est que la copie est lieu à partir de J, dès qu'une cellule en ligne 3 est vide.
J3 vide ? non, K3 vide ? non, L3 vide ? Oui, je colle en L3

Voilà, merci à tous :)
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
178
Date d'inscription
samedi 19 mars 2011
Statut
Membre
Dernière intervention
9 juillet 2019
22
1
Merci
Bonjour,

Voici le suite de tests. Ce n'est pas forcément optimisé, mais ça fonctionne. Vous pouvez remplacer la fonction copie() par celle ci :

Sub Copie()
Dim C As Range, Col As Integer
Range(Cells(3, "AA"), Cells(Rows.Count, "AA").End(xlUp)).ClearContents 'pour supprimer a financer avant
'trouve la colonne à utiliser
'Col = Cells(3, Columns.Count).End(xlToLeft).Column + 1
Col = 0
If IsEmpty(Cells(3, 11)) Then
Col = 11
ElseIf IsEmpty(Cells(3, 12)) Then
Col = 12
ElseIf IsEmpty(Cells(3, 13)) Then
Col = 13
ElseIf IsEmpty(Cells(3, 14)) Then
Col = 14
ElseIf IsEmpty(Cells(3, 15)) Then
Col = 15
ElseIf IsEmpty(Cells(3, 16)) Then
Col = 16
End If

If Col > 0 Then

'"8" est le numéro de la colonne H, j'aurais pu mettre "H"
For Each C In Range("H3", Cells(Rows.Count, "H").End(xlUp)) 'Sélectionne la plage O3 à la dernière cellule remplie de la colonne O
If C.Offset(, -3) = 0 Then
'"-3" est le décalage vers la gauche entre les colonnes O et L
Cells(C.Row, Col).Value = C.Value 'recopie valeurs
ElseIf C.Offset(, -3) = 1 Then
C.Copy Cells(C.Row, Col) 'collage standard
End If
Next C

End If
End Sub

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 52946 internautes nous ont dit merci ce mois-ci

Merci Fulsten, écoute je pense que ça va m'aller.
Faut juste que je rajoute les 10 colonnes cachées et c'est bon ^^
Fulsten
Messages postés
178
Date d'inscription
samedi 19 mars 2011
Statut
Membre
Dernière intervention
9 juillet 2019
22 -
Désolé, voici une meilleur version

Sub Copie()
Dim C As Range, Col As Integer
Range(Cells(3, "AA"), Cells(Rows.Count, "AA").End(xlUp)).ClearContents 'pour supprimer a financer avant
'trouve la colonne à utiliser
Col = Cells(3, Columns.Count).End(xlToLeft).Column + 1

For i = 11 To Cells(3, Columns.Count).End(xlToLeft).Column + 1
Col = i
If IsEmpty(Cells(3, i)) Then
Exit For
End If
Next i


'"8" est le numéro de la colonne H, j'aurais pu mettre "H"
For Each C In Range("H3", Cells(Rows.Count, "H").End(xlUp)) 'Sélectionne la plage O3 à la dernière cellule remplie de la colonne O
If C.Offset(, -3) = 0 Then
'"-3" est le décalage vers la gauche entre les colonnes O et L
Cells(C.Row, Col).Value = C.Value 'recopie valeurs
ElseIf C.Offset(, -3) = 1 Then
C.Copy Cells(C.Row, Col) 'collage standard
End If
Next C

End Sub
Commenter la réponse de Fulsten
Messages postés
559
Date d'inscription
mardi 5 juin 2018
Statut
Membre
Dernière intervention
9 juillet 2019
41
1
Merci
Bonjour,

Essaie aussi :

Sub Copie()
  Dim C As Range, Col As Integer
  Range(Cells(3, "AA"), Cells(Rows.Count, "AA").End(xlUp)).ClearContents 'pour supprimer a financer avant
  'trouve la colonne à utiliser
  Col = Cells(3, 10).End(xlToRight).Column + 1
  If Col = Columns.Count + 1 Then Col = 11
  '"8" est le numéro de la  colonne H, j'aurais pu mettre "H"
  For Each C In Range("H3", Cells(Rows.Count, "H").End(xlUp)) 'Sélectionne la plage O3 à la dernière cellule remplie de la colonne O
    If C.Offset(, -3) = 0 Then
      '"-3" est le décalage vers la gauche entre les colonnes O et L
      Cells(C.Row, Col).Value = C.Value 'recopie valeurs
    ElseIf C.Offset(, -3) = 1 Then
      C.Copy Cells(C.Row, Col)  'collage standard
    End If
  Next C
End Sub


Daniel

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 52946 internautes nous ont dit merci ce mois-ci

Fulsten
Messages postés
178
Date d'inscription
samedi 19 mars 2011
Statut
Membre
Dernière intervention
9 juillet 2019
22 -
Si simple... Je ne connais pas assez ces fonctions !
Commenter la réponse de danielc0