rechercher copier coller

franckymalone

XLDnaute Nouveau
Bonjour, J'essaye de créer un fichier excel me permettant la gestion d'un atelier.
Je bloque sur une fonction du style quand j'appui sur un bouton mise à jour une macro recherche dans une collonne un numero de semaine sous forme "S9" par exemple.
puis elle m'additionne toutes les cellules dans une autres collones qui correspond à cette recherche et me colle le résultat dans une cellule d'une autre feuille.
Explication de ce que je recherche je remplis une liste d'intevention a faire avec plusieurs criteres dont la date de livraison souhaité et le temps nécessaire en mecanique hydraulique electrique. Je souhaite avec mon bouton mettre à jour un planning de charge d'atelier par compétance suivant les dates de livraison.
Quelqu'un aurait-il une piste des fonctions que je dois utiliser ? Je préfére des pistes qu'une solution toute faite étant curieux de naissance!



Voilà je vous mets un exemple de mon tableau de suivi.
merci d'avance pour vos conseils.
 

Pièces jointes

  • exemple1.zip
    11.5 KB · Affichages: 36
  • exemple1.zip
    11.5 KB · Affichages: 43
  • exemple1.zip
    11.5 KB · Affichages: 36
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : rechercher copier coller

Bonjour Franckymaldone et bienvenu, bonjour le forum,

Prend le temps de lire la Lien supprimé Francky et tu verras qu'en nous mettant un petit fichier exemple nous pourrons t'aider bien plus vite...
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : rechercher copier coller

Bonjour Francky, bonjour le forum,

C'est encore moins clair qu'avant...
Ok tu cliques sur le bouton et tu renseignes une boite d'entrée avec une semaine...
Ensuite ton code demande de rechercher dans la colonne F toutes les valeurs de la boite d'entrée.
Après je sais plus parce que "elle m'additionne toutes les cellules dans une autres collones qui correspond à cette recherche et me colle le résultat dans une cellule d'une autre feuille", c'est incompréhensible...

Pour le début peut-être :
Code:
Private Sub CommandButton1_Click()
Dim sem As String
Dim cel As Range
sem = Application.InputBox("Semaine recherchée (au format S+Numéo) ?", "Mise à jour de la semaine", Type:=2)
If sem = "" Then Exit Sub
sem = UCase(sem)
With Sheets("TABLEAU")
    For Each cel In .Range("F2:F" & .Range("F65536").End(xlUp).Row)
        If cel.Value = sem Then '...
            'ton code...
        End If
    Next cel
End With
End Sub
 

franckymalone

XLDnaute Nouveau
Bonjour Robert, merci d'avoir penché sur ma question. Je vais essayé d'être plus clair.
Dans l'onglet tableau je renseigne à la main les différentes machines que je vais devoir passé à l'atelier. Chaque ligne correspond a une machine avec un délai de livraison (ma colonne F) et les heures nécessaires dans chaque technique (colonne H, J, L, N).
Pour avoir une vue de la charge d'atelier suivant les projets qui arrivent je voudrais que lorsque je clique sur mon bouton mise à jour une macro me cherche dans la colonne F toutes les semaines présentes et identiques, qu'elle additionne le nombre d'heure de chaque technique corespondant et qu'elle me colle le résultat dans l'onglet charge dans la celule et la colonne qui correspond.
Dans mon exemple en S9 j'ai 201+30 dans la colone h en mecanique donc je devrais retrouver la valeur 231 dans la cellule (c10) de l'onglet charge et ainsi de suite pour les autres technique et les autres semaines.
J'ai été un peu vite pour poster mon soucis on dira que c'est un péché de jeunesse et je vais en avoir un autre sur cette programmation je découvre le VBA donc je vais sûrement te sortir quelques bêtises.
Merci à plus.
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : rechercher copier coller

Bonjour Francky, bonjour le forum,

