VBA - Si valeur cellule fusionnée existe dans autre onglet : défusion

cyko_benz

XLDnaute Nouveau
Bonjour à tous,

Je suis nouveau sur ce forum et également nouveau avec les macros Excel.

Je dois fournir un fichier type qui sera utilisé par plusieurs personnes pour signaler divers changements. La plupart des changements seront à remplir dans une cellule fusionnée sans procédure supplémentaire. Mais certains changements seront des codes PC% qui devront défusionner les trois cellules avec cellule1=le code, cellule2=un VLookup vers Feuil2 et Cellule 3=un autre VLookup vers Feuil3.

Pour l'instant, j'ai commencé à écrire ceci (grâce à ce forum et de longue recherche Google :)) :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("E8", "E1200")) Is Nothing Then fusion

End Sub

Sub fusion()
For Each Cell In Range("E8", Range("E1200").End(xlUp))
If UCase(Cell.Value) Like "PC*" Then
Cells.UnMerge
End If
Next

End Sub

Mais cela ne fait pas du tout ce que je souhaite. En premier lieu, le Like "PC*" ne fonctionne pas, Excel défusionne toutes les cellules dans la colonne E. Même celle au dessus du range E8:E1200 ... .

Pouvez-vous me donner un conseil pour mener à bien cette macro ?

J'ai placé le fichier en pièce jointe.

Merci beaucoup pour l'aide que vous pourrez m'apporter.

Benoît,
 

Pièces jointes

  • Défusion_Cellule.xls
    38 KB · Affichages: 79

Gorfael

XLDnaute Barbatruc
Re : VBA - Si valeur cellule fusionnée existe dans autre onglet : défusion

salut cyko_benz et le forum
Rappel : Ni devin, ni télépathe sur ce site (à ma connaissance). Et le seul du site à utiliser ton fichier c'est toi
Placer un fichier en pièce jointe, c'est bien. Mais si tu ne donnes pas d'exemple des valeurs au départ et après avoir été modifiées par le code que tu recherches, ça sert à quoi ?

Ta macro pêche par un manque de compréhension du code : Tu fais une boucle pour tester si chaque cellule fusionnée de E commence par PC : ça c'est bon. Mais pourquoi tu défusionnes toutes les cellules de la feuille active à chaque fois ?
Code:
Sub fusion()
Dim Cel As Range
For Each Cel In Range("E8", Range("E1200").End(xlUp))
    If UCase(Cel) Like "PC*" Then
        Cel.MergeArea.UnMerge
    End If
Next
End Sub
Ensuite : Si tu vérifies Toute ta colonne E à chaque changement de valeur, tu vas perdre du temps pour rien : tu ne devrais vérifier que la cellule ayant été modifiée, et seulement si sa ligne est paire. Et au lieu d'envisager d'utiliser des formules "feuille de calcul", recherche leur "équivalent" en VBA.
A+
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : VBA - Si valeur cellule fusionnée existe dans autre onglet : défusion

Bonsoir le fil :),
C'est
Code:
Sub fusion()
For Each Cell In Range("E8", Range("E1200").End(xlUp))
If UCase(Cell.Value) Like "PC*" Then
Cell.UnMerge
End If
Next
End Sub
qui fonctionne :p...
Cells.UnMerge defusionnera TOUTES les cellules de l'onglet, Cell.UnMerge defusionnera uniquement Cell :rolleyes:...
Bonne soirée :cool:
Ajout : Euh, c'est la même chose que tu disais Gorfael, j'avais mal lu :eek:...
 
Dernière édition:

cyko_benz

XLDnaute Nouveau
Re : VBA - Si valeur cellule fusionnée existe dans autre onglet : défusion

Bonjour Gorfael, Bonjour JNP

Merci beaucoup pour vos réponses super rapides. Cela fonctionne parfaitement :cool: .

J'ai appris quelque chose aujourd'hui, le pluriel est également important pour VBA ;-)

Je vais continuer la macro en utilisant Offset et FormulaR1C1 pour les VLookup. Quand j'aurais plus d'expérience, j'optimaliserai certainement le tout :).

Désolé si ma question n'était pas claire,
Merci encore et bonne soirée !

Benoît,
 

Discussions similaires

Réponses
7
Affichages
334

Statistiques des forums

Discussions
312 330
Messages
2 087 337
Membres
103 524
dernier inscrit
Smile1813