Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/08/2011, 15h03   #1
Nouveau Membre du Club
 
Inscription : octobre 2007
Messages : 68
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 68
Points : 33
Points : 33
Par défaut Accéder à une donnée dans une cellule fusionnée (par un cells)

Bonjour,
Voilà j'explique mon souci!
J'ai un classeur de 6 feuilles:
- 1ere -> j'y choisis une date (mensuelle) grâce à une liste déroulante et on y trouve mes 4 macros!
- 2eme -> il y a ma BDD au grand complet
- 3eme -> il y a des données qui s'y mettent automatiquement grâce à la BDD et des diagrammes (c'est une gestion de stock pour savoir ce qui est absent au stock, dispo, etc)
- 4eme -> un patron pour une impression de données
- 5eme -> une fiche mensuelle qui me ressort la liste du matériel dont la viste au SAV a été faite lors du mois choisit dans l'index!
- 6eme -> mes listes pour mes différentes listes déroulantes!

Donc lorsque j'ai choisi ma date dans l'index je clique sur ma premiere macro qui me fait automatiquement la 5eme feuille donc ma mensuelle. Cela fonctionne très bien!
Ensuite je clique sur ma deuxième macro qui elle met à jour la 4eme feuille! Jusque là pas de soucis la mise à jour se déroule bien!

Ma feuille mensuelle:
A B C
Type Numéro Observation

Toutes les données se mettent à jour toutes seules lorsque je clique sur ma macro mais lorsqu'elles s'incérent, je fusionne la cellule dans la colonne A par exemple s'il y a une télé avec le numéro 345 et une autre télé avec le numéro 523 alors par exemple A4 et A5 fusionne et il n'y est inscrit qu'une fois Télé dans le type!

Le problème que je rencontre c'est que dans cette 4eme feuille j'y met des données de la 5eme (de la mensuelle)! Il y a un champs dans cette 5eme feuille qui compte en fait le nombre d'objet par type par exemple combien y a t il de télé , de lecteur dvd etc en sachant que la cellule dans laquelle est indiqué le type a été fusionnée comme il y en a plusieurs! Et c'est cela que je n'arrive pas à faire compter combien il y en a car voilà ce que j'ai fait:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cpt_typ = 1
    For i = 4 To lig_fin
 
        If (Sheets("MENSUELLE").Cells(i, 1) <> Sheets("MENSUELLE").Cells(i + 1, 1)) Then
 
            cpt_typ = cpt_typ
            Sheets("MAT1017").Cells(7, 2).Value = Sheets("MAT1017").Cells(7, 2).Value & vbLf & cpt_typ & Sheets("MENSUELLE").Cells(i, 1)
 
        Else
 
            cpt_typ = cpt_typ + 1
 
        End If
 
    Next i
Le soucis c'est que en faisant ça et bien je ne peux pas lire par exemple la cellule A5 qui est fusionnée avec A4! Dans A4 il y a télé de marqué mais A5 n'est pas accessible! Je ne vois pas comment faire!!
biddal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 16h35   #2
Membre Expert
 
Avatar de rvtoulon
 
Homme Hervé
Agent Technique
Inscription : mars 2009
Messages : 823
Détails du profil
Informations personnelles :
Nom : Homme Hervé
Âge : 36
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Agent Technique
Secteur : Santé

Informations forums :
Inscription : mars 2009
Messages : 823
Points : 1 441
Points : 1 441
bonjour,
une idée à creuser:
j'ai en A1 une cellule fusionnée jusqu'en D1 donc 4 colonnes. Je soustrais le numéro de la colonne de la cellule suivante ici E1 donc 5 au numéro de la colonne de ma cellule fusionnée ici 1. Résultat 4 voici le code :
Code :
1
2
3
4
5
6
7
8
Sub comter_nbr_cellule_fusionne()
Dim nbitem As Integer
 
If Range("A1").MergeCells = True Then
   nbitem = Range("A1").Offset(0, 1).Column - Range("A1").Column
   MsgBox nbitem
End If
End Sub
essaye de l'adapter a tes besoins
__________________
@+