Là au moins ça a le mérite d'être clair... En pièce jointe ton fichier modifié avec le code ci-dessous appliqué au bouton M.à Jour :
Code:
Private Sub CommandButton1_Click()
'déclaration des variables
Dim t As Worksheet 'déclare la variable t (onglet Tableau)
Dim c As Worksheet 'déclare la variable c (onglet Charge)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim pl As Range 'déclare la variable pl (PLage)
Dim rt As Range 'déclare la variable rt (Recherche dans onglet Tableau)
Dim rc As Range 'déclare la variable rc (Recherche dans onglet Charge)
Dim tmec As Integer 'déclare la variable tmec (Total MECanique)
Dim telec As Integer 'déclare la variable telec (Total ELECtrique)
Dim tpneu As Integer 'déclare la variable tpneu (Total PNEUmatique)
Dim ttraj As Integer 'déclare la variable tmec (Total TRAJet)
Dim pa As String 'déclare la variable pa (Première Adresse)
 
Set t = Sheets("TABLEAU") 'définit l'onglet t
Set c = Sheets("CHARGE") 'définit l'onglet c
Set pl = t.Range("F1:F" & t.Range("F65536").End(xlUp).Row) 'définit la plage pl
 
For Each cel In pl 'boucle sur toute les cellules cel de la plage pl
    'condition : si la cellule est differente de "DMV -2S" et si l'interieur de la cellule n'est pas rouge
    If cel.Value <> "DMV -2S" And cel.Interior.ColorIndex <> 3 Then
        'définit la recherche rt (recherche de toutes les occurrences de la valeur de la cellule dans la plage pl, après F1, mot entier)
        Set rt = pl.Find(cel.Value, Range("F1"), xlValues, xlWhole)
        pa = rt.Address 'définit l'adresse de la première occurrence trouvée
        Do 'exécute
            rt.Interior.ColorIndex = 3 'colore l'intérieur de la cellule de rouge
            tmec = tmec + CInt(rt.Offset(0, 2).Value) 'définit le total tmec
            telec = telec + CInt(rt.Offset(0, 4).Value) 'définit le total telec
            tpneu = tpneu + CInt(rt.Offset(0, 6).Value) 'définit le total tpneu
            ttraj = ttraj + CInt(rt.Offset(0, 8).Value) 'définit le total ttraj
            Set rt = pl.FindNext(rt) 'redéfinit la recherche (occurrence suivante)
        Loop While Not rt Is Nothing And rt.Address <> pa 'boucle tant qu'il existe des occurrences ailleurs qu'en pa
        'définit la recherche rc (recherche la valeur de la cellule dans la colonne B de l'onglet "CHARGE" (mot entier)
        Set rc = c.Columns(2).Find(cel.Value, , xlValues, xlWhole)
        rc.Offset(0, 1).Value = tmec 'place en colonne C le total tmec
        rc.Offset(0, 2).Value = tpneu 'place en colonne D le total tpneu
        rc.Offset(0, 3).Value = telec 'place en colonne E le total telec
        rc.Offset(0, 4).Value = ttraj 'place en colonne F le total ttraj
        tmec = 0 'réinitialise la variable tmec
        telec = 0 'réinitialise la variable telec
        tpneu = 0 'réinitialise la variable tpneu
        ttraj = 0 'réinitialise la variable ttraj
    End If 'fin de la condition
Next cel 'prochaine cellule de la boucle
 
t.Columns(6).Interior.ColorIndex = xlNone 'supprime la couleur rouge dans la colonne F
End Sub
 

Pièces jointes

  • Francky_Malone_v01.xls
    67.5 KB · Affichages: 83
Dernière édition:

franckymalone

