VBA ajout à un endroit précis selon le contenu d'une cellule

milianaise

XLDnaute Nouveau
Bonjour,

Je débute en VBA.
En ce moment j'essaye de créer un outil qui permet de générer des planning à l'aide d'un UserForm. Dans mon classeur j'ai deux listes : une liste qui contient le planning et une liste qui contient les données qui seront saisies dans un formulaire et intégrées dans la première liste. Dans la liste de données, il y a la colonne A qui contient les phase et la colonne B qui contient les tâches.

L'utilisateur dans le formulaire doit sélectionner une phase et ensuite une tâche. Tout fonctionne sauf que j'ai une colonne pour "les phases" et une colonne pour "les tâches". Le code donne ça :
.Range("B" & L).Value = phase.Value
.Range("C" & L).Value = tache.Value

Une tâche ne contient qu'une seule phase mais une phase peut contenir plusieurs tâches. ça prends de la place pour rien.

Ce que je veux c'est que les tâches et les phases soient dans la même colonne.

en français ça donne ça (c'est juste un exemple) : Si B2=> tache.Value <= B:7 ,:confused::confused: elle sera insérée après la phase sélectionnée. Ce qui fait qu'une phase ne peut être insérée qu'un seule fois.

Je n'arrive pas à trouver la syntaxe exacte si vous pouviez m'aider!!!

Je joins un fichier pour vous illustrer.

Merci d'avance pour votre aide!! ;)
 

Pièces jointes

  • planning test.xls
    95 KB · Affichages: 46
  • planning test.xls
    95 KB · Affichages: 51
  • planning test.xls
    95 KB · Affichages: 50

WUTED

XLDnaute Occasionnel
Re : VBA ajout à un endroit précis selon le contenu d'une cellule

Bonjour milianaise,

J'ai pas vraiment compris ce que tu voulais faire, même avec la pj...j'ai perdu le fil à :
Ce que je veux c'est que les tâches et les phases soient dans la même colonne.

en français ça donne ça (c'est juste un exemple) : Si B2=> tache.Value <= B:7

En gros si on reprend l'exemple de ta pj, est-ce que cela correspond à ce que tu voudrais?

_______________________
LANCEMENT DE PROJET
_______________________
Ecriture du cahier des charges
_______________________
CONCEPTION ET SPECIFICATIONS
_______________________
Livraison du CdC
-------------------------------------
Développement..
-------------------------------------
Développement..
-------------------------------------
etc
 

milianaise

XLDnaute Nouveau
Re : VBA ajout à un endroit précis selon le contenu d'une cellule

Bonjour milianaise,

J'ai pas vraiment compris ce que tu voulais faire, même avec la pj...j'ai perdu le fil à :


En gros si on reprend l'exemple de ta pj, est-ce que cela correspond à ce que tu voudrais?

_______________________
LANCEMENT DE PROJET
_______________________
Ecriture du cahier des charges
_______________________
CONCEPTION ET SPECIFICATIONS
_______________________
Livraison du CdC
-------------------------------------
Développement..
-------------------------------------
Développement..
-------------------------------------
etc

Bonjour Wuted,
Merci pour ta réponse.
Oui ce que je veux c'est un bien ça. :)
 

WUTED

XLDnaute Occasionnel
Re : VBA ajout à un endroit précis selon le contenu d'une cellule

Re,

Y'a cette macro qui récupère les données de BDD et qui les met en forme sur Feuil2 mais au final j'ai pas l'impression que c'est ce que tu veux :

VB:
Sub Recap()
    With Sheets("BDD")
        For i = 2 To .Range("B65536").End(xlUp).Row
            If .Range("A" & i) <> "" Then
                Sheets("Feuil2").Range("A" & Sheets("Feuil2").Range("A65536").End(xlUp).Row + 1).Value = .Range("A" & i).Value
                Sheets("Feuil2").Range("A" & Sheets("Feuil2").Range("A65536").End(xlUp).Row).Interior.ColorIndex = 6
                Sheets("Feuil2").Range("A" & Sheets("Feuil2").Range("A65536").End(xlUp).Row + 1).Value = .Range("B" & i).Value
            Else
                Sheets("Feuil2").Range("A" & Sheets("Feuil2").Range("A65536").End(xlUp).Row + 1).Value = .Range("B" & i).Value
            End If
        Next i
    End With
End Sub

A quel endroit / moment tu veux cette mise en forme?
 

milianaise

XLDnaute Nouveau
Re : VBA ajout à un endroit précis selon le contenu d'une cellule

Y'a cette macro qui récupère les données de BDD et qui les met en forme sur Feuil2 mais au final j'ai pas l'impression que c'est ce que tu veux :

Je veux que quand l'utilisateur saisie la tâche dans le formulaire, qu'il y ait une boucle qui regarde si la tâche saisie se trouve par exemple entre B5 et B:6 de la BDD et qu'elle soit associée à une phase précise. Si cette phase a déjà été créée précédemment elle ne sera pas recrée. La tâche lui sera associée, il y aura un décalage de cellule vers le bas au moment de l'insertion de la tâche. j'ai fait une petite illustration rapide sur paint sur ce que je veux.
Encore merci d'avoir pris la peine de me répondre!! :)
 

Pièces jointes

  • planning excel.jpg
    planning excel.jpg
    32.7 KB · Affichages: 73

WUTED

XLDnaute Occasionnel
Re : VBA ajout à un endroit précis selon le contenu d'une cellule

Re,

Regarde en remplaçant le code ton bouton valider dans le formulaire avec :

VB:
Private Sub CommandButton1_Click()
    Dim L As Integer
    Dim state As Boolean
    
    L = Sheets("Projet").Range("B65536").End(xlUp).Row
    
    Sheets("Projet").Activate
    
    With Sheets("Projet")
        For i = 12 To L
            If .Range("B" & i) = phase.Value Then
                .Range("B" & i + 1).Insert xlDown
                .Range("B" & i + 1).Value = tache.Value
                .Range("B" & i + 1).Interior.ColorIndex = 2
                state = True
                Exit For
            End If
        Next i
        If state = False Then
            .Range("B" & L + 1).Value = phase.Value
            .Range("B" & L + 1).Interior.ColorIndex = 4
            .Range("B" & L + 2).Value = tache.Value
            .Range("B" & L + 2).Interior.ColorIndex = 2
        End If
    End With
End Sub
 

WUTED

XLDnaute Occasionnel
Re : VBA ajout à un endroit précis selon le contenu d'une cellule

Re,

VB:
Private Sub CommandButton1_Click()
    Dim L As Integer
    Dim state As Boolean
    
    L = Sheets("Projet").Range("B65536").End(xlUp).Row
    
    Sheets("Projet").Activate
    
    With Sheets("Projet")
        'On parcours la colonne B
        For i = 12 To L
            'Si on trouve une cellule avec la même valeur que la phase alors
            If .Range("B" & i) = phase.Value Then
                'On insert une nouvelle ligne en dessous et on remplit celle-ci avec la tâche ajoutée
                .Range("B" & i + 1).Insert xlDown
                .Range("B" & i + 1).Value = tache.Value
                .Range("B" & i + 1).Interior.ColorIndex = 2
                'On met le booléen state à True, ce qui permet par la suite de savoir si on a trouvé une phase déjà existante ou non
                state = True
                'Phase unique donc on quitte le for
                Exit For
            End If
        Next i
        'Si l'on a pas trouvé de phase déjà existante alors
        If state = False Then
            'On ajouter phase (avec couleur) et tâche à la suite
            .Range("B" & L + 1).Value = phase.Value
            .Range("B" & L + 1).Interior.ColorIndex = 4
            .Range("B" & L + 2).Value = tache.Value
            .Range("B" & L + 2).Interior.ColorIndex = 2
        End If
    End With
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 500
Messages
2 089 007
Membres
104 003
dernier inscrit
adyady__