Si vous avez trouvé la solution à votre problème n'oubliez pas d'appuyer sur
Et n'oubliez pas de voter en appuyant sur si ce message a repondu à vos attentes.
Ou sur si ce n'est pas le cas
rvtoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 23h11   #3
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 847
Points : 16 847
Envoyer un message via Skype™ à bbil
tu pourrai utiliser le même principe que la :

http://www.developpez.net/forums/d11...s/#post6155007

je n'ai pas excel sous la main pour tester mais cela devrai donner (en partant de ton code) un truc du genre :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
cpt_typ = 1
    For i = 4 To lig_fin
 
 
        If (Sheets("MENSUELLE").Cells(i, 1).MergeArea.Cells(1, 1) <> Sheets("MENSUELLE").Cells(i + 1, 1).MergeArea.Cells(1, 1)) Then
 
            cpt_typ = cpt_typ
            Sheets("MAT1017").Cells(7, 2).Value = Sheets("MAT1017").Cells(7, 2).Value & vbLf & cpt_typ & Sheets("MENSUELLE").Cells(i, 1).MergeArea.Cells(1, 1)
 
        Else
 
            cpt_typ = cpt_typ + 1
 
        End If
 
    Next i
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 05h26   #4
Membre Expert
 
Avatar de rvtoulon
 
Homme Hervé
Agent Technique
Inscription : mars 2009
Messages : 823
Détails du profil
Informations personnelles :
Nom : Homme Hervé
Âge : 36
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Agent Technique
Secteur : Santé

Informations forums :
Inscription : mars 2009
Messages : 823
Points : 1 441
Points : 1 441
Bonjour,
Merci bbil, je ne connaissais pas la propriété MergeArea effectivement elle convient bien.
Vu que je n'arrive pas à dormir j'ai regardé le code de biddal d'un peu plus près et après avoir testé voici un code qui devrait le faire :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
For i = 4 To lig_fin
 'Donne au compteur le nombre de cellule fusionnée de la plage
 'Par exemple A4,A5 fusionnée ici cpt_typ = 2
 'Si A4 pas fusionnée ici cpt_typ = 1
  cpt_typ = Sheets("MENSUELLE").Cells(i, 1).MergeArea.Count
 
  Sheets("MAT1017").Cells(7, 2).Value = Sheets("MAT1017").Cells(7, 2).Value & vbLf & cpt_typ & Sheets("MENSUELLE").Cells(i, 1)
 
 'pour passer a la prochaine plage fusionné
  i = i + cpt_typ - 1
 
Next i
Au plaisir.
__________________
@+

Si vous avez trouvé la solution à votre problème n'oubliez pas d'appuyer sur
Et n'oubliez pas de voter en appuyant sur si ce message a repondu à vos attentes.
Ou sur si ce n'est pas le cas
rvtoulon est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/08/2011, 09h19   #5
Nouveau Membre du Club
 
Inscription : octobre 2007
Messages : 68
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 68
Points : 33
Points : 33
Citation:
Envoyé par rvtoulon Voir le message
Bonjour,
Merci bbil, je ne connaissais pas la propriété MergeArea effectivement elle convient bien.
Vu que je n'arrive pas à dormir j'ai regardé le code de biddal d'un peu plus près et après avoir testé voici un code qui devrait le faire :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
For i = 4 To lig_fin
 'Donne au compteur le nombre de cellule fusionnée de la plage
 'Par exemple A4,A5 fusionnée ici cpt_typ = 2
 'Si A4 pas fusionnée ici cpt_typ = 1
  cpt_typ = Sheets("MENSUELLE").Cells(i, 1).MergeArea.Count
 
  Sheets("MAT1017").Cells(7, 2).Value = Sheets("MAT1017").Cells(7, 2).Value & vbLf & cpt_typ & Sheets("MENSUELLE").Cells(i, 1)
 
 'pour passer a la prochaine plage fusionné
  i = i + cpt_typ - 1
 
Next i
Au plaisir.
Merci beaucoup pour ce but de code qui fonctionne nikel !!!
Merci pour votre aide!
biddal est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h01.


 
 
 
 
Partenaires

Hébergement Web