XLDnaute Nouveau
Wouah ! c'est top, milles Merci Robert.
J'ai voulu ajouter une ligne à ton code car si je supprime une ligne donc une machine dans la liste de l'onglet Tableau et que je n'ai plus de charge par exemple en S10 la mise à jour ne voit pas cette suppression.
Je pensais qu'en ajoutant cette ligne:
Worksheets("charge").Range("c2:f54").Value = 0
Je ferais une remise à zéro de tout mon tableau avant sa mise à jour.
J'ai une erreur 91 bref j'ai essayé plusieurs solutions mais cela me sort toujours des erreurs.
J'ai essayé de faire comme cela était écrit dans ton code c'est à dire de déclarer une variable "zer" en integer
puis de mettre à zero la valeur de "zer" puis enfin de metre la valeur "zer" dans la plage de cellule mais sans succès.
Autre essais:
Worksheets("charge").Range("c2:f54").Select
ActiveCell.FormulaR1C1 = "0"
et même:
For Each c In Worksheets("charge").Range("C2:F54")
If c.Value <> 0 Then
c.Value = 0
End If
Next c
Je sais que certaines choses font te faire bondir mais je n'ai que ma curiosité pour progresser.
Merci du temps que tu donnes sur ce forum.
A plus.
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : rechercher copier coller

Bonsoir Francky, bonsoir le forum,

En pièce jointe la versio 02. J'ai rajouté la ligne suivante :
Code:
c.Range("C2:F54").ClearContents 'efface les anciennes valeurs
Juste avant la boucle For Each Cel in pl.
 

Pièces jointes

  • Francky_Malone_v02.xls
    68.5 KB · Affichages: 63

franckymalone

XLDnaute Nouveau
Bonjour et merci Robert.
Je n'ai pas eu trop le temps ce matin de m'occuper de mon fichier.
J'essaye de répéter des fonctions de ton code pour une autre feuille.
J'ai aussi des soucis pour verrouiller les cellules et laisser travailler ton code.
Je te tiens au courant de ma progression.
A plus.
 

franckymalone

XLDnaute Nouveau
Me revoilà.
Bon j'ai essayé d'adapter donc de comprendre quelques passages de ton code (j'ai compris comment tu allais chercher les valeurs des colonnes par rapport à une autres et d'autres petites choses) mais cela reste très obscur pour moi.
Je t'explique ce que je voulais obtenir. Dans la dernière version de mon tableau, que je te joins, j'ai un onglet "Projet" dans lequel je voudrais obtenier une synthèse de mes coûts. Après avoir choisis manuellement un taux horaire je voudrais en cliquant sur un bouton qu'une boite de dialogue comme celle que tu avais mis dans ton premier exemple apparaisse.
Dans cette boite je voudrais saisir un numéro de Questions qui correspond à la première colonne de mon onglet "Tableau".
et ainsi aller chercher tous les coûts "bcfer" et "reelle" de chaque ligne correspondant à la recherche et coller ce total en (B2) et (C2) de l'onglet "Projet" , idem pour les coût matière bcfer et reelle dans les cases (H2) et (I2).
Alors j'ai commencer à reprendre ton code et a essayer d'adapter mais je me rends compte que je recopie bêtement les données sans comprendre les enchaînements de lignes.
Dans mes autres soucis je n'arrive pas a faire une copie incrémenter dans l'onglet "tableau des cellules (H1;T1) en (H2;T2) etc etc pour obtenir la mise en forme conditionnelle de ma première ligne sur toutes celles d'après alors que je l'ai fait avec réussite dans mon tableau "Charge" ????
Enfin la solution pour la protection des cellules est bien de déverouiller les cellules en début de code et de les verouiller à la fin ?
D'avance merci pour tes réponses et merci ceux qui font que ce forum existe.
A plus
 

franckymalone

