Transformer une inputbox en une boucle
Bonjour à tous,
J'aurais besoin de votre aide pour transformer l'inputbox de ma macro en une boucle.
Pour faire simple : la macro que j'utilise génère une carte dans la feuille "Carte" à partir des données stockées dans la feuille "Nombre d'actions" et des formes pré-enregistrés dans la feuille "Logo nbre action". Lorsque je lance la macro, une inputbox apparaît et me propose de créer soit la carte "G", soit la carte "HOP", soit la carte "OP".
Jusqu'à maintenant j'utilisais la macro en entrant d'abord la réponse "G", puis je récupérais la carte pour la coller sur un PPT, puis je relançais la macro pour faire de même avec la réponse "HOP" et enfin avec la réponse "OP". Pour gagner du temps, je souhaite désormais retirer cette inputbox pour générer directement les 3 cartes côte à côte.
Donc en gros j'aimerais :
1- créer une boucle (for ?) pour que quand je lance la macro ça me fasse l'opération entière pour les 3 cas (''G" puis "HOP" puis ''OP'')
2- faire en sorte que chaque carte générée s'affiche côte à côte sur la feuille "Carte" (donc les repositionner pour que le coin supérieur gauche soit respectivement en A3 pour la carte ''G'', en J3 pour la carte ''HOP'' et en S3 pour la carte ''OP''). Le bouton "créer la carte" passerait alors en A1.
3- que ça ne groupe pas les 3 cartes ensemble a la fin de l'opération mais que chaque carte soit bien groupée (avec toutes les données qu'il y a dessus) individuellement, sous les noms "carte à copier 1", "carte à copier 2" et "carte à copier 3".
Vous trouverez la macro initiale sur le fichier excel (anonymisé) joint. Cette macro a été réalisée par mon prédécesseur qui était bien plus à l'aise en VBA que moi-même, d'où mon appel à l'aide comme je ne parviens pas à adapter la macro moi-même malgré mes tentatives...
Je vous remercie !
J'ai mis un peu plus de commentaires sur la macro pour simplifier sa lecture.
J'ai également précisé son architecture, que voici :
Phase 1 - Préparation
Phase 2 - Récupération des données
Phase 3 - Réalisation de la carte (Partie 1 : préparation de la carte / Partie 2 : mise en place des étiquettes sur la carte)
L'objectif est donc de répéter la phrase 3 pour que les 3 cartes apparaissent côte à côte, chacune groupée individuellement avec les éléments qui lui sont ajoutés durant l'opération (étiquettes, légende, zone complémentaire).
J'ai essayé d'être le plus clair possible mais n'hésitez pas si vous avez des questions.
Merci à vous.
J'ai essayé de bidouiller le code suivant mais sans succès, je n'arrive pas à faire fonctionner la macro... need some help svp haha
Sub Créer_la_carte()
'Crée la carte
'ARCHITECTURE DE LA MACRO :
'I - PREPARATION
'II - RECUPERATION DES DONNEES
'III - REALISATION DE LA CARTE
'PARTIE 1 : PREPARATION DE LA CARTE
'PARTIE 2 : MISE EN PLACE DES ETIQUETTES SUR LA CARTE
' I - PREPARATION
'Crée la variable qui va enregistre tous les noms des shapes à grouper
Select Case numéro_carte_a_copier
Case "G"
Dim carte_a_copier_1(500)
num_carte_a_copier_1 = 1
Case "HOP"
Dim carte_a_copier_2(500)
num_carte_a_copier_2 = 1
Case "OP"
Dim carte_a_copier_3(500)
num_carte_a_copier_3 = 1
End Select
'Do While type_carte = "G" Or "HOP" Or "OP"
'Nettoie l'onglet carte
Sheets("Carte").Select
Range("A3", "AA40").Delete
' II - RECUPERATION DES DONNEES
Sheets("Nombre d'actions").Select
'action(n° de l'action, 1=pays, 2=actions MA, 3=actions ME, 4=type MA, 5=type ME, 6=hommesxjours, 7=total action par pays pour G, 8 = type TOTAL)
Dim action(200, 8)
Dim nbre_action As Integer 'nombre d'actions totale prises en compte
Dim Pays_en_cours As String 'pays/ligne en cours de traitement
Dim Type_logo As String 'type de logo selon type d'action (MA ou ME)
If type_carte = "G" And type_carte = "HOP" And type_carte = "OP" Then
Select Case type_carte
Case "G"
I = 4
Case "HOP"
I = 56
Case "OP"
I = 107
End Select
nbre_action = 1
Do While Cells(I, 1) <> ""
action(nbre_action, 1) = Cells(i, 1) 'sur la feuille "nombre d'action", renvoie à la colonne pays
action(nbre_action, 2) = Cells(i, 4) 'sur la feuille "nombre d'action", renvoie à la colonne MA
action(nbre_action, 3) = Cells(i, 5) 'sur la feuille "nombre d'action", renvoie à la colonne ME
action(nbre_action, 6) = Cells(i, 3) 'sur la feuille "nombre d'action", renvoie à la colonne HxJ
action(nbre_action, 7) = Cells(i, 2) 'sur la feuille "nombre d'action", renvoie à la colonne NB
'Arrondit le nombre total d'action par pays pour le cas G (permettra sélection du bon logo sur la carte)
If type_carte = "G" Then
Select Case action(nbre_action, 7)
Case ""
action(nbre_action, 8) = 0
Case 1 To 3
action(nbre_action, 8) = 3
Case 4 To 6
action(nbre_action, 8) = 6
Case Is >= 7
action(nbre_action, 8) = 7
End Select
End If
If type_carte = "HOP" Or type_carte = "OP" Then
Select Case action(nbre_action, 2) 'pour les actions MA
Case ""
action(nbre_action, 4) = 0
Case 1 To 3
action(nbre_action, 4) = 3
Case 4 To 6
action(nbre_action, 4) = 6
Case Is >= 7
action(nbre_action, 4) = 7
End Select
Select Case action(nbre_action, 3) 'pour les actions ME
Case ""
action(nbre_action, 5) = 0
Case 1 To 3
action(nbre_action, 5) = 3
Case 4 To 6
action(nbre_action, 5) = 6
Case Is >= 7
action(nbre_action, 5) = 7
End Select
End If
I = I + 1
nbre_action = nbre_action + 1
Loop
nbre_action = nbre_action - 1
' III - REALISATION DE LA CARTE
'PARTIE 1 : PREPARATION DE LA CARTE
'Copie la carte vierge dans l'onglet "carte"
Select Case type_carte
Case Is = "G"
Sheets("Logo nbre action").Shapes("Carte Afrique vierge").Copy
Sheets("Carte").Select
ActiveSheet.Paste
Selection.Left = 1
Selection.Top = 3
'Enregistre la forme dans la carte à copier
carte_a_copier_1(num_carte_a_copier_1) = Selection.Name
num_carte_a_copier_1 = num_carte_a_copier_1 + 1
'Enregistre la position du 1er pays hors carte (pays dans la liste de la feuille "nombre d'action" qui sont hors Afrique/Moyen-Orient)
pos_pays_hors_carte_1 = Selection.Height
Case Is = "HOP"
Sheets("Logo nbre action").Shapes("Carte Afrique vierge").Copy
Sheets("Carte").Select
ActiveSheet.Paste
Selection.Left = 100
Selection.Top = 3
'Enregistre la forme dans la carte à copier
carte_a_copier_2(num_carte_a_copier_2) = Selection.Name
num_carte_a_copier_2 = num_carte_a_copier_2 + 1
'Enregistre la position du 1er pays hors carte (pays dans la liste de la feuille "nombre d'action" qui sont hors Afrique/Moyen-Orient)
pos_pays_hors_carte_2 = Selection.Height
Case Is = "OP"
Sheets("Logo nbre action").Shapes("Carte Afrique OP").Copy
Sheets("Carte").Select
ActiveSheet.Paste
Selection.Left = 200
Selection.Top = 3
'Enregistre la forme dans la carte à copier
carte_a_copier_3(num_carte_a_copier_3) = Selection.Name
num_carte_a_copier_3 = num_carte_a_copier_3 + 1
'Enregistre la position du 1er pays hors carte (pays dans la liste de la feuille "nombre d'action" qui sont hors Afrique/Moyen-Orient)
pos_pays_hors_carte_3 = Selection.Height
End Select
'Mise en place des zones complémenntaires prévues pour chaque carte
If type_carte = "OP" Then
' Case Is = "G"
' Sheets("Logo nbre action").Shapes("Zone HS").Copy
' ActiveSheet.Paste
' Selection.Left = 1
' Selection.Top = 3
' carte_a_copier_1(num_carte_a_copier_1) = Selection.Name
' num_carte_a_copier_1 = num_carte_a_copier_1 + 1
Sheets("Logo nbre action").Shapes("Zones OP").Copy
ActiveSheet.Paste
Selection.Left = 200
Selection.Top = 3
carte_a_copier_3(num_carte_a_copier_3) = Selection.Name
num_carte_a_copier_3 = num_carte_a_copier_3 + 1
End If
'Mise en place de la légende
If type_carte <> "OP" Then
Select Case type_carte
Case Is = "G"
Sheets("Logo nbre action").Shapes("Lég globale").Copy
ActiveSheet.Paste
Selection.Top = ActiveSheet.Shapes("Carte Afrique vierge").Height - Selection.Height - 5
Selection.Left = 150 - Selection.Width / 2
'Enregistre la forme dans la carte à copier
carte_a_copier_1(num_carte_a_copier_1) = Selection.Name
num_carte_a_copier_1 = num_carte_a_copier_1 + 1
Case Is = "HOP"
Sheets("Logo nbre action").Shapes("Légende HOP et OP").Copy
ActiveSheet.Paste
Selection.Top = ActiveSheet.Shapes("Carte Afrique vierge").Height - Selection.Height - 5
Selection.Left = 250 - Selection.Width / 2
'Enregistre la forme dans la carte à copier
carte_a_copier_2(num_carte_a_copier_2) = Selection.Name
num_carte_a_copier_2 = num_carte_a_copier_2 + 1
End Select
End If
'PARTIE 2 : MISE EN PLACE DES ETIQUETTES SUR LA CARTE
nbre_erreur = 0 'pour les pays hors de la carte
For I = 1 To nbre_action
'Définition des variables pour la mise en place des différents types de logos sur la carte
Pays_en_cours = action(I, 1)
Pays_et_hxj = action(I, 1) & Chr(10) & action(I, 6)
Select Case type_carte
Case Is = "G"
Type_logo = "Global " & action(I, 8)
'copie du logo
Sheets("Logo nbre action").Shapes(Type_logo).Copy
ActiveSheet.Paste
'rennomage du logo en "nbre_action pays"
Selection.Name = "nbre_action " & Pays_en_cours
'Enregistre la forme dans la carte à copier
carte_a_copier_1(num_carte_a_copier_1) = Selection.Name
num_carte_a_copier_1 = num_carte_a_copier_1 + 1
Case Is = "HOP"
Type_logo = "MA " & action(I, 4) & " - ME " & action(I, 5)
'copie du logo
Sheets("Logo nbre action").Shapes(Type_logo).Copy
ActiveSheet.Paste
'rennomage du logo en "nbre_action pays"
Selection.Name = "nbre_action " & Pays_en_cours
'Enregistre la forme dans la carte à copier
carte_a_copier_2(num_carte_a_copier_2) = Selection.Name
num_carte_a_copier_2 = num_carte_a_copier_2 + 1
Case Is = "OP"
Type_logo = "MA " & action(I, 4) & " - ME " & action(I, 5)
'copie du logo
Sheets("Logo nbre action").Shapes(Type_logo).Copy
ActiveSheet.Paste
'rennomage du logo en "nbre_action pays"
Selection.Name = "nbre_action " & Pays_en_cours
'Enregistre la forme dans la carte à copier
carte_a_copier_3(num_carte_a_copier_3) = Selection.Name
num_carte_a_copier_3 = num_carte_a_copier_3 + 1
End Select
'écriture du pays dans le rectangle
ActiveSheet.Shapes("Pays " & Type_logo).Select
Select Case type_carte
Case Is = "HOP", "OP"
Selection.Text = Pays_en_cours
Selection.Name = "Pays " & Pays_en_cours
Case Is = "G"
Selection.Text = Pays_et_hxj
Selection.Name = "Pays " & Pays_en_cours
End Select
'écriture du bon nombre d'action dans l'étiquette
Select Case type_carte
Case Is = "HOP", "OP"
If action(I, 2) <> "" Then
ActiveSheet.Shapes("NbreMA " & Type_logo).Select
Selection.Text = action(I, 2)
Selection.Name = "NbreMA " & Pays_en_cours
End If
If action(I, 3) <> "" Then
ActiveSheet.Shapes("NbreME " & Type_logo).Select
Selection.Text = action(I, 3)
Selection.Name = "NbreME " & Pays_en_cours
End If
Case Is = "G"
ActiveSheet.Shapes("Nbre " & Type_logo).Select
Selection.Text = action(I, 7)
Selection.Name = "Nbre " & Pays_en_cours
End Select
'placer le logo sur le pays
Set Nombre_Pays = ActiveSheet.Shapes("nbre_action " & Pays_en_cours)
On Error Resume Next
Err = 0
Set Forme_Pays = ActiveSheet.Shapes(Pays_en_cours)
If Err = 0 Then 'Si le pays existe sur la carte
Nombre_Pays.Left = Forme_Pays.Left + Forme_Pays.Width / 2 - Nombre_Pays.Width / 2
Nombre_Pays.Top = Forme_Pays.Top + Forme_Pays.Height / 2 - Nombre_Pays.Height / 2
Else ' sinon = si le pays n'est pas sur la carte (le positionne à gauche de la carte)
Set Forme_Pays = ActiveSheet.Shapes("Carte Afrique vierge")
'Set Nombre_Pays = ActiveSheet.Shapes.Range(Array("nbre_action " & Pays_en_cours))
Nombre_Pays.Left = Forme_Pays.Left - Nombre_Pays.Width / 2 + 50
Nombre_Pays.Top = pos_pays_hors_carte - Nombre_Pays.Height - 5
nbre_erreur = nbre_erreur + 1
pos_pays_hors_carte = Nombre_Pays.Top
End If
Next I
'grouper l'ensemble des éléments sur la carte enregistrés dans "carte_a_copier"
Select Case carte_a_copier
Case Is = "G"
ActiveSheet.Shapes.Range(carte_a_copier_1).Group.Name = "Carte à copier 1"
Case Is = "HOP"
ActiveSheet.Shapes.Range(carte_a_copier_2).Group.Name = "Carte à copier 2"
Case Is = "OP"
ActiveSheet.Shapes.Range(carte_a_copier_3).Group.Name = "Carte à copier 3"
End Select
End If
End Sub