Aide à la modification du code VBA
Bonjour à tous, y a-t-il une solution à ce gâchis. J'ai 100 feuilles de hakan à hakan100 comment puis-je créer un code court qui fait ce travail.Merci d'avance.
Sub JJ()
If Sheets("toutal").Range("b4") = "hakan" Then
Sheets("toutal").Range("c4") = Sheets("hakan").Range("b11")
Sheets("toutal").Range("d4") = Sheets("hakan").Range("b6")
Sheets("toutal").Range("e4") = Sheets("hakan").Range("b8")
Sheets("toutal").Range("f4") = Sheets("hakan").Range("m6")
Sheets("toutal").Range("g4") = Sheets("hakan").Range("b12")
Sheets("toutal").Range("h4") = Sheets("hakan").Range("b13")
Sheets("toutal").Range("i4") = Sheets("hakan").Range("b17")
Sheets("toutal").Range("j4") = Sheets("hakan").Range("k47")
Sheets("toutal").Range("k4") = Sheets("hakan").Range("l47")
Sheets("toutal").Range("l4") = Sheets("hakan").Range("m47")
Sheets("toutal").Range("m4") = Sheets("hakan").Range("n47")
Sheets("toutal").Range("n4") = Sheets("hakan").Range("c81")
End If
If Sheets("toutal").Range("b4") = "hakan1" Then
Sheets("toutal").Range("c4") = Sheets("hakan1").Range("b11")
Sheets("toutal").Range("d4") = Sheets("hakan1").Range("b6")
Sheets("toutal").Range("e4") = Sheets("hakan1").Range("b8")
Sheets("toutal").Range("f4") = Sheets("hakan1").Range("m6")
Sheets("toutal").Range("g4") = Sheets("hakan1").Range("b12")
Sheets("toutal").Range("h4") = Sheets("hakan1").Range("b13")
Sheets("toutal").Range("i4") = Sheets("hakan1").Range("b17")
Sheets("toutal").Range("j4") = Sheets("hakan1").Range("k47")
Sheets("toutal").Range("k4") = Sheets("hakan1").Range("l47")
Sheets("toutal").Range("l4") = Sheets("hakan1").Range("m47")
Sheets("toutal").Range("m4") = Sheets("hakan1").Range("n47")
Sheets("toutal").Range("n4") = Sheets("hakan1").Range("c81")
End If
If Sheets("toutal").Range("b4") = "hakan2" Then
Sheets("toutal").Range("c4") = Sheets("hakan2").Range("b11")
Sheets("toutal").Range("d4") = Sheets("hakan2").Range("b6")
Sheets("toutal").Range("e4") = Sheets("hakan2").Range("b8")
Sheets("toutal").Range("f4") = Sheets("hakan2").Range("m6")
Sheets("toutal").Range("g4") = Sheets("hakan2").Range("b12")
Sheets("toutal").Range("h4") = Sheets("hakan2").Range("b13")
Sheets("toutal").Range("i4") = Sheets("hakan2").Range("b17")
Sheets("toutal").Range("j4") = Sheets("hakan2").Range("k47")
Sheets("toutal").Range("k4") = Sheets("hakan2").Range("l47")
Sheets("toutal").Range("l4") = Sheets("hakan2").Range("m47")
Sheets("toutal").Range("m4") = Sheets("hakan2").Range("n47")
Sheets("toutal").Range("n4") = Sheets("hakan2").Range("c81")
End If
If Sheets("toutal").Range("b4") = "hakan3" Then
Sheets("toutal").Range("c4") = Sheets("hakan3").Range("b11")
Sheets("toutal").Range("d4") = Sheets("hakan3").Range("b6")
Sheets("toutal").Range("e4") = Sheets("hakan3").Range("b8")
Sheets("toutal").Range("f4") = Sheets("hakan3").Range("m6")
Sheets("toutal").Range("g4") = Sheets("hakan3").Range("b12")
Sheets("toutal").Range("h4") = Sheets("hakan3").Range("b13")
Sheets("toutal").Range("i4") = Sheets("hakan3").Range("b17")
Sheets("toutal").Range("j4") = Sheets("hakan3").Range("k47")
Sheets("toutal").Range("k4") = Sheets("hakan3").Range("l47")
Sheets("toutal").Range("l4") = Sheets("hakan3").Range("m47")
Sheets("toutal").Range("m4") = Sheets("hakan3").Range("n47")
Sheets("toutal").Range("n4") = Sheets("hakan3").Range("c81")
End If
End Sub
Bonjour,
Pour le principe, une procédure évènementielle :
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ws As Worksheet
If Target.Address = "$B$4" Then
Me.Cells(4, 3).Resize(, 12).ClearContents
If Not IsEmpty(Target) Then
Set ws = Worksheets(Target.Value)
Select Case ws.Name
Case "toutal":
Case Else:
With Me
.Range("C4") = ws.Range("B11")
.Range("D4") = ws.Range("B6")
.Range("E4") = ws.Range("B8")
.Range("F4") = ws.Range("M6")
.Range("G4") = ws.Range("B12")
.Range("H4") = ws.Range("B13")
.Range("I4") = ws.Range("B17")
.Range("J4") = ws.Range("K47")
.Range("K4") = ws.Range("L47")
.Range("L4") = ws.Range("M47")
.Range("M4") = ws.Range("N47")
.Range("N4") = ws.Range("C81")
End With
End Select
End If
End If
End Sub
bonjour, je n'ai pas lu toute la question, mais ceci est plus court
With ws
Me.Range("C4").Resize(, 12).Value = Array(.Range("B11").Value, .Range("B6").Value, .Range("B8").Value, .Range("M6").Value, .Range("B12").Value, .Range("B13").Value, _
.Range("B17").Value, .Range("K47").Value, .Range("L47").Value, .Range("M47").Value, .Range("N47").Value, .Range("C81").Value)
End With
Bonjour à tous,
Bon exercice mais avec un fichier, c'est plus fiable
Private Sub Worksheet_Change(ByVal Target As Range)
Dim j%
If Target.Address = "$B$4" Then
'recherche onglet
For j = 1 To Application.Sheets.Count
If Sheets(j).Name = Target Then
With Sheets("toutal")
.Range("C4") = Sheets(j).Range("B11")
.Range("D4") = Sheets(j).Range("B6")
.Range("E4") = Sheets(j).Range("B8")
.Range("F4") = Sheets(j).Range("M6")
End With
End If
Next j
End If
End Sub
Cdt
Bonjour à tous,
Sinon, il est aussi possible de mettre la formule suivante en C4 :
=INDIRECT($B$4&"!B11")
En D4, on remplacera B11 par B6.
Et ainsi de suite...
Cdlt,
Merci à tous pour vos suggestions, le problème maintenant c'est que j'ai 100 cartes au nom de hakan
Hakan
Hakan1
Hakan2... ....
Hakan100
Comment puis-je extraire des données de chaque feuille avec la condition de la valeur dans la colonne b4.Est-il possible d'implémenter la condition sur la colonne v4 à b50...par exemple, si b4 est égal à hakan, les données sont copiées à partir du hakan feuille et en même temps b5 est égal à hakan4, il est copié devant la ligne b5
Je veux dire que la condition est exécutée le long des colonnes b4 à b50
Bonjour,
J'ai le sentiment que réponse vous a déjà été donnée.
Pour une aide adaptée, vous devriez joindre un fichier représentatif du problème.
Enfin, j'ai le sentiment que vous prenez le problème à l'envers. En général, on remplit une base de données pour ensuite "appeler" les informations ailleurs (sur une feuille dédiée où on met en forme l'information brute). Là, j'ai l'impression que vous cherchez à faire l'inverse. Je pense donc qu'il faut tout refaire.
Cdlt,
Merci, il semble que je ne pouvais pas communiquer l'idée, j'ai pu obtenir ma commande par ce code, mais je veux l'appliquer à toutes les cases de la colonne b de b4:b100 pour obtenir plus d'un résultat au total feuille
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim ws As Worksheet If Target.Address = "$B$4" Then Me.Cells(4, 3).Resize(, 12).ClearContents If Not IsEmpty(Target) Then Set ws = Worksheets(Target.Value) Select Case ws.Name Case "toutal": Case Else: With Me .Range("C4") = ws.Range("B11") .Range("D4") = ws.Range("B6") .Range("E4") = ws.Range("B8") .Range("F4") = ws.Range("M6") .Range("G4") = ws.Range("B12") .Range("H4") = ws.Range("B13") .Range("I4") = ws.Range("B17") .Range("J4") = ws.Range("K47") .Range("K4") = ws.Range("L47") .Range("L4") = ws.Range("M47") .Range("M4") = ws.Range("N47") .Range("N4") = ws.Range("C81") End With End Select End If End If End Sub
Dans ce cas, une procédure évènementielle ne convient pas. Il faudrait, par VBA, une boucle sur l'ensemble de la colonne B mais vous ne vous êtes pas bien exprimé.
Cependant, la fonction INDIRECT convient tout à fait.
Mais votre réel problème, c'est que vous ne tenez pas compte des réponses qui vous sont données. Pour une aide adaptée, vous devriez joindre un fichier représentatif du problème.
Enfin, je me répète mais je pense que vous prenez le problème à l'envers.
Je parie que votre fichier ne nécessite que 2 feuilles :
- une base de 13 colonnes avec une ligne par "carte" (Hakan1, ...) et les infos correspondantes dans les 12 autres colonnes.
- un onglet de restitution des informations (mises en forme comme vous le désirez) dans lequel la seule variable est la carte. Alors, à l'aide d'un RECHERCHEV ou INDEX EQUIV, vous obtenez toutes les infos qui s'y rattachent.
Cdlt,
Bonjour Arwasoha, Le Forum,
Nul besoin de VBA, sauf si le fichier a trop de données. La solution présentée par 3GB est suffisante.
Voici en retour. Merci à Fronck
Inscris seulement ton numéro de feuille Hanka en colonne B. Et les formules feront le reste.
Merci à tous pour votre attention et le suivi de ma demande, c'est la solution la plus adaptée pour moi
=INDIRECT($B$4&"!B11")