XLDnaute Nouveau
Bonjour à tous.
Voilà ou j'en suis en abandonnant l'idée de rentrer le numéro du projet recherché dans une fenêtre et en le notant directement dans la case A2 de l'onglet projet.
Celà me donne ceci et sans succès (erreur next sans for et c'est surement pas la seule) !!!!
Private Sub CommandButton1_Click()
'déclaration des variables
Dim ta As Worksheet 'déclare la variable ta (onglet Tableau)
Dim pr As Worksheet 'déclare la variable pr (onglet projet)
Dim cel1 As Range 'déclare la variable cel1 (CELlule)
Dim pl1 As Range 'déclare la variable pl1 (PLage)
Dim rta As Range 'déclare la variable rta (Recherche dans onglet Tableau)
Dim rp As Range 'déclare la variable rp (Recherche dans onglet Projet)
Dim totbcfer As Integer 'déclare la variable totbcfer (Total heure bcfer)
Dim totreelle As Integer 'déclare la variable totreelle (Total heure reelle)
Dim Rmat As Integer 'déclare la variable Rmat (Total matiere reelle)
Dim tmat As Integer 'déclare la variable tmat (Total matiere bcfer)
Dim pa1 As String 'déclare la variable pa1 (Première Adresse)
Set ta = Sheets("TABLEAU") 'définit l'onglet ta
Set pr = Sheets("PROJET") 'définit l'onglet pr
Set pl1 = t.Range("A1:A" & t.Range("A65536").End(xlUp).Row) 'définit la plage pl1
c.Range("B2:C2").ClearContents 'efface les anciennes valeurs (franck)pas sur d'etre sur la bonne feuille
For Each cel In pl1 'boucle sur toute les cellules cel de la plage pl1
'condition : si la cellule est differente de "QUEST" et si l'interieur de la cellule n'est pas rouge
If cel.Value <> "QUEST." And cel.Interior.ColorIndex <> 3 Then
'définit la recherche rta (recherche des toutes les occurrences de la valeur de la cellule dans la plage pl, après F1, mot entier)
Set rta = pl1.Find(cel.Value, Range("A2"), xlValues, xlWhole)
pa1 = rta.Address 'définit l'adresse de la première occurrence trouvée
Do 'exécute
rta.Interior.ColorIndex = 3 'colore l'intérieur de la cellule de rouge
'défini le total de totbcfer et totreelle
totbcfer = totbcfer + CInt(rt.Offset(0, 2).Value) + CInt(rt.Offset(0, 4).Value) + CInt(rt.Offset(0, 6).Value) + CInt(rt.Offset(0, 8).Value)
totreelle = totreelle + CInt(rt.Offset(0, 3).Value) + CInt(rt.Offset(0, 5).Value) + CInt(rt.Offset(0, 7).Value) + CInt(rt.Offset(0, 9).Value)
'défini le total de Rmat et tmat
Rmat = Rmat + CInt(rt.Offset(0, 12).Value)
tmat = tamat + CInt(rt.Offset(0, 13).Value)
Set rta = pl1.FindNext(rt) 'redéfinit la recherche (occurrence suivante)
Loop While Not rta Is Nothing And rta.Address <> pa1 'boucle tant qu'il existe des occurrences ailleurs qu'en pa1
'définit la recherche rp (recherche la valeur de la cellule dans la cellule A2 de l'onglet "projet"
Set rp = c.Columns(1).Find(cel.Value, , xlValues, xlWhole)
totbcfer = 0 'réinitialise la variable tmec
totreelle = 0 'réinitialise la variable telec
Rmat = 0 'réinitialise la variable tpneu
tmat = 0 'réinitialise la variable ttraj
End If 'fin de la condition
Do 'exécute
B2.Value = tmec 'place en le total bcfer
B2.Value = tmec 'place en le total reelle
Next cel 'prochaine cellule de la boucle
t.Columns(1).Interior.ColorIndex = xlNone 'supprime la couleur rouge dans la colonne F
End Sub

Merci, à plus !
 

Discussions similaires

Réponses
8
Affichages
330

Statistiques des forums

Discussions
312 397
Messages
2 088 058
Membres
103 710
dernier inscrit